pi-hermes-memory 0.3.2 → 0.4.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/docs/ROADMAP.md CHANGED
@@ -242,50 +242,68 @@ Project-scoped memory (`~/.pi/agent/<project>/MEMORY.md`) was added in the featu
242
242
 
243
243
  ---
244
244
 
245
- ## v0.4.0 — Structured Storage + Session Search
245
+ ## v0.4.0 — SQLite FTS5 Session Search + Hybrid Memory
246
246
 
247
- **Goal**: SQLite backend with FTS5 full-text search over all past conversations. MemoryBackend interface for pluggable storage. Keep the same tool interface.
247
+ **Goal**: SQLite backend with FTS5 full-text search over all past conversations. Extended memory store with unlimited capacity. Increased core memory limits.
248
248
 
249
- ### Core Abstraction
249
+ **Why now**: Power users hit the 2,200-char limit and lose important knowledge. Past sessions are rich with context but unreachable. Hybrid memory solves both — core memories always injected, deep knowledge searchable on demand.
250
250
 
251
- ```typescript
252
- interface MemoryBackend {
253
- // Write
254
- add(target: "memory" | "user", entry: MemoryEntry): Promise<MemoryResult>;
255
- replace(target: "memory" | "user", query: string, entry: MemoryEntry): Promise<MemoryResult>;
256
- remove(target: "memory" | "user", query: string): Promise<MemoryResult>;
251
+ **Full plan**: `docs/0.4/PLAN.md` · **Tasks**: `docs/0.4/TASKS.md`
257
252
 
258
- // Read
259
- getAll(target: "memory" | "user"): Promise<MemoryEntry[]>;
260
- search(query: string, limit?: number): Promise<MemoryEntry[]>;
253
+ ### Architecture
261
254
 
262
- // Lifecycle
263
- formatForSystemPrompt(cwd?: string, prompt?: string): Promise<string>;
264
- close(): Promise<void>;
265
- }
266
255
  ```
256
+ Session starts
257
+
258
+ ┌─────────────────────────────────────────────────┐
259
+ │ System Prompt (always injected) │
260
+ │ • MEMORY.md — 5,000 chars (up from 2,200) │
261
+ │ • USER.md — 5,000 chars (up from 1,375) │
262
+ │ • Project MEMORY.md — 5,000 chars │
263
+ │ • Skills index │
264
+ └─────────────────────────────────────────────────┘
265
+
266
+ Agent has access to tools:
267
+ memory_search("prisma migration")
268
+ → Searches SQLite memories table (global + project)
269
+ → Returns top-10 relevant entries
270
+
271
+ session_search("how we fixed the test hang")
272
+ → Searches session history via FTS5
273
+ → Returns relevant conversation snippets
274
+ ```
275
+
276
+ ### Data Model
267
277
 
268
- Current `MemoryStore` becomes `MarkdownBackend` — the default, zero-dependency implementation. New `SQLiteBackend` adds structure + FTS5 search.
278
+ - `~/.pi/agent/memory/sessions.db` single SQLite file
279
+ - `sessions` + `messages` tables — all past conversations indexed
280
+ - `message_fts` FTS5 virtual table — full-text search across messages
281
+ - `memories` table — extended memory entries (unlimited, searchable)
282
+ - `memory_fts` FTS5 virtual table — full-text search across memories
269
283
 
270
284
  ### Deliverables
271
285
 
272
- - [ ] `MemoryBackend` interface in `src/types.ts`
273
- - [ ] `MarkdownBackend` — wraps current `MemoryStore` (backwards compatible)
274
- - [ ] `SQLiteBackend` — FTS5 search, key-value entries, confidence scores, dedup by key
275
- - [ ] Session indexer — index past and current session conversations for full-text search
276
- - [ ] `session_search` tool agent can query past conversations on demand
277
- - [ ] Summarization via `pi.exec()` — summarize relevant session fragments to keep token cost manageable
278
- - [ ] Config: `"backend": "markdown" | "sqlite"` (defaults to `markdown` for zero-dep install)
286
+ - [ ] `better-sqlite3` dependency SQLite with FTS5
287
+ - [ ] `src/store/db.ts` — DatabaseManager (lazy init, WAL mode, auto-create tables)
288
+ - [ ] `src/store/session-parser.ts` — JSONL parser for Pi session files
289
+ - [ ] `src/store/session-indexer.ts` — index sessions + messages into SQLite
290
+ - [ ] `src/store/session-search.ts` — FTS5 search across session history
291
+ - [ ] `src/store/sqlite-memory-store.ts` — extended memory store (unlimited, searchable)
292
+ - [ ] `session_search` tool agent queries past conversations
293
+ - [ ] `memory_search` tool — agent queries extended memories
294
+ - [ ] `/memory-index-sessions` command — bulk import existing sessions
295
+ - [ ] Auto-index session on shutdown
296
+ - [ ] Char limits: MEMORY.md 2,200 → 5,000, USER.md 1,375 → 5,000, project 2,200 → 5,000
279
297
  - [ ] Config: `sessionSearchEnabled: boolean` (default: true)
280
298
  - [ ] Config: `sessionRetentionDays: number` (default: 90)
281
- - [ ] Migration tool: markdown → sqlite one-time import
282
299
 
283
300
  ### What Does NOT Change
284
301
 
285
- - Content scanner (guards all backends)
286
- - Tool interface (`memory` tool name and actions)
302
+ - Content scanner (guards all writes)
303
+ - Memory tool interface (add/replace/remove actions)
287
304
  - System prompt injection (frozen snapshot pattern)
288
- - Config file location and format (just adds new fields)
305
+ - Skills system (unchanged)
306
+ - Background review, correction detection, auto-consolidation (unchanged)
289
307
 
290
308
  ---
291
309
 
@@ -387,7 +405,7 @@ gantt
387
405
  Project memory polish :v03d, after v03c, 2d
388
406
 
389
407
  section v0.4.0
390
- MemoryBackend interface + SQLite + session search:v04a, after v03d, 10d
408
+ SQLite FTS5 + session search + hybrid memory :v04a, after v03d, 10d
391
409
 
392
410
  section v0.5.0
393
411
  ExternalSync + Mem0 / Honcho :v05a, after v04b, 10d
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 738.25px; background-color: white;" viewBox="0 0 738.25 572" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-subGraph2" data-look="classic"><rect style="" x="431" y="436" width="282.15625" height="128"/><g class="cluster-label" transform="translate(479.0625, 436)"><foreignObject width="186.03125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>On Demand (via skill tool)</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-subGraph1" data-look="classic"><rect style="" x="8" y="234" width="722.25" height="128"/><g class="cluster-label" transform="translate(250.8203125, 234)"><foreignObject width="236.609375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>System Prompt (frozen snapshot)</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-subGraph0" data-look="classic"><rect style="" x="10.1328125" y="8" width="699.5390625" height="176"/><g class="cluster-label" transform="translate(295.08984375, 8)"><foreignObject width="129.625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Persistent Storage</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M122.547,135L122.547,143.167C122.547,151.333,122.547,167.667,122.547,180C122.547,192.333,122.547,200.667,122.547,209C122.547,217.333,122.547,225.667,122.547,233.333C122.547,241,122.547,248,122.547,251.5L122.547,255" id="my-svg-L_MEM_SMEM_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MEM_SMEM_0" data-points="W3sieCI6MTIyLjU0Njg3NSwieSI6MTM1fSx7IngiOjEyMi41NDY4NzUsInkiOjE4NH0seyJ4IjoxMjIuNTQ2ODc1LCJ5IjoyMDl9LHsieCI6MTIyLjU0Njg3NSwieSI6MjM0fSx7IngiOjEyMi41NDY4NzUsInkiOjI1OX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M325.5,135L325.5,143.167C325.5,151.333,325.5,167.667,325.5,180C325.5,192.333,325.5,200.667,325.5,209C325.5,217.333,325.5,225.667,325.5,233.333C325.5,241,325.5,248,325.5,251.5L325.5,255" id="my-svg-L_USR_SUSR_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_USR_SUSR_0" data-points="W3sieCI6MzI1LjUsInkiOjEzNX0seyJ4IjozMjUuNSwieSI6MTg0fSx7IngiOjMyNS41LCJ5IjoyMDl9LHsieCI6MzI1LjUsInkiOjIzNH0seyJ4IjozMjUuNSwieSI6MjU5fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M572.078,159L572.078,163.167C572.078,167.333,572.078,175.667,572.078,184C572.078,192.333,572.078,200.667,572.078,209C572.078,217.333,572.078,225.667,572.078,233.333C572.078,241,572.078,248,572.078,251.5L572.078,255" id="my-svg-L_SKL_SSKL_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SKL_SSKL_0" data-points="W3sieCI6NTcyLjA3ODEyNSwieSI6MTU5fSx7IngiOjU3Mi4wNzgxMjUsInkiOjE4NH0seyJ4Ijo1NzIuMDc4MTI1LCJ5IjoyMDl9LHsieCI6NTcyLjA3ODEyNSwieSI6MjM0fSx7IngiOjU3Mi4wNzgxMjUsInkiOjI1OX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M572.078,337L572.078,341.167C572.078,345.333,572.078,353.667,572.078,364C572.078,374.333,572.078,386.667,572.078,399C572.078,411.333,572.078,423.667,572.078,433.333C572.078,443,572.078,450,572.078,453.5L572.078,457" id="my-svg-L_SSKL_FULL_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SSKL_FULL_0" data-points="W3sieCI6NTcyLjA3ODEyNSwieSI6MzM3fSx7IngiOjU3Mi4wNzgxMjUsInkiOjM2Mn0seyJ4Ijo1NzIuMDc4MTI1LCJ5IjozOTl9LHsieCI6NTcyLjA3ODEyNSwieSI6NDM2fSx7IngiOjU3Mi4wNzgxMjUsInkiOjQ2MX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_MEM_SMEM_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_USR_SUSR_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_SKL_SSKL_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(572.078125, 399)"><g class="label" data-id="L_SSKL_FULL_0" transform="translate(-33.203125, -12)"><foreignObject width="66.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>skill view</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-MEM-0" data-look="classic" transform="translate(122.546875, 96)"><rect class="basic label-container" style="" x="-77.4140625" y="-39" width="154.828125" height="78"/><g class="label" style="" transform="translate(-47.4140625, -24)"><rect/><foreignObject width="94.828125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>MEMORY.md<br /><i>Agent's notes</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-USR-1" data-look="classic" transform="translate(325.5, 96)"><rect class="basic label-container" style="" x="-73.0703125" y="-39" width="146.140625" height="78"/><g class="label" style="" transform="translate(-43.0703125, -24)"><rect/><foreignObject width="86.140625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>USER.md<br /><i>User profile</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SKL-2" data-look="classic" transform="translate(572.078125, 96)"><rect class="basic label-container" style="" x="-102.59375" y="-63" width="205.1875" height="126"/><g class="label" style="" transform="translate(-72.59375, -48)"><rect/><foreignObject width="145.1875" height="96"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>skills/<br /><i>Procedural memory</i><br />debug-ts.md<br />deploy-checklist.md</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SMEM-3" data-look="classic" transform="translate(122.546875, 298)"><rect class="basic label-container" style="fill:#1a1a2e !important;stroke:#e94560 !important" x="-79.546875" y="-39" width="159.09375" height="78"/><g class="label" style="color:#fff !important" transform="translate(-49.546875, -24)"><rect/><foreignObject width="99.09375" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>Memory block<br />Full content</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SUSR-4" data-look="classic" transform="translate(325.5, 298)"><rect class="basic label-container" style="fill:#1a1a2e !important;stroke:#e94560 !important" x="-73.40625" y="-39" width="146.8125" height="78"/><g class="label" style="color:#fff !important" transform="translate(-43.40625, -24)"><rect/><foreignObject width="86.8125" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>User block<br />Full content</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SSKL-5" data-look="classic" transform="translate(572.078125, 298)"><rect class="basic label-container" style="fill:#16213e !important;stroke:#0f3460 !important" x="-123.171875" y="-39" width="246.34375" height="78"/><g class="label" style="color:#fff !important" transform="translate(-93.171875, -24)"><rect/><foreignObject width="186.34375" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>Skill index<br />Names + descriptions only</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-FULL-6" data-look="classic" transform="translate(572.078125, 500)"><rect class="basic label-container" style="fill:#0a1128 !important;stroke:#1282a2 !important" x="-106.078125" y="-39" width="212.15625" height="78"/><g class="label" style="color:#fff !important" transform="translate(-76.078125, -24)"><rect/><foreignObject width="152.15625" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>Full skill content<br />Loaded when needed</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg>
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1406.55px; background-color: white;" viewBox="0 0 1406.546875 695.015625" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-subGraph0" data-look="classic"><rect style="" x="477.59375" y="8" width="310" height="356"/><g class="cluster-label" transform="translate(572.46875, 8)"><foreignObject width="120.25" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Blocked Patterns</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M178.984,302L183.151,302C187.318,302,195.651,302,203.318,302C210.984,302,217.984,302,221.484,302L224.984,302" id="my-svg-L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MTc4Ljk4NDM3NSwieSI6MzAyfSx7IngiOjIwMy45ODQzNzUsInkiOjMwMn0seyJ4IjoyMjguOTg0Mzc1LCJ5IjozMDJ9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M335.985,337.609L350.753,352.34C365.521,367.072,395.058,396.536,418.659,411.268C442.26,426,459.927,426,479.507,426C499.086,426,520.578,426,531.324,426L542.07,426" id="my-svg-L_B_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_C_0" data-points="W3sieCI6MzM1Ljk4NTE1NDIwOTc5NzcsInkiOjMzNy42MDg1OTU3OTAyMDIzfSx7IngiOjQyNC41OTM3NSwieSI6NDI2fSx7IngiOjQ3Ny41OTM3NSwieSI6NDI2fSx7IngiOjU0Ni4wNzAzMTI1LCJ5Ijo0MjZ9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M322.452,351.142L339.476,388.888C356.499,426.633,390.547,502.125,416.403,539.871C442.26,577.617,459.927,577.617,481.491,577.617C503.055,577.617,528.516,577.617,541.246,577.617L553.977,577.617" id="my-svg-L_B_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_D_0" data-points="W3sieCI6MzIyLjQ1MjE1ODQ3MjExMzcsInkiOjM1MS4xNDE1OTE1Mjc4ODYzfSx7IngiOjQyNC41OTM3NSwieSI6NTc3LjYxNzE4NzV9LHsieCI6NDc3LjU5Mzc1LCJ5Ijo1NzcuNjE3MTg3NX0seyJ4Ijo1NTcuOTc2NTYyNSwieSI6NTc3LjYxNzE4NzV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M681.312,551.718L699.026,542.302C716.739,532.885,752.167,514.052,781.101,504.635C810.036,495.219,832.479,495.219,854.297,495.219C876.115,495.219,897.307,495.219,907.904,495.219L918.5,495.219" id="my-svg-L_D_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_E_0" data-points="W3sieCI6NjgxLjMxMjExNjQwNjY4NzEsInkiOjU1MS43MTgzNjY0MDY2ODcxfSx7IngiOjc4Ny41OTM3NSwieSI6NDk1LjIxODc1fSx7IngiOjg1NC45MjE4NzUsInkiOjQ5NS4yMTg3NX0seyJ4Ijo5MjIuNSwieSI6NDk1LjIxODc1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1070.172,467.297L1080.922,462.284C1091.672,457.271,1113.172,447.245,1132.426,442.232C1151.68,437.219,1168.688,437.219,1177.191,437.219L1185.695,437.219" id="my-svg-L_E_G_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_G_0" data-points="W3sieCI6MTA3MC4xNzIwNTcwNTk2Mjk5LCJ5Ijo0NjcuMjk3MDU3MDU5NjI5OX0seyJ4IjoxMTM0LjY3MTg3NSwieSI6NDM3LjIxODc1fSx7IngiOjExODkuNjk1MzEyNSwieSI6NDM3LjIxODc1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1070.172,523.14L1080.922,528.153C1091.672,533.167,1113.172,543.193,1129.31,548.206C1145.448,553.219,1156.224,553.219,1161.612,553.219L1167,553.219" id="my-svg-L_E_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_F_0" data-points="W3sieCI6MTA3MC4xNzIwNTcwNTk2Mjk5LCJ5Ijo1MjMuMTQwNDQyOTQwMzcwMX0seyJ4IjoxMTM0LjY3MTg3NSwieSI6NTUzLjIxODc1fSx7IngiOjExNzEsInkiOjU1My4yMTg3NX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M681.312,603.516L699.026,612.933C716.739,622.349,752.167,641.182,781.101,650.599C810.036,660.016,832.479,660.016,854.255,660.016C876.031,660.016,897.141,660.016,907.695,660.016L918.25,660.016" id="my-svg-L_D_H_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_H_0" data-points="W3sieCI6NjgxLjMxMjExNjQwNjY4NzEsInkiOjYwMy41MTYwMDg1OTMzMTI5fSx7IngiOjc4Ny41OTM3NSwieSI6NjYwLjAxNTYyNX0seyJ4Ijo4NTQuOTIxODc1LCJ5Ijo2NjAuMDE1NjI1fSx7IngiOjkyMi4yNSwieSI6NjYwLjAxNTYyNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M326.032,256.439L342.459,227.365C358.886,198.292,391.74,140.146,417,111.073C442.26,82,459.927,82,472.927,82C485.927,82,494.26,82,498.427,82L502.594,82" id="my-svg-L_B_P1_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_P1_0" data-points="W3sieCI6MzI2LjAzMjI2OTY2MTQ1NTM2LCJ5IjoyNTYuNDM4NTE5NjYxNDU1MzZ9LHsieCI6NDI0LjU5Mzc1LCJ5Ijo4Mn0seyJ4Ijo0NzcuNTkzNzUsInkiOjgyfSx7IngiOjUwMi41OTM3NSwieSI6ODJ9XQ==" data-look="classic"/><path d="M339.112,269.518L353.359,257.599C367.606,245.679,396.1,221.839,419.18,209.92C442.26,198,459.927,198,479.945,198C499.964,198,522.333,198,533.518,198L544.703,198" id="my-svg-L_B_P2_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_P2_0" data-points="W3sieCI6MzM5LjExMjIxMTQ4NTgxNiwieSI6MjY5LjUxODQ2MTQ4NTgxNn0seyJ4Ijo0MjQuNTkzNzUsInkiOjE5OH0seyJ4Ijo0NzcuNTkzNzUsInkiOjE5OH0seyJ4Ijo1NDQuNzAzMTI1LCJ5IjoxOTh9XQ==" data-look="classic"/><path d="M371.594,302L380.427,302C389.26,302,406.927,302,424.594,302C442.26,302,459.927,302,479.488,302C499.049,302,520.505,302,531.233,302L541.961,302" id="my-svg-L_B_P3_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_P3_0" data-points="W3sieCI6MzcxLjU5Mzc1LCJ5IjozMDJ9LHsieCI6NDI0LjU5Mzc1LCJ5IjozMDJ9LHsieCI6NDc3LjU5Mzc1LCJ5IjozMDJ9LHsieCI6NTQxLjk2MDkzNzUsInkiOjMwMn1d" data-look="classic"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_A_B_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(424.59375, 426)"><g class="label" data-id="L_B_C_0" transform="translate(-28, -12)"><foreignObject width="56" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Blocked</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(424.59375, 577.6171875)"><g class="label" data-id="L_B_D_0" transform="translate(-15.375, -12)"><foreignObject width="30.75" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Safe</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(854.921875, 495.21875)"><g class="label" data-id="L_D_E_0" transform="translate(-28.6796875, -12)"><foreignObject width="57.359375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Exceeds</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1134.671875, 437.21875)"><g class="label" data-id="L_E_G_0" transform="translate(-11.328125, -12)"><foreignObject width="22.65625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Yes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1134.671875, 553.21875)"><g class="label" data-id="L_E_F_0" transform="translate(-9.3984375, -12)"><foreignObject width="18.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>No</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(854.921875, 660.015625)"><g class="label" data-id="L_D_H_0" transform="translate(-42.328125, -12)"><foreignObject width="84.65625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Within limit</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_P1_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_P2_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_P3_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-A-0" data-look="classic" transform="translate(93.4921875, 302)"><rect class="basic label-container" style="" x="-85.4921875" y="-39" width="170.984375" height="78"/><g class="label" style="" transform="translate(-55.4921875, -24)"><rect/><foreignObject width="110.984375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>LLM calls<br />memory or skill</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-B-1" data-look="classic" transform="translate(300.2890625, 302)"><polygon points="71.3046875,0 142.609375,-71.3046875 71.3046875,-142.609375 0,-71.3046875" class="label-container" transform="translate(-70.8046875, 71.3046875)"/><g class="label" style="" transform="translate(-44.3046875, -12)"><rect/><foreignObject width="88.609375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>scanContent</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-C-3" data-look="classic" transform="translate(632.59375, 426)"><rect class="basic label-container" style="fill:#3d0000 !important;stroke:#ff4444 !important" x="-86.5234375" y="-27" width="173.046875" height="54"/><g class="label" style="color:#fff !important" transform="translate(-56.5234375, -12)"><rect/><foreignObject width="113.046875" height="24"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>❌ Return error</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-D-5" data-look="classic" transform="translate(632.59375, 577.6171875)"><polygon points="74.6171875,0 149.234375,-74.6171875 74.6171875,-149.234375 0,-74.6171875" class="label-container" transform="translate(-74.1171875, 74.6171875)"/><g class="label" style="" transform="translate(-35.6171875, -24)"><rect/><foreignObject width="71.234375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Char limit<br />check</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-E-7" data-look="classic" transform="translate(1010.296875, 495.21875)"><polygon points="87.796875,0 175.59375,-87.796875 87.796875,-175.59375 0,-87.796875" class="label-container" transform="translate(-87.296875, 87.796875)"/><g class="label" style="" transform="translate(-60.796875, -12)"><rect/><foreignObject width="121.59375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>autoConsolidate?</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-G-9" data-look="classic" transform="translate(1284.7734375, 437.21875)"><rect class="basic label-container" style="fill:#003d3d !important;stroke:#00cccc !important" x="-95.078125" y="-39" width="190.15625" height="78"/><g class="label" style="color:#fff !important" transform="translate(-65.078125, -24)"><rect/><foreignObject width="130.15625" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>🔄 Merge &amp; prune<br />then retry</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-F-11" data-look="classic" transform="translate(1284.7734375, 553.21875)"><rect class="basic label-container" style="" x="-113.7734375" y="-27" width="227.546875" height="54"/><g class="label" style="" transform="translate(-83.7734375, -12)"><rect/><foreignObject width="167.546875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>❌ Return budget error</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-H-13" data-look="classic" transform="translate(1010.296875, 660.015625)"><rect class="basic label-container" style="fill:#003d00 !important;stroke:#44ff44 !important" x="-88.046875" y="-27" width="176.09375" height="54"/><g class="label" style="color:#fff !important" transform="translate(-58.046875, -12)"><rect/><foreignObject width="116.09375" height="24"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>✅ Write to disk</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-P1-14" data-look="classic" transform="translate(632.59375, 82)"><rect class="basic label-container" style="" x="-130" y="-39" width="260" height="78"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>'ignore previous instructions'</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-P2-15" data-look="classic" transform="translate(632.59375, 198)"><rect class="basic label-container" style="" x="-87.890625" y="-27" width="175.78125" height="54"/><g class="label" style="" transform="translate(-57.890625, -12)"><rect/><foreignObject width="115.78125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>'curl ${API_KEY}'</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-P3-16" data-look="classic" transform="translate(632.59375, 302)"><rect class="basic label-container" style="" x="-90.6328125" y="-27" width="181.265625" height="54"/><g class="label" style="" transform="translate(-60.6328125, -12)"><rect/><foreignObject width="121.265625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Zero-width chars</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg>
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 1396.5px; background-color: white;" viewBox="-50 -10 1396.5 1799" role="graphics-document document" aria-roledescription="sequence"><g><rect x="1145.5" y="1713" fill="#eaeaea" stroke="#666" width="151" height="65" name="Disk" rx="3" ry="3" class="actor actor-bottom"/><text x="1221" y="1745.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1221" dy="0">~/.pi/agent/memory/</tspan></text></g><g><rect x="686" y="1713" fill="#eaeaea" stroke="#666" width="150" height="65" name="Extension" rx="3" ry="3" class="actor actor-bottom"/><text x="761" y="1745.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="761" dy="0">Extension</tspan></text></g><g><rect x="286" y="1713" fill="#eaeaea" stroke="#666" width="150" height="65" name="Pi" rx="3" ry="3" class="actor actor-bottom"/><text x="361" y="1745.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="361" dy="0">Pi</tspan></text></g><g><rect x="0" y="1713" fill="#eaeaea" stroke="#666" width="150" height="65" name="User" rx="3" ry="3" class="actor actor-bottom"/><text x="75" y="1745.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">User</tspan></text></g><g><line id="actor3" x1="1221" y1="65" x2="1221" y2="1713" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Disk" data-et="life-line" data-id="Disk"/><g id="root-3" data-et="participant" data-type="participant" data-id="Disk"><rect x="1145.5" y="0" fill="#eaeaea" stroke="#666" width="151" height="65" name="Disk" rx="3" ry="3" class="actor actor-top"/><text x="1221" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1221" dy="0">~/.pi/agent/memory/</tspan></text></g></g><g><line id="actor2" x1="761" y1="65" x2="761" y2="1713" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Extension" data-et="life-line" data-id="Extension"/><g id="root-2" data-et="participant" data-type="participant" data-id="Extension"><rect x="686" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Extension" rx="3" ry="3" class="actor actor-top"/><text x="761" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="761" dy="0">Extension</tspan></text></g></g><g><line id="actor1" x1="361" y1="65" x2="361" y2="1713" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Pi" data-et="life-line" data-id="Pi"/><g id="root-1" data-et="participant" data-type="participant" data-id="Pi"><rect x="286" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Pi" rx="3" ry="3" class="actor actor-top"/><text x="361" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="361" dy="0">Pi</tspan></text></g></g><g><line id="actor0" x1="75" y1="65" x2="75" y2="1713" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="User" data-et="life-line" data-id="User"/><g id="root-0" data-et="participant" data-type="participant" data-id="User"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="User" rx="3" ry="3" class="actor actor-top"/><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">User</tspan></text></g></g><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#my-svg rect.actor.outer-path[data-look="neo"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg rect.note[data-look="neo"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg text.actor&gt;tspan{fill:black;stroke:none;}#my-svg .actor-line{stroke:#9370DB;}#my-svg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#my-svg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#my-svg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#my-svg [id$="-arrowhead"] path{fill:#333;stroke:#333;}#my-svg .sequenceNumber{fill:white;}#my-svg [id$="-sequencenumber"]{fill:#333;}#my-svg [id$="-crosshead"] path{fill:#333;stroke:#333;}#my-svg .messageText{fill:#333;stroke:none;}#my-svg .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#my-svg .labelText,#my-svg .labelText&gt;tspan{fill:black;stroke:none;}#my-svg .loopText,#my-svg .loopText&gt;tspan{fill:black;stroke:none;}#my-svg .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#my-svg .note{stroke:#aaaa33;fill:#fff5ad;}#my-svg .noteText,#my-svg .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#my-svg .activation0{fill:#f4f4f4;stroke:#666;}#my-svg .activation1{fill:#f4f4f4;stroke:#666;}#my-svg .activation2{fill:#f4f4f4;stroke:#666;}#my-svg .actorPopupMenu{position:absolute;}#my-svg .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#my-svg .actor-man circle,#my-svg line{fill:#ECECFF;stroke-width:2px;}#my-svg g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g/><defs><symbol id="my-svg-computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"/></symbol></defs><defs><symbol id="my-svg-database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"/></symbol></defs><defs><symbol id="my-svg-clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"/></symbol></defs><defs><marker id="my-svg-arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"/></marker></defs><defs><marker id="my-svg-crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"/></marker></defs><defs><marker id="my-svg-filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"/></marker></defs><defs><marker id="my-svg-sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"/></marker></defs><defs><marker id="my-svg-solidTopArrowHead" refX="7.9" refY="7.25" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 8 L 0 8 z"/></marker></defs><defs><marker id="my-svg-solidBottomArrowHead" refX="7.9" refY="0.75" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 0 L 0 8 z"/></marker></defs><defs><marker id="my-svg-stickTopArrowHead" refX="7.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 7 7" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><defs><marker id="my-svg-stickBottomArrowHead" refX="7.5" refY="0" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 7 L 7 0" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><g data-et="note" data-id="i0"><rect x="336" y="75" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── Session Start ──</tspan></text></g><g data-et="note" data-id="i4"><rect x="336" y="286" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="291" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── System Prompt Injection ──</tspan></text></g><g data-et="note" data-id="i7"><rect x="386" y="423" fill="#EDF2AE" stroke="#666" width="179" height="77" class="note"/><text x="476" y="428" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="476">Agent now "remembers"</tspan></text><text x="476" y="447" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="476">facts AND procedures</tspan></text><text x="476" y="466" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="476">from past sessions</tspan></text></g><g data-et="note" data-id="i8"><rect x="336" y="510" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="515" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── Agent Loop ──</tspan></text></g><g data-et="note" data-id="i14"><rect x="336" y="809" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="814" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── User Correction ──</tspan></text></g><g data-et="note" data-id="i18"><rect x="386" y="1020" fill="#EDF2AE" stroke="#666" width="154" height="58" class="note"/><text x="463" y="1025" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="463">Immediate save</tspan></text><text x="463" y="1044" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="463">no waiting for nudge</tspan></text></g><g data-et="note" data-id="i19"><rect x="336" y="1088" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="1093" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── Complex Task (8+ tool calls) ──</tspan></text></g><g data-et="note" data-id="i22"><rect x="386" y="1225" fill="#EDF2AE" stroke="#666" width="150" height="58" class="note"/><text x="461" y="1230" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="461">Extract reusable</tspan></text><text x="461" y="1249" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="461">procedure as skill</tspan></text></g><g data-et="note" data-id="i23"><rect x="336" y="1293" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="1298" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── Background Review (10 turns or 15 tool calls) ──</tspan></text></g><g data-et="note" data-id="i26"><rect x="386" y="1430" fill="#EDF2AE" stroke="#666" width="197" height="58" class="note"/><text x="485" y="1435" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="485">Reviews conversation</tspan></text><text x="485" y="1454" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="485">saves memories AND skills</tspan></text></g><g data-et="note" data-id="i27"><rect x="336" y="1498" fill="#EDF2AE" stroke="#666" width="910" height="39" class="note"/><text x="791" y="1503" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="791">── Session End ──</tspan></text></g><g data-et="note" data-id="i30"><rect x="386" y="1635" fill="#EDF2AE" stroke="#666" width="163" height="58" class="note"/><text x="468" y="1640" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="468">One last turn to flush</tspan></text><text x="468" y="1659" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="468">anything worth saving</tspan></text></g><text x="560" y="129" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">session_start event</text><line x1="362" y1="158" x2="757" y2="158" class="messageLine0" data-et="message" data-id="i1" data-from="Pi" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="990" y="173" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">loadFromDisk() — read MEMORY.md + USER.md + skills/</text><line x1="762" y1="202" x2="1217" y2="202" class="messageLine0" data-et="message" data-id="i2" data-from="Extension" data-to="Disk" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="762" y="217" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Capture frozen snapshot (memory + skill index)</text><path d="M 762,246 C 822,236 822,276 762,266" class="messageLine1" data-et="message" data-id="i3" data-from="Extension" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="560" y="340" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">before_agent_start event</text><line x1="362" y1="369" x2="757" y2="369" class="messageLine0" data-et="message" data-id="i5" data-from="Pi" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="563" y="384" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">systemPrompt + frozen memory block + skill index</text><line x1="760" y1="413" x2="365" y2="413" class="messageLine1" data-et="message" data-id="i6" data-from="Extension" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="217" y="564" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">"Remember I prefer vim"</text><line x1="76" y1="593" x2="357" y2="593" class="messageLine0" data-et="message" data-id="i9" data-from="User" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="560" y="608" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">tool_call (memory, add)</text><line x1="362" y1="637" x2="757" y2="637" class="messageLine0" data-et="message" data-id="i10" data-from="Pi" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="762" y="652" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">scanContent() — security check</text><path d="M 762,681 C 822,671 822,711 762,701" class="messageLine0" data-et="message" data-id="i11" data-from="Extension" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="990" y="726" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Atomic write to USER.md</text><line x1="762" y1="755" x2="1217" y2="755" class="messageLine0" data-et="message" data-id="i12" data-from="Extension" data-to="Disk" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="563" y="770" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">{ success: true, usage: "3% — 41/1375" }</text><line x1="760" y1="799" x2="365" y2="799" class="messageLine1" data-et="message" data-id="i13" data-from="Extension" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="217" y="863" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">"No, don't use npm — use pnpm"</text><line x1="76" y1="892" x2="357" y2="892" class="messageLine0" data-et="message" data-id="i15" data-from="User" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="762" y="907" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">isCorrection() = true</text><path d="M 762,936 C 822,926 822,966 762,956" class="messageLine0" data-et="message" data-id="i16" data-from="Extension" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="563" y="981" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">pi.exec("pi -p", correctionPrompt)</text><line x1="760" y1="1010" x2="365" y2="1010" class="messageLine0" data-et="message" data-id="i17" data-from="Extension" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="560" y="1142" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">turn_end (8 tool calls, 3 tool types)</text><line x1="362" y1="1171" x2="757" y2="1171" class="messageLine0" data-et="message" data-id="i20" data-from="Pi" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="563" y="1186" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">pi.exec("pi -p", skillExtractionPrompt)</text><line x1="760" y1="1215" x2="365" y2="1215" class="messageLine0" data-et="message" data-id="i21" data-from="Extension" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="560" y="1347" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">turn_end event</text><line x1="362" y1="1376" x2="757" y2="1376" class="messageLine0" data-et="message" data-id="i24" data-from="Pi" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="563" y="1391" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">pi.exec("pi -p", reviewPrompt)</text><line x1="760" y1="1420" x2="365" y2="1420" class="messageLine0" data-et="message" data-id="i25" data-from="Extension" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="560" y="1552" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">session_shutdown event</text><line x1="362" y1="1581" x2="757" y2="1581" class="messageLine0" data-et="message" data-id="i28" data-from="Pi" data-to="Extension" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="563" y="1596" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">pi.exec("pi -p", flushPrompt)</text><line x1="760" y1="1625" x2="365" y2="1625" class="messageLine0" data-et="message" data-id="i29" data-from="Extension" data-to="Pi" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/></svg>
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 2328.02px; background-color: white;" viewBox="0 0 2328.0234375 628" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g class="root" transform="translate(0, 0)"><g class="clusters"><g class="cluster" id="my-svg-pi-hermes-memory/src/" data-look="classic"><rect style="" x="8" y="8" width="2312.0234375" height="612"/><g class="cluster-label" transform="translate(1077.62109375, 8)"><foreignObject width="172.78125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>pi-hermes-memory/src/</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M1028.68,89.754L869.036,101.629C709.393,113.503,390.107,137.251,230.464,161.876C70.82,186.5,70.82,212,70.82,237.5C70.82,263,70.82,288.5,139.244,311.637C207.667,334.774,344.515,355.547,412.938,365.934L481.362,376.321" id="my-svg-L_IDX_MS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_MS_0" data-points="W3sieCI6MTAyOC42Nzk2ODc1LCJ5Ijo4OS43NTQyNjEzNjM2MzYzNn0seyJ4Ijo3MC44MjAzMTI1LCJ5IjoxNjF9LHsieCI6NzAuODIwMzEyNSwieSI6MjM3LjV9LHsieCI6NzAuODIwMzEyNSwieSI6MzE0fSx7IngiOjQ4NS4zMTY0MDYyNSwieSI6Mzc2LjkyMDkyNTM0NzQ1MX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1102.292,123.5L1102.768,129.75C1103.244,136,1104.196,148.5,1104.672,167.5C1105.148,186.5,1105.148,212,1105.148,237.5C1105.148,263,1105.148,288.5,1184.468,312.191C1263.789,335.882,1422.429,357.763,1501.749,368.704L1581.069,379.645" id="my-svg-L_IDX_SS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_SS_0" data-points="W3sieCI6MTEwMi4yOTE1MTM0ODAzOTIzLCJ5IjoxMjMuNX0seyJ4IjoxMTA1LjE0ODQzNzUsInkiOjE2MX0seyJ4IjoxMTA1LjE0ODQzNzUsInkiOjIzNy41fSx7IngiOjExMDUuMTQ4NDM3NSwieSI6MzE0fSx7IngiOjE1ODUuMDMxMjUsInkiOjM4MC4xOTE2NjUxNDA2NTE2NX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1028.68,90.495L890.223,102.246C751.766,113.997,474.852,137.498,336.395,154.833C197.938,172.167,197.938,183.333,197.938,188.917L197.938,194.5" id="my-svg-L_IDX_MT_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_MT_0" data-points="W3sieCI6MTAyOC42Nzk2ODc1LCJ5Ijo5MC40OTUyNDE2ODU5NTEyN30seyJ4IjoxOTcuOTM3NSwieSI6MTYxfSx7IngiOjE5Ny45Mzc1LCJ5IjoxOTguNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1169.961,89.383L1342.641,101.319C1515.32,113.255,1860.68,137.128,2033.359,154.647C2206.039,172.167,2206.039,183.333,2206.039,188.917L2206.039,194.5" id="my-svg-L_IDX_ST_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_ST_0" data-points="W3sieCI6MTE2OS45NjA5Mzc1LCJ5Ijo4OS4zODI5MDk3ODM5ODk4M30seyJ4IjoyMjA2LjAzOTA2MjUsInkiOjE2MX0seyJ4IjoyMjA2LjAzOTA2MjUsInkiOjE5OC41fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1028.68,92.781L931.693,104.151C834.706,115.521,640.732,138.26,543.745,155.214C446.758,172.167,446.758,183.333,446.758,188.917L446.758,194.5" id="my-svg-L_IDX_BR_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_BR_0" data-points="W3sieCI6MTAyOC42Nzk2ODc1LCJ5Ijo5Mi43ODEyMTEwOTA4OTE2N30seyJ4Ijo0NDYuNzU3ODEyNSwieSI6MTYxfSx7IngiOjQ0Ni43NTc4MTI1LCJ5IjoxOTguNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1028.68,98.128L974.363,108.607C920.047,119.085,811.414,140.043,757.098,156.105C702.781,172.167,702.781,183.333,702.781,188.917L702.781,194.5" id="my-svg-L_IDX_AC_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_AC_0" data-points="W3sieCI6MTAyOC42Nzk2ODc1LCJ5Ijo5OC4xMjc5MzMwOTI5NzI0fSx7IngiOjcwMi43ODEyNSwieSI6MTYxfSx7IngiOjcwMi43ODEyNSwieSI6MTk4LjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1028.868,123.5L1017.577,129.75C1006.287,136,983.706,148.5,972.415,160.333C961.125,172.167,961.125,183.333,961.125,188.917L961.125,194.5" id="my-svg-L_IDX_CD_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_CD_0" data-points="W3sieCI6MTAyOC44Njc4MDAyNDUwOTgxLCJ5IjoxMjMuNX0seyJ4Ijo5NjEuMTI1LCJ5IjoxNjF9LHsieCI6OTYxLjEyNSwieSI6MTk4LjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1169.961,90.647L1304.72,102.372C1439.479,114.098,1708.997,137.549,1843.757,154.858C1978.516,172.167,1978.516,183.333,1978.516,188.917L1978.516,194.5" id="my-svg-L_IDX_SA_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_SA_0" data-points="W3sieCI6MTE2OS45NjA5Mzc1LCJ5Ijo5MC42NDY1Mzg0NzE3OTE1fSx7IngiOjE5NzguNTE1NjI1LCJ5IjoxNjF9LHsieCI6MTk3OC41MTU2MjUsInkiOjE5OC41fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1169.961,121.135L1182.772,127.78C1195.583,134.424,1221.206,147.712,1234.017,159.939C1246.828,172.167,1246.828,183.333,1246.828,188.917L1246.828,194.5" id="my-svg-L_IDX_SF_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_SF_0" data-points="W3sieCI6MTE2OS45NjA5Mzc1LCJ5IjoxMjEuMTM1NDAwNjY3MzM3NTR9LHsieCI6MTI0Ni44MjgxMjUsInkiOjE2MX0seyJ4IjoxMjQ2LjgyODEyNSwieSI6MTk4LjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1169.961,98.076L1224.53,108.563C1279.099,119.051,1388.237,140.025,1442.806,156.096C1497.375,172.167,1497.375,183.333,1497.375,188.917L1497.375,194.5" id="my-svg-L_IDX_IN_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_IN_0" data-points="W3sieCI6MTE2OS45NjA5Mzc1LCJ5Ijo5OC4wNzYwNDM2NDk3ODExNn0seyJ4IjoxNDk3LjM3NSwieSI6MTYxfSx7IngiOjE0OTcuMzc1LCJ5IjoxOTguNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1169.961,92.993L1264.236,104.328C1358.51,115.662,1547.06,138.331,1641.335,155.249C1735.609,172.167,1735.609,183.333,1735.609,188.917L1735.609,194.5" id="my-svg-L_IDX_SC_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_IDX_SC_0" data-points="W3sieCI6MTE2OS45NjA5Mzc1LCJ5Ijo5Mi45OTMwMDc1NTExMDgxMX0seyJ4IjoxNzM1LjYwOTM3NSwieSI6MTYxfSx7IngiOjE3MzUuNjA5Mzc1LCJ5IjoxOTguNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M197.938,276.5L197.938,282.75C197.938,289,197.938,301.5,245.181,317.341C292.424,333.181,386.91,352.363,434.153,361.954L481.396,371.544" id="my-svg-L_MT_MS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MT_MS_0" data-points="W3sieCI6MTk3LjkzNzUsInkiOjI3Ni41fSx7IngiOjE5Ny45Mzc1LCJ5IjozMTR9LHsieCI6NDg1LjMxNjQwNjI1LCJ5IjozNzIuMzQwMjgwMjk3Mjk3NTd9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2139.974,276.5L2129.386,282.75C2118.799,289,2097.624,301.5,2030.701,318.093C1963.778,334.686,1851.106,355.371,1794.77,365.714L1738.434,376.057" id="my-svg-L_ST_SS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_ST_SS_0" data-points="W3sieCI6MjEzOS45NzM2NTE5NjA3ODQsInkiOjI3Ni41fSx7IngiOjIwNzYuNDQ5MjE4NzUsInkiOjMxNH0seyJ4IjoxNzM0LjUsInkiOjM3Ni43NzkzMjYxNTIzNzUwNn1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M574.77,429.5L574.77,435.75C574.77,442,574.77,454.5,593.25,467.444C611.731,480.389,648.692,493.778,667.173,500.472L685.653,507.167" id="my-svg-L_MS_CS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MS_CS_0" data-points="W3sieCI6NTc0Ljc2OTUzMTI1LCJ5Ijo0MjkuNX0seyJ4Ijo1NzQuNzY5NTMxMjUsInkiOjQ2N30seyJ4Ijo2ODkuNDE0MDYyNSwieSI6NTA4LjUyOTI5OTE1MDk5MDV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1659.766,429.5L1659.766,435.75C1659.766,442,1659.766,454.5,1530.884,472.033C1402.003,489.566,1144.24,512.133,1015.358,523.416L886.477,534.699" id="my-svg-L_SS_CS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SS_CS_0" data-points="W3sieCI6MTY1OS43NjU2MjUsInkiOjQyOS41fSx7IngiOjE2NTkuNzY1NjI1LCJ5Ijo0Njd9LHsieCI6ODgyLjQ5MjE4NzUsInkiOjUzNS4wNDgyNTc0NTY1NDgyfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M446.758,276.5L446.758,282.75C446.758,289,446.758,301.5,456.644,313.658C466.53,325.816,486.303,337.632,496.189,343.54L506.075,349.448" id="my-svg-L_BR_MS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_BR_MS_0" data-points="W3sieCI6NDQ2Ljc1NzgxMjUsInkiOjI3Ni41fSx7IngiOjQ0Ni43NTc4MTI1LCJ5IjozMTR9LHsieCI6NTA5LjUwODY1NTAyNDUwOTg0LCJ5IjozNTEuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M702.781,276.5L702.781,282.75C702.781,289,702.781,301.5,692.895,313.658C683.009,325.816,663.236,337.632,653.35,343.54L643.464,349.448" id="my-svg-L_AC_MS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_AC_MS_0" data-points="W3sieCI6NzAyLjc4MTI1LCJ5IjoyNzYuNX0seyJ4Ijo3MDIuNzgxMjUsInkiOjMxNH0seyJ4Ijo2NDAuMDMwNDA3NDc1NDkwMiwieSI6MzUxLjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M961.125,276.5L961.125,282.75C961.125,289,961.125,301.5,912.295,317.418C863.465,333.337,765.806,352.674,716.976,362.342L668.146,372.011" id="my-svg-L_CD_MS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CD_MS_0" data-points="W3sieCI6OTYxLjEyNSwieSI6Mjc2LjV9LHsieCI6OTYxLjEyNSwieSI6MzE0fSx7IngiOjY2NC4yMjI2NTYyNSwieSI6MzcyLjc4NzkwNjgyMTU1OTY2fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1879.977,245.474L1738.837,256.895C1597.697,268.316,1315.417,291.158,1113.449,312.731C911.481,334.304,789.824,354.608,728.996,364.76L668.168,374.912" id="my-svg-L_SA_MS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SA_MS_0" data-points="W3sieCI6MTg3OS45NzY1NjI1LCJ5IjoyNDUuNDczNzc0NTY5NTU1MDJ9LHsieCI6MTAzMy4xMzY3MTg3NSwieSI6MzE0fSx7IngiOjY2NC4yMjI2NTYyNSwieSI6Mzc1LjU3MDU2Mjk2OTc4MDY3fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2038.639,276.5L2048.274,282.75C2057.909,289,2077.179,301.5,2027.146,318.203C1977.113,334.906,1857.776,355.812,1798.108,366.265L1738.44,376.718" id="my-svg-L_SA_SS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SA_SS_0" data-points="W3sieCI6MjAzOC42Mzg2MzM1Nzg0MzE0LCJ5IjoyNzYuNX0seyJ4IjoyMDk2LjQ0OTIxODc1LCJ5IjozMTR9LHsieCI6MTczNC41LCJ5IjozNzcuNDA3NzI5NjAyNTYxOX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_IDX_MS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_SS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_MT_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_ST_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_BR_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_AC_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_CD_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_SA_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_SF_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_IN_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_IDX_SC_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_MT_MS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_ST_SS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_MS_CS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_SS_CS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_BR_MS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_AC_MS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_CD_MS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_SA_MS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_SA_SS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-IDX-0" data-look="classic" transform="translate(1099.3203125, 84.5)"><rect class="basic label-container" style="fill:#e94560 !important;stroke:#fff !important" x="-70.640625" y="-39" width="141.28125" height="78"/><g class="label" style="color:#fff !important" transform="translate(-40.640625, -24)"><rect/><foreignObject width="81.28125" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>index.ts<br /><i>Entry point</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-MS-1" data-look="classic" transform="translate(574.76953125, 390.5)"><rect class="basic label-container" style="fill:#0f3460 !important;stroke:#fff !important" x="-89.453125" y="-39" width="178.90625" height="78"/><g class="label" style="color:#fff !important" transform="translate(-59.453125, -24)"><rect/><foreignObject width="118.90625" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>memory-store.ts<br /><i>Memory CRUD</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SS-2" data-look="classic" transform="translate(1659.765625, 390.5)"><rect class="basic label-container" style="fill:#0f3460 !important;stroke:#fff !important" x="-74.734375" y="-39" width="149.46875" height="78"/><g class="label" style="color:#fff !important" transform="translate(-44.734375, -24)"><rect/><foreignObject width="89.46875" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>skill-store.ts<br /><i>Skill CRUD</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-MT-3" data-look="classic" transform="translate(197.9375, 237.5)"><rect class="basic label-container" style="" x="-92.1171875" y="-39" width="184.234375" height="78"/><g class="label" style="" transform="translate(-62.1171875, -24)"><rect/><foreignObject width="124.234375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>memory-tool.ts<br /><i>Memory LLM tool</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-ST-4" data-look="classic" transform="translate(2206.0390625, 237.5)"><rect class="basic label-container" style="" x="-78.984375" y="-39" width="157.96875" height="78"/><g class="label" style="" transform="translate(-48.984375, -24)"><rect/><foreignObject width="97.96875" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>skill-tool.ts<br /><i>Skill LLM tool</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-BR-6" data-look="classic" transform="translate(446.7578125, 237.5)"><rect class="basic label-container" style="" x="-106.703125" y="-39" width="213.40625" height="78"/><g class="label" style="" transform="translate(-76.703125, -24)"><rect/><foreignObject width="153.40625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>background-review.ts<br /><i>Learning loop</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-AC-7" data-look="classic" transform="translate(702.78125, 237.5)"><rect class="basic label-container" style="" x="-99.3203125" y="-39" width="198.640625" height="78"/><g class="label" style="" transform="translate(-69.3203125, -24)"><rect/><foreignObject width="138.640625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>auto-consolidate.ts<br /><i>Memory merge</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-CD-8" data-look="classic" transform="translate(961.125, 237.5)"><rect class="basic label-container" style="" x="-109.0234375" y="-39" width="218.046875" height="78"/><g class="label" style="" transform="translate(-79.0234375, -24)"><rect/><foreignObject width="158.046875" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>correction-detector.ts<br /><i>Instant save</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SA-9" data-look="classic" transform="translate(1978.515625, 237.5)"><rect class="basic label-container" style="" x="-98.5390625" y="-39" width="197.078125" height="78"/><g class="label" style="" transform="translate(-68.5390625, -24)"><rect/><foreignObject width="137.078125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>skill-auto-trigger.ts<br /><i>Skill extraction</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SF-10" data-look="classic" transform="translate(1246.828125, 237.5)"><rect class="basic label-container" style="" x="-106.6796875" y="-39" width="213.359375" height="78"/><g class="label" style="" transform="translate(-76.6796875, -24)"><rect/><foreignObject width="153.359375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>session-flush.ts<br /><i>Pre-compaction flush</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-IN-11" data-look="classic" transform="translate(1497.375, 237.5)"><rect class="basic label-container" style="" x="-93.8671875" y="-39" width="187.734375" height="78"/><g class="label" style="" transform="translate(-63.8671875, -24)"><rect/><foreignObject width="127.734375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>insights.ts<br /><i>/memory-insights</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SC-12" data-look="classic" transform="translate(1735.609375, 237.5)"><rect class="basic label-container" style="" x="-94.3671875" y="-39" width="188.734375" height="78"/><g class="label" style="" transform="translate(-64.3671875, -24)"><rect/><foreignObject width="128.734375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>skills-command.ts<br /><i>/memory-skills</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-CS-5" data-look="classic" transform="translate(785.953125, 543.5)"><rect class="basic label-container" style="fill:#ff6600 !important;stroke:#fff !important" x="-96.5390625" y="-39" width="193.078125" height="78"/><g class="label" style="color:#fff !important" transform="translate(-66.5390625, -24)"><rect/><foreignObject width="133.078125" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>content-scanner.ts<br /><i>Security</i></p></span></div></foreignObject></g></g></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg>
@@ -0,0 +1,26 @@
1
+ graph TB
2
+ subgraph "Persistent Storage"
3
+ MEM["MEMORY.md<br/><i>Agent's notes</i>"]
4
+ USR["USER.md<br/><i>User profile</i>"]
5
+ SKL["skills/<br/><i>Procedural memory</i><br/>debug-ts.md<br/>deploy-checklist.md"]
6
+ end
7
+
8
+ subgraph "System Prompt (frozen snapshot)"
9
+ SMEM["Memory block<br/>Full content"]
10
+ SUSR["User block<br/>Full content"]
11
+ SSKL["Skill index<br/>Names + descriptions only"]
12
+ end
13
+
14
+ subgraph "On Demand (via skill tool)"
15
+ FULL["Full skill content<br/>Loaded when needed"]
16
+ end
17
+
18
+ MEM --> SMEM
19
+ USR --> SUSR
20
+ SKL --> SSKL
21
+ SSKL -.->|"skill view"| FULL
22
+
23
+ style SMEM fill:#1a1a2e,stroke:#e94560,color:#fff
24
+ style SUSR fill:#1a1a2e,stroke:#e94560,color:#fff
25
+ style SSKL fill:#16213e,stroke:#0f3460,color:#fff
26
+ style FULL fill:#0a1128,stroke:#1282a2,color:#fff
@@ -0,0 +1,22 @@
1
+ flowchart LR
2
+ A["LLM calls<br/>memory or skill"] --> B{scanContent}
3
+ B -->|Blocked| C["❌ Return error"]
4
+ B -->|Safe| D{Char limit<br/>check}
5
+ D -->|Exceeds| E{autoConsolidate?}
6
+ E -->|Yes| G["🔄 Merge & prune<br/>then retry"]
7
+ E -->|No| F["❌ Return budget error"]
8
+ D -->|Within limit| H["✅ Write to disk"]
9
+
10
+ subgraph "Blocked Patterns"
11
+ P1["'ignore previous instructions'"]
12
+ P2["'curl ${API_KEY}'"]
13
+ P3["Zero-width chars"]
14
+ end
15
+
16
+ B -.- P1
17
+ B -.- P2
18
+ B -.- P3
19
+
20
+ style C fill:#3d0000,stroke:#ff4444,color:#fff
21
+ style G fill:#003d3d,stroke:#00cccc,color:#fff
22
+ style H fill:#003d00,stroke:#44ff44,color:#fff
@@ -0,0 +1,43 @@
1
+ sequenceDiagram
2
+ participant User
3
+ participant Pi
4
+ participant Extension
5
+ participant Disk as ~/.pi/agent/memory/
6
+
7
+ Note over Pi,Disk: ── Session Start ──
8
+ Pi->>Extension: session_start event
9
+ Extension->>Disk: loadFromDisk() — read MEMORY.md + USER.md + skills/
10
+ Extension-->>Extension: Capture frozen snapshot (memory + skill index)
11
+
12
+ Note over Pi,Disk: ── System Prompt Injection ──
13
+ Pi->>Extension: before_agent_start event
14
+ Extension-->>Pi: systemPrompt + frozen memory block + skill index
15
+ Note right of Pi: Agent now "remembers"<br/>facts AND procedures<br/>from past sessions
16
+
17
+ Note over Pi,Disk: ── Agent Loop ──
18
+ User->>Pi: "Remember I prefer vim"
19
+ Pi->>Extension: tool_call (memory, add)
20
+ Extension->>Extension: scanContent() — security check
21
+ Extension->>Disk: Atomic write to USER.md
22
+ Extension-->>Pi: { success: true, usage: "3% — 41/1375" }
23
+
24
+ Note over Pi,Disk: ── User Correction ──
25
+ User->>Pi: "No, don't use npm — use pnpm"
26
+ Extension->>Extension: isCorrection() = true
27
+ Extension->>Pi: pi.exec("pi -p", correctionPrompt)
28
+ Note right of Pi: Immediate save<br/>no waiting for nudge
29
+
30
+ Note over Pi,Disk: ── Complex Task (8+ tool calls) ──
31
+ Pi->>Extension: turn_end (8 tool calls, 3 tool types)
32
+ Extension->>Pi: pi.exec("pi -p", skillExtractionPrompt)
33
+ Note right of Pi: Extract reusable<br/>procedure as skill
34
+
35
+ Note over Pi,Disk: ── Background Review (10 turns or 15 tool calls) ──
36
+ Pi->>Extension: turn_end event
37
+ Extension->>Pi: pi.exec("pi -p", reviewPrompt)
38
+ Note right of Pi: Reviews conversation<br/>saves memories AND skills
39
+
40
+ Note over Pi,Disk: ── Session End ──
41
+ Pi->>Extension: session_shutdown event
42
+ Extension->>Pi: pi.exec("pi -p", flushPrompt)
43
+ Note right of Pi: One last turn to flush<br/>anything worth saving