@stackmemoryai/stackmemory 1.2.0 → 1.2.1
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/dist/src/cli/claude-sm.js +65 -0
- package/dist/src/integrations/mcp/server.js +109 -0
- package/dist/src/integrations/mcp/tool-definitions.js +53 -1
- package/dist/src/utils/hook-installer.js +155 -0
- package/package.json +2 -2
- package/scripts/gepa/.before-optimize.md +159 -0
- package/scripts/gepa/generations/gen-000/baseline.md +159 -124
- package/scripts/gepa/generations/gen-001/baseline.md +159 -0
- package/scripts/gepa/generations/gen-001/variant-a.md +166 -0
- package/scripts/gepa/generations/gen-001/variant-b.md +237 -0
- package/scripts/gepa/generations/gen-001/variant-c.md +61 -0
- package/scripts/gepa/generations/gen-001/variant-d.md +119 -0
- package/scripts/gepa/results/eval-1-baseline.json +41 -0
- package/scripts/gepa/results/eval-1-variant-a.json +41 -0
- package/scripts/gepa/results/eval-1-variant-b.json +41 -0
- package/scripts/gepa/results/eval-1-variant-c.json +41 -0
- package/scripts/gepa/results/eval-1-variant-d.json +41 -0
- package/scripts/gepa/state.json +41 -2
- package/scripts/install-claude-hooks-auto.js +176 -44
- package/templates/claude-hooks/auto-checkpoint.js +174 -0
- package/templates/claude-hooks/chime-on-stop.sh +22 -0
- package/templates/claude-hooks/session-rescue.sh +15 -0
- package/templates/claude-hooks/stop-checkpoint.js +120 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# CLAUDE.md [compact]
|
|
2
|
+
|
|
3
|
+
## Refs
|
|
4
|
+
```
|
|
5
|
+
~/.claude/MCP.md|PERSONAS.md|STACKMEMORY.md
|
|
6
|
+
~/.claude/agent_docs/*.compact.md (on-demand)
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
```
|
|
11
|
+
build|lint|lint:fix|test|test:run
|
|
12
|
+
git status|diff|log --oneline -10
|
|
13
|
+
npx tsc --noEmit|npm run format
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Core
|
|
17
|
+
[PRINCIPLE]code>docs|simple→complex|security first|evidence-based
|
|
18
|
+
[COMM]concise|symbols>prose|bullets>paragraphs|<4 lines
|
|
19
|
+
[WORKFLOW]TodoWrite(3+)→execute→update
|
|
20
|
+
[GIT]clean commits|type(scope): message|feature/|fix/|chore/ prefix
|
|
21
|
+
[STACK]React/TS/Vite|Node/Express/PG|Git/ESLint/Jest
|
|
22
|
+
|
|
23
|
+
## Think
|
|
24
|
+
[NONE]single file,<10 lines
|
|
25
|
+
[THINK]multi-file,standard|~4K
|
|
26
|
+
[HARD]architecture,complex|~10K
|
|
27
|
+
[ULTRA]critical redesign|~32K
|
|
28
|
+
|
|
29
|
+
## Critical [C:10]
|
|
30
|
+
[SECURITY]
|
|
31
|
+
NEVER:commit secrets|exec untrusted|expose PII|force push
|
|
32
|
+
ALWAYS:validate input|parameterized queries|hash passwords
|
|
33
|
+
BLOCK:~/.ssh|~/.aws|/api[_-]?key|token|secret/i
|
|
34
|
+
|
|
35
|
+
<example>
|
|
36
|
+
❌ BAD:
|
|
37
|
+
```js
|
|
38
|
+
db.query(`SELECT * FROM users WHERE id = ${userId}`)
|
|
39
|
+
```
|
|
40
|
+
✅ GOOD:
|
|
41
|
+
```js
|
|
42
|
+
db.query('SELECT * FROM users WHERE id = $1', [userId])
|
|
43
|
+
```
|
|
44
|
+
</example>
|
|
45
|
+
|
|
46
|
+
[ESM]add .js to relative imports|use ts-node-lint-fixer agent on ERR_MODULE_NOT_FOUND
|
|
47
|
+
|
|
48
|
+
<example>
|
|
49
|
+
❌ BAD:
|
|
50
|
+
```ts
|
|
51
|
+
import { foo } from './bar'
|
|
52
|
+
```
|
|
53
|
+
✅ GOOD:
|
|
54
|
+
```ts
|
|
55
|
+
import { foo } from './bar.js'
|
|
56
|
+
```
|
|
57
|
+
</example>
|
|
58
|
+
|
|
59
|
+
[ERROR]return undefined>throw|log+continue>crash|filter nulls
|
|
60
|
+
|
|
61
|
+
<example>
|
|
62
|
+
❌ BAD:
|
|
63
|
+
```js
|
|
64
|
+
function getUser(id) {
|
|
65
|
+
if (!id) throw new Error('No ID')
|
|
66
|
+
return users.find(u => u.id === id)
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
✅ GOOD:
|
|
70
|
+
```js
|
|
71
|
+
function getUser(id) {
|
|
72
|
+
if (!id) return undefined
|
|
73
|
+
return users.find(u => u.id === id)
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
</example>
|
|
77
|
+
|
|
78
|
+
[CODE]no emojis|comments only complex logic|short names
|
|
79
|
+
|
|
80
|
+
<example>
|
|
81
|
+
❌ BAD:
|
|
82
|
+
```js
|
|
83
|
+
// This function gets the user from the database
|
|
84
|
+
function getUserFromDatabase(userId) { ... }
|
|
85
|
+
```
|
|
86
|
+
✅ GOOD:
|
|
87
|
+
```js
|
|
88
|
+
function getUser(id) { ... }
|
|
89
|
+
// Only comment complex parts:
|
|
90
|
+
const hash = await bcrypt.hash(pwd, 10) // 10 rounds for security/perf balance
|
|
91
|
+
```
|
|
92
|
+
</example>
|
|
93
|
+
|
|
94
|
+
## High [H:8-9]
|
|
95
|
+
[EFFICIENCY]do>explain|action>ceremony|parallel>sequential
|
|
96
|
+
|
|
97
|
+
<example>
|
|
98
|
+
❌ BAD: "I'll read file A, then file B, then file C..."
|
|
99
|
+
✅ GOOD: [Read A, Read B, Read C in parallel]
|
|
100
|
+
</example>
|
|
101
|
+
|
|
102
|
+
[GIT]status→branch→fetch→pull --rebase|type(scope): message
|
|
103
|
+
|
|
104
|
+
<example>
|
|
105
|
+
✅ GOOD commit messages:
|
|
106
|
+
- feat(auth): add JWT token refresh
|
|
107
|
+
- fix(api): handle null responses
|
|
108
|
+
- chore(deps): bump express to 4.18
|
|
109
|
+
</example>
|
|
110
|
+
|
|
111
|
+
[RECOVERY]try alt→explain→suggest next|never silent fail
|
|
112
|
+
|
|
113
|
+
<example>
|
|
114
|
+
❌ BAD: Test fails → retry same command → retry again
|
|
115
|
+
✅ GOOD: Test fails → check logs → try different approach → explain issue
|
|
116
|
+
</example>
|
|
117
|
+
|
|
118
|
+
[SESSION]track edits/corrections/paths|cache versions/locations
|
|
119
|
+
|
|
120
|
+
## Standards
|
|
121
|
+
[TASK]TodoWrite 3+|one in_progress|update immediate
|
|
122
|
+
|
|
123
|
+
<example>
|
|
124
|
+
✅ GOOD workflow:
|
|
125
|
+
1. User asks to add feature
|
|
126
|
+
2. TodoWrite: ["Design API", "Implement handler", "Add tests", "Update docs"]
|
|
127
|
+
3. TaskUpdate task1 → in_progress
|
|
128
|
+
4. Complete work
|
|
129
|
+
5. TaskUpdate task1 → completed
|
|
130
|
+
6. TaskUpdate task2 → in_progress
|
|
131
|
+
</example>
|
|
132
|
+
|
|
133
|
+
[DESIGN]KISS|YAGNI|SOLID|<20 lines/fn|<5 complexity
|
|
134
|
+
|
|
135
|
+
<example>
|
|
136
|
+
❌ BAD:
|
|
137
|
+
```js
|
|
138
|
+
function processUserDataWithValidationAndTransformation(user, options) {
|
|
139
|
+
// 50 lines of mixed concerns
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
✅ GOOD:
|
|
143
|
+
```js
|
|
144
|
+
function validateUser(user) { ... } // 8 lines
|
|
145
|
+
function transformUser(user) { ... } // 6 lines
|
|
146
|
+
function processUser(user) { // 3 lines
|
|
147
|
+
const valid = validateUser(user)
|
|
148
|
+
return valid ? transformUser(user) : null
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
</example>
|
|
152
|
+
|
|
153
|
+
[FILES]read before write|edit>write|no docs unless asked
|
|
154
|
+
|
|
155
|
+
<example>
|
|
156
|
+
❌ BAD: User asks to update function → Write entire new file
|
|
157
|
+
✅ GOOD: User asks to update function → Read file → Edit specific function
|
|
158
|
+
</example>
|
|
159
|
+
|
|
160
|
+
[VALIDATE]lint→test→build→run|never assume success
|
|
161
|
+
|
|
162
|
+
<example>
|
|
163
|
+
✅ GOOD workflow:
|
|
164
|
+
1. Edit code
|
|
165
|
+
2. `npm run lint` → check output
|
|
166
|
+
3. `npm test` → verify passing
|
|
167
|
+
4. `npm run build` → ensure clean build
|
|
168
|
+
5. Only then mark task complete
|
|
169
|
+
</example>
|
|
170
|
+
|
|
171
|
+
[COVERAGE]maintain or improve test coverage|no untested code paths
|
|
172
|
+
|
|
173
|
+
<example>
|
|
174
|
+
❌ BAD: Add new route without tests
|
|
175
|
+
✅ GOOD: Add new route + unit test + integration test
|
|
176
|
+
</example>
|
|
177
|
+
|
|
178
|
+
## Style
|
|
179
|
+
[OUTPUT]concise|structured|actionable
|
|
180
|
+
|
|
181
|
+
<example>
|
|
182
|
+
❌ BAD: "I've made some changes to the authentication system to improve security..."
|
|
183
|
+
✅ GOOD: "Added JWT refresh tokens in src/auth/tokens.js:45"
|
|
184
|
+
</example>
|
|
185
|
+
|
|
186
|
+
[PUSHBACK]"Simpler: X"|"Risk: Y"|"Consider: Z"
|
|
187
|
+
|
|
188
|
+
<example>
|
|
189
|
+
User: "Add Redis caching to all endpoints"
|
|
190
|
+
✅ GOOD response: "Risk: premature optimization. Consider: profile first, cache hot paths only"
|
|
191
|
+
</example>
|
|
192
|
+
|
|
193
|
+
[QUESTIONS]1-3 clarifying|one at a time|no time estimates
|
|
194
|
+
|
|
195
|
+
<example>
|
|
196
|
+
❌ BAD: "This will take 2-3 hours. Should I add error handling, logging, tests, docs, and type safety?"
|
|
197
|
+
✅ GOOD: "Add error handling for network failures?"
|
|
198
|
+
</example>
|
|
199
|
+
|
|
200
|
+
## Summary Format
|
|
201
|
+
```
|
|
202
|
+
Session: actual vs estimated|variance %
|
|
203
|
+
Completed: N/M tasks|files modified|commits
|
|
204
|
+
Outcomes: deliverables|blockers|next actions
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
<example>
|
|
208
|
+
✅ GOOD summary:
|
|
209
|
+
```
|
|
210
|
+
Completed: 3/4 tasks | 7 files | 2 commits
|
|
211
|
+
Outcomes: Auth refresh implemented, tests passing
|
|
212
|
+
Blockers: Redis connection requires env var
|
|
213
|
+
Next: Add REDIS_URL to .env, deploy to staging
|
|
214
|
+
```
|
|
215
|
+
</example>
|
|
216
|
+
|
|
217
|
+
## Auto-Activate
|
|
218
|
+
[FILES]*.tsx→frontend|*.sql→data|Docker→devops|*.test→qa
|
|
219
|
+
[KEYWORDS]bug/error→debugger|optimize→perf|secure→security
|
|
220
|
+
|
|
221
|
+
<example>
|
|
222
|
+
User shares error.tsx → automatically apply frontend patterns
|
|
223
|
+
User mentions "slow query" → automatically consider performance context
|
|
224
|
+
</example>
|
|
225
|
+
|
|
226
|
+
## Expand (read on match)
|
|
227
|
+
[AGENTIC]multi-agent→AGENTIC_CODING.compact.md
|
|
228
|
+
[CONTEXT]token budget→CONTEXT_MANAGEMENT.compact.md
|
|
229
|
+
[TOOLS]parallel tools→TOOL_USE.compact.md
|
|
230
|
+
[HORIZON]multi-session→LONG_HORIZON.compact.md
|
|
231
|
+
[PROMPTS]prompt design→PROMPT_ENGINEERING.compact.md
|
|
232
|
+
[BUILD]npm build|esbuild|tsc→building_the_project.md
|
|
233
|
+
[CODE]conventions|naming|imports→code_conventions.md
|
|
234
|
+
[TEST]vitest|jest|test:run→running_tests.md
|
|
235
|
+
[OVERVIEW]agent docs|guides→OVERVIEW.md
|
|
236
|
+
|
|
237
|
+
~150t|v4.4.0-compact
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# ProvenantAI
|
|
2
|
+
|
|
3
|
+
## Refs
|
|
4
|
+
```
|
|
5
|
+
AGENTS.md # Agent workflow + guardrails
|
|
6
|
+
PROMPT_PLAN.md # 20 staged prompts
|
|
7
|
+
docs/STYLE.md # Design system (Hatchet + Outliner)
|
|
8
|
+
docs/business/ONE_PAGER.md|VISION.md # Executive summary + vision
|
|
9
|
+
DEV_SPEC.md # Developer spec
|
|
10
|
+
docs/reference/PROJECT.md # Quick reference
|
|
11
|
+
docs/architecture/SYSTEM_INTEGRATION.md # System connections
|
|
12
|
+
docs/architecture/HEARTBEAT_DESIGN.md|WEBHOOK_SYSTEM_DESIGN.md
|
|
13
|
+
docs/nudge-engine-design.md # Proactive alerts
|
|
14
|
+
docs/VALUES.md # Company values
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
```bash
|
|
19
|
+
npm run dev|test|lint|migrate
|
|
20
|
+
docker-compose up -d; railway up # Local DBs; Deploy
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Stack
|
|
24
|
+
Node/Express/PostgreSQL/Redis | Railway | Stripe/Salesforce/QuickBooks
|
|
25
|
+
|
|
26
|
+
## Structure
|
|
27
|
+
src/api|core|features|shared|integrations | docs/ | scripts/ | docker/
|
|
28
|
+
|
|
29
|
+
## Key Context
|
|
30
|
+
- Provenance tracking: source + timestamp + lineage on all data
|
|
31
|
+
- Multi-tenant container isolation
|
|
32
|
+
- Investigation replays: data/investigation-replays/
|
|
33
|
+
- StackMemory: security layer (future session/entity context bridge on KG)
|
|
34
|
+
|
|
35
|
+
## Git
|
|
36
|
+
- No "Co-Authored-By" lines
|
|
37
|
+
- Pre-commit: lint + test (3 parallel suites: unit/core/integrations)
|
|
38
|
+
- Commit format: type(scope): message
|
|
39
|
+
|
|
40
|
+
## Critical Rules
|
|
41
|
+
[SECURITY]
|
|
42
|
+
NEVER: commit secrets|exec untrusted|expose PII|force push
|
|
43
|
+
ALWAYS: validate input|parameterized queries|hash passwords
|
|
44
|
+
BLOCK: ~/.ssh|~/.aws|/api[_-]?key|token|secret/i
|
|
45
|
+
|
|
46
|
+
[ESM] Add .js to relative imports | use ts-node-lint-fixer on ERR_MODULE_NOT_FOUND
|
|
47
|
+
[ERROR] return undefined>throw | log+continue>crash | filter nulls
|
|
48
|
+
[CODE] no emojis | comments only complex logic | short names
|
|
49
|
+
|
|
50
|
+
## Workflow
|
|
51
|
+
[EFFICIENCY] do>explain | action>ceremony | parallel>sequential
|
|
52
|
+
[TASK] TodoWrite 3+ | one in_progress | update immediate
|
|
53
|
+
[DESIGN] KISS|YAGNI|SOLID | <20 lines/fn | <5 complexity
|
|
54
|
+
[FILES] read before write | edit>write | no docs unless asked
|
|
55
|
+
[VALIDATE] lint→test→build→run | never assume success
|
|
56
|
+
[COVERAGE] maintain or improve | no untested paths
|
|
57
|
+
|
|
58
|
+
## Style
|
|
59
|
+
[OUTPUT] concise | structured | actionable | <4 lines default
|
|
60
|
+
[PUSHBACK] "Simpler: X" | "Risk: Y" | "Consider: Z"
|
|
61
|
+
[QUESTIONS] 1-3 clarifying | one at a time | no time estimates
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# ProvenantAI — CLAUDE.md
|
|
2
|
+
|
|
3
|
+
## Quick Reference
|
|
4
|
+
```
|
|
5
|
+
AGENTS.md # TDD workflow, checklists, guardrails
|
|
6
|
+
docs/STYLE.md # Design system (Hatchet + Outliner)
|
|
7
|
+
docs/business/ONE_PAGER.md # Executive summary
|
|
8
|
+
docs/business/VISION.md # Product vision + self-learning thesis
|
|
9
|
+
DEV_SPEC.md|PROMPT_PLAN.md # Dev spec + 20 staged prompts
|
|
10
|
+
docs/architecture/{SYSTEM_INTEGRATION,HEARTBEAT_DESIGN,WEBHOOK_SYSTEM_DESIGN}.md
|
|
11
|
+
docs/nudge-engine-design.md # Proactive alerts
|
|
12
|
+
docs/VALUES.md # Company values
|
|
13
|
+
docs/reference/PROJECT.md # Quick reference (sync with verbose docs)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Stack & Commands
|
|
17
|
+
```bash
|
|
18
|
+
# Stack: Node/Express/PostgreSQL/Redis | Railway | Stripe/Salesforce/QuickBooks
|
|
19
|
+
npm run dev|test|lint|migrate
|
|
20
|
+
docker-compose up -d # Local DBs
|
|
21
|
+
railway up --detach # Deploy
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Core Principles [C:10]
|
|
25
|
+
**Code First**: code>docs | simple→complex | action>explanation | do>plan
|
|
26
|
+
**Security**: NEVER commit secrets|exec untrusted|expose PII|force push
|
|
27
|
+
ALWAYS validate input|parameterized queries|hash passwords
|
|
28
|
+
BLOCK ~/.ssh|~/.aws|/api[_-]?key|token|secret/i
|
|
29
|
+
**ESM**: add .js to relative imports | use ts-node-lint-fixer on ERR_MODULE_NOT_FOUND
|
|
30
|
+
**Reliability**: return undefined>throw | log+continue>crash | filter nulls
|
|
31
|
+
**Style**: no emojis | comments only for complex logic | short names | concise output
|
|
32
|
+
|
|
33
|
+
## Workflow [H:8-9]
|
|
34
|
+
**Tasks**: TodoWrite for 3+ steps | one in_progress | update immediately
|
|
35
|
+
**Files**: read before write | edit>write | no docs unless asked
|
|
36
|
+
**Git**: status→branch→fetch→pull --rebase | clean commits | type(scope): message
|
|
37
|
+
Branches: feature/|fix/|chore/ prefix
|
|
38
|
+
NO Co-Authored-By lines
|
|
39
|
+
**Validate**: lint→test→build→run | never assume success | maintain test coverage
|
|
40
|
+
**Parallel**: independent tool calls in one message | sequential only for dependencies
|
|
41
|
+
**Recovery**: try alt→explain→suggest | never silent fail
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
**Core** (src/core/): monitoring-service|cache-service|queue-service|master-agent|api-validation
|
|
45
|
+
**Structure**: src/{api,core,features,shared,integrations} | docs/ | scripts/ | docker/
|
|
46
|
+
**Patterns**: DI via deps objects | Mock providers in tests | Bull queues | AES-256-GCM KMS
|
|
47
|
+
**Provenance**: every data point = source + timestamp + lineage | multi-tenant isolation
|
|
48
|
+
**SSE**: adapter.streamLLM() → query/stream → frontend ReadableStream
|
|
49
|
+
**Graph**: optional graphService in query router (null when GRAPHITI_URL unset)
|
|
50
|
+
|
|
51
|
+
## Standards [H:8]
|
|
52
|
+
**Design**: KISS|YAGNI|SOLID | <20 lines/fn | <5 complexity
|
|
53
|
+
**Testing**: Jest+SWC | @jest/globals imports | DB/fetch mocks via DI
|
|
54
|
+
Supertest: pass Express app (NOT server)
|
|
55
|
+
Redis: skip connect in NODE_ENV=test
|
|
56
|
+
afterAll: Promise.race + .unref() timer
|
|
57
|
+
Parallel suites: test:unit|test:core|test:integrations (~9s vs 18s)
|
|
58
|
+
**After code changes**: run targeted sub-suite in background
|
|
59
|
+
**Coverage**: maintain or improve | no untested paths
|
|
60
|
+
|
|
61
|
+
## Key Context
|
|
62
|
+
- All 20 PROMPT_PLAN.md prompts complete | 80 suites, 1547 tests passing
|
|
63
|
+
- KG: FalkorDB port 6380 + Graphiti MCP port 8100 | MCP protocol (not REST)
|
|
64
|
+
- @provenantai/cli@1.0.0 published | Railway deployed | Bundle: 236KB+346KB
|
|
65
|
+
- Stripe: Growth (prod_TyNYCJmlKbMdlz) $1499/mo | Scale (prod_TyNY5SGKvVlbpo) $4499/mo
|
|
66
|
+
- Clerk: test keys active | production validator: scripts/setup-clerk-production.sh
|
|
67
|
+
- Dashboard: /app/ base | SSE to /api/v1/query | Sidebar in localStorage
|
|
68
|
+
- Slack: OAuth v2 (migration 030) | delivery.js listens nudge:created | demo: seed-demo-data.js
|
|
69
|
+
|
|
70
|
+
## Key Files
|
|
71
|
+
```
|
|
72
|
+
src/graph/{client.ts,service.ts} # MCP client + graph logic
|
|
73
|
+
src/llm/adapter.js # SYSTEM_PROMPT + streaming
|
|
74
|
+
src/routes/query.js # Query + KG enrichment
|
|
75
|
+
src/auth/auth.middleware.js # Clerk + API key + test mode
|
|
76
|
+
src/nudge/{rule-engine,nudge-engine,delivery}.js # Rules + lifecycle + Slack
|
|
77
|
+
src/integrations/slack/app.js # OAuth v2 + token mgmt
|
|
78
|
+
scripts/{create-stripe-products,seed-demo-data}.js
|
|
79
|
+
dashboard-app/src/pages/{pricing/PricingPage,checkout/*}.tsx
|
|
80
|
+
docs/content/{linkedin-pillar1-drafts,gtm-launch-materials}.md
|
|
81
|
+
docs/business/{CONTENT_INBOUND_STRATEGY,FRACTIONAL_CMO_AGENT}.md
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Design System (docs/STYLE.md)
|
|
85
|
+
- Layout: 208px sidebar | inset shadow main | shadow-soft variants
|
|
86
|
+
- Type: 10-24px (no text-lg+ in app) | tabular-nums | Inter/SF Mono | font-mono headers
|
|
87
|
+
- Color: slate/zinc | brand-600 blue | rose accent CTAs
|
|
88
|
+
- Anti-patterns: no @apply sprawl | no inline hex | no shadow-md+ | max rounded-xl
|
|
89
|
+
|
|
90
|
+
## Output Format
|
|
91
|
+
**Session Summary**:
|
|
92
|
+
```
|
|
93
|
+
Actual vs estimated | variance %
|
|
94
|
+
Completed: N/M tasks | files modified | commits
|
|
95
|
+
Deliverables | blockers | next actions
|
|
96
|
+
```
|
|
97
|
+
**Communication**: concise | bullets>paragraphs | <4 lines | structured
|
|
98
|
+
**Pushback**: "Simpler: X" | "Risk: Y" | "Consider: Z"
|
|
99
|
+
**Questions**: 1-3 max | one at a time | no time estimates
|
|
100
|
+
|
|
101
|
+
## Token Budget (Think Mode)
|
|
102
|
+
[NONE] single file, <10 lines
|
|
103
|
+
[THINK] multi-file, standard | ~4K
|
|
104
|
+
[HARD] architecture, complex | ~10K
|
|
105
|
+
[ULTRA] critical redesign | ~32K
|
|
106
|
+
|
|
107
|
+
## Auto-Activate
|
|
108
|
+
[FILES] *.tsx→frontend | *.sql→data | Docker→devops | *.test→qa
|
|
109
|
+
[KEYWORDS] bug/error→debugger | optimize→perf | secure→security
|
|
110
|
+
|
|
111
|
+
## Next Priorities (Memory)
|
|
112
|
+
- Commit uncommitted agent work (SlackSettings, Nudges polish, smoke tests)
|
|
113
|
+
- Clerk: swap to production keys (user action in dashboard)
|
|
114
|
+
- Slack: create app at api.slack.com, run migration 030
|
|
115
|
+
- Content: schedule pillar posts in Typefully, record Loom demo
|
|
116
|
+
- Design partners: outreach to 3-5 ICP companies
|
|
117
|
+
- Ad platform connectors: Google Ads / Meta for attribution story
|
|
118
|
+
|
|
119
|
+
<!-- Update docs/reference/PROJECT.md when verbose docs change -->
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"variant": "baseline",
|
|
3
|
+
"generation": 1,
|
|
4
|
+
"results": [
|
|
5
|
+
{
|
|
6
|
+
"taskId": "eval-001",
|
|
7
|
+
"taskName": "simple_function",
|
|
8
|
+
"passed": false,
|
|
9
|
+
"duration": 6,
|
|
10
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"taskId": "eval-002",
|
|
14
|
+
"taskName": "refactor_code",
|
|
15
|
+
"passed": false,
|
|
16
|
+
"duration": 5,
|
|
17
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"taskId": "eval-003",
|
|
21
|
+
"taskName": "fix_bug",
|
|
22
|
+
"passed": false,
|
|
23
|
+
"duration": 5,
|
|
24
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"taskId": "eval-004",
|
|
28
|
+
"taskName": "add_feature",
|
|
29
|
+
"passed": false,
|
|
30
|
+
"duration": 5,
|
|
31
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"taskId": "eval-005",
|
|
35
|
+
"taskName": "code_review",
|
|
36
|
+
"passed": false,
|
|
37
|
+
"duration": 4,
|
|
38
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"variant": "variant-a",
|
|
3
|
+
"generation": 1,
|
|
4
|
+
"results": [
|
|
5
|
+
{
|
|
6
|
+
"taskId": "eval-001",
|
|
7
|
+
"taskName": "simple_function",
|
|
8
|
+
"passed": false,
|
|
9
|
+
"duration": 5,
|
|
10
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"taskId": "eval-002",
|
|
14
|
+
"taskName": "refactor_code",
|
|
15
|
+
"passed": false,
|
|
16
|
+
"duration": 10,
|
|
17
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"taskId": "eval-003",
|
|
21
|
+
"taskName": "fix_bug",
|
|
22
|
+
"passed": false,
|
|
23
|
+
"duration": 7,
|
|
24
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"taskId": "eval-004",
|
|
28
|
+
"taskName": "add_feature",
|
|
29
|
+
"passed": false,
|
|
30
|
+
"duration": 6,
|
|
31
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"taskId": "eval-005",
|
|
35
|
+
"taskName": "code_review",
|
|
36
|
+
"passed": false,
|
|
37
|
+
"duration": 5,
|
|
38
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"variant": "variant-b",
|
|
3
|
+
"generation": 1,
|
|
4
|
+
"results": [
|
|
5
|
+
{
|
|
6
|
+
"taskId": "eval-001",
|
|
7
|
+
"taskName": "simple_function",
|
|
8
|
+
"passed": false,
|
|
9
|
+
"duration": 5,
|
|
10
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"taskId": "eval-002",
|
|
14
|
+
"taskName": "refactor_code",
|
|
15
|
+
"passed": false,
|
|
16
|
+
"duration": 5,
|
|
17
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"taskId": "eval-003",
|
|
21
|
+
"taskName": "fix_bug",
|
|
22
|
+
"passed": false,
|
|
23
|
+
"duration": 4,
|
|
24
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"taskId": "eval-004",
|
|
28
|
+
"taskName": "add_feature",
|
|
29
|
+
"passed": false,
|
|
30
|
+
"duration": 5,
|
|
31
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"taskId": "eval-005",
|
|
35
|
+
"taskName": "code_review",
|
|
36
|
+
"passed": false,
|
|
37
|
+
"duration": 5,
|
|
38
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"variant": "variant-c",
|
|
3
|
+
"generation": 1,
|
|
4
|
+
"results": [
|
|
5
|
+
{
|
|
6
|
+
"taskId": "eval-001",
|
|
7
|
+
"taskName": "simple_function",
|
|
8
|
+
"passed": false,
|
|
9
|
+
"duration": 4,
|
|
10
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"taskId": "eval-002",
|
|
14
|
+
"taskName": "refactor_code",
|
|
15
|
+
"passed": false,
|
|
16
|
+
"duration": 5,
|
|
17
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"taskId": "eval-003",
|
|
21
|
+
"taskName": "fix_bug",
|
|
22
|
+
"passed": false,
|
|
23
|
+
"duration": 4,
|
|
24
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"taskId": "eval-004",
|
|
28
|
+
"taskName": "add_feature",
|
|
29
|
+
"passed": false,
|
|
30
|
+
"duration": 4,
|
|
31
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"taskId": "eval-005",
|
|
35
|
+
"taskName": "code_review",
|
|
36
|
+
"passed": false,
|
|
37
|
+
"duration": 4,
|
|
38
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"variant": "variant-d",
|
|
3
|
+
"generation": 1,
|
|
4
|
+
"results": [
|
|
5
|
+
{
|
|
6
|
+
"taskId": "eval-001",
|
|
7
|
+
"taskName": "simple_function",
|
|
8
|
+
"passed": false,
|
|
9
|
+
"duration": 4,
|
|
10
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"taskId": "eval-002",
|
|
14
|
+
"taskName": "refactor_code",
|
|
15
|
+
"passed": false,
|
|
16
|
+
"duration": 4,
|
|
17
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"taskId": "eval-003",
|
|
21
|
+
"taskName": "fix_bug",
|
|
22
|
+
"passed": false,
|
|
23
|
+
"duration": 4,
|
|
24
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"taskId": "eval-004",
|
|
28
|
+
"taskName": "add_feature",
|
|
29
|
+
"passed": false,
|
|
30
|
+
"duration": 4,
|
|
31
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"taskId": "eval-005",
|
|
35
|
+
"taskName": "code_review",
|
|
36
|
+
"passed": false,
|
|
37
|
+
"duration": 4,
|
|
38
|
+
"output": "/bin/sh: timeout: command not found\n"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
package/scripts/gepa/state.json
CHANGED
|
@@ -2,13 +2,52 @@
|
|
|
2
2
|
"currentGeneration": 0,
|
|
3
3
|
"bestVariant": "baseline",
|
|
4
4
|
"bestScore": 0,
|
|
5
|
-
"targetPath": "
|
|
5
|
+
"targetPath": "/Users/jwu/Dev/provenantai/AGENTS.md",
|
|
6
6
|
"history": [
|
|
7
7
|
{
|
|
8
8
|
"generation": 0,
|
|
9
9
|
"variant": "baseline",
|
|
10
10
|
"action": "init",
|
|
11
|
-
"timestamp": "2026-02-
|
|
11
|
+
"timestamp": "2026-02-14T17:42:19.929Z"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"generation": 1,
|
|
15
|
+
"action": "mutate",
|
|
16
|
+
"variants": [
|
|
17
|
+
"variant-a",
|
|
18
|
+
"variant-b",
|
|
19
|
+
"variant-c",
|
|
20
|
+
"variant-d"
|
|
21
|
+
],
|
|
22
|
+
"timestamp": "2026-02-14T17:44:28.832Z"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"generation": 1,
|
|
26
|
+
"action": "select",
|
|
27
|
+
"scores": [
|
|
28
|
+
{
|
|
29
|
+
"variant": "baseline",
|
|
30
|
+
"score": 0
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"variant": "variant-a",
|
|
34
|
+
"score": 0
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"variant": "variant-b",
|
|
38
|
+
"score": 0
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"variant": "variant-c",
|
|
42
|
+
"score": 0
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"variant": "variant-d",
|
|
46
|
+
"score": 0
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"best": "baseline",
|
|
50
|
+
"timestamp": "2026-02-14T17:44:28.998Z"
|
|
12
51
|
}
|
|
13
52
|
]
|
|
14
53
|
}
|