pi-hermes-memory 0.6.7 → 0.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -3
- package/docs/images/memory-architecture.svg +1 -1
- package/docs/images/session-lifecycle.svg +1 -1
- package/docs/images/source-architecture.svg +1 -1
- package/docs/mermaid/memory-architecture.mmd +22 -4
- package/docs/mermaid/session-lifecycle.mmd +34 -31
- package/docs/mermaid/source-architecture.mmd +17 -1
- package/package.json +1 -1
- package/src/handlers/correction-detector.ts +28 -3
- package/src/handlers/learn-memory.ts +16 -10
- package/src/handlers/preview-context.ts +67 -0
- package/src/handlers/sync-markdown-memories.ts +136 -0
- package/src/index.ts +7 -3
- package/src/store/db.ts +54 -2
- package/src/store/sqlite-memory-store.ts +472 -46
- package/src/tools/memory-tool.ts +155 -4
- package/src/types.ts +3 -1
|
@@ -1 +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>
|
|
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: 2967.71px; background-color: white;" viewBox="0 0 2967.70703125 676" 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="2951.70703125" height="660"/><g class="cluster-label" transform="translate(1397.462890625, 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="M1337.547,96.16L1272.079,106.967C1206.611,117.774,1075.674,139.387,1010.206,164.943C944.738,190.5,944.738,220,944.738,249.5C944.738,279,944.738,308.5,1041.809,335.407C1138.88,362.315,1333.022,386.629,1430.093,398.786L1527.164,410.944" 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="W3sieCI6MTMzNy41NDY4NzUsInkiOjk2LjE2MDQwOTgwMDgzMTA2fSx7IngiOjk0NC43MzgyODEyNSwieSI6MTYxfSx7IngiOjk0NC43MzgyODEyNSwieSI6MjQ5LjV9LHsieCI6OTQ0LjczODI4MTI1LCJ5IjozMzh9LHsieCI6MTUzMS4xMzI4MTI1LCJ5Ijo0MTEuNDQwNzI5MzU3MjY1NjR9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1337.547,88.654L1132.514,100.712C927.48,112.769,517.414,136.885,312.381,163.692C107.348,190.5,107.348,220,107.348,249.5C107.348,279,107.348,308.5,158.171,333.499C208.994,358.498,310.64,378.996,361.463,389.245L412.286,399.494" id="my-svg-L_IDX_SSM_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_SSM_0" data-points="W3sieCI6MTMzNy41NDY4NzUsInkiOjg4LjY1NDI0NTMwNDI2NTU3fSx7IngiOjEwNy4zNDc2NTYyNSwieSI6MTYxfSx7IngiOjEwNy4zNDc2NTYyNSwieSI6MjQ5LjV9LHsieCI6MTA3LjM0NzY1NjI1LCJ5IjozMzh9LHsieCI6NDE2LjIwNzAzMTI1LCJ5Ijo0MDAuMjg0MzEzMDI3Mzc5Mn1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1337.547,88.591L1129.18,100.659C920.814,112.728,504.081,136.864,295.714,163.682C87.348,190.5,87.348,220,87.348,249.5C87.348,279,87.348,308.5,87.348,338C87.348,367.5,87.348,397,87.348,426.5C87.348,456,87.348,485.5,93.661,506.049C99.975,526.598,112.602,538.196,118.916,543.995L125.23,549.794" id="my-svg-L_IDX_DB_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_DB_0" data-points="W3sieCI6MTMzNy41NDY4NzUsInkiOjg4LjU5MTM0MjIxNTM4NzM0fSx7IngiOjg3LjM0NzY1NjI1LCJ5IjoxNjF9LHsieCI6ODcuMzQ3NjU2MjUsInkiOjI0OS41fSx7IngiOjg3LjM0NzY1NjI1LCJ5IjozMzh9LHsieCI6ODcuMzQ3NjU2MjUsInkiOjQyNi41fSx7IngiOjg3LjM0NzY1NjI1LCJ5Ijo1MTV9LHsieCI6MTI4LjE3NTYyODA2MzcyNTUsInkiOjU1Mi41fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,89.52L1646.467,101.433C1814.105,113.347,2149.383,137.173,2317.021,163.837C2484.66,190.5,2484.66,220,2484.66,249.5C2484.66,279,2484.66,308.5,2512.287,333.26C2539.913,358.02,2595.166,378.039,2622.792,388.049L2650.419,398.059" 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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjg5LjUyMDEwNjkwMjk3MDg1fSx7IngiOjI0ODQuNjYwMTU2MjUsInkiOjE2MX0seyJ4IjoyNDg0LjY2MDE1NjI1LCJ5IjoyNDkuNX0seyJ4IjoyNDg0LjY2MDE1NjI1LCJ5IjozMzh9LHsieCI6MjY1NC4xNzk2ODc1LCJ5IjozOTkuNDIxNjUyMzUzMzA4MDV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1337.547,93.651L1250.893,104.875C1164.238,116.1,990.93,138.55,904.275,157.358C817.621,176.167,817.621,191.333,817.621,198.917L817.621,206.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="W3sieCI6MTMzNy41NDY4NzUsInkiOjkzLjY1MDU1MDY0OTg2NjA2fSx7IngiOjgxNy42MjEwOTM3NSwieSI6MTYxfSx7IngiOjgxNy42MjEwOTM3NSwieSI6MjEwLjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1337.547,89.182L1156.943,101.151C976.34,113.121,615.133,137.061,434.529,156.614C253.926,176.167,253.926,191.333,253.926,198.917L253.926,206.5" id="my-svg-L_IDX_MST_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_MST_0" data-points="W3sieCI6MTMzNy41NDY4NzUsInkiOjg5LjE4MTc4NzI2MjU1NjIxfSx7IngiOjI1My45MjU3ODEyNSwieSI6MTYxfSx7IngiOjI1My45MjU3ODEyNSwieSI6MjEwLjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,88.259L1706.644,100.383C1934.46,112.506,2390.091,136.753,2617.907,156.46C2845.723,176.167,2845.723,191.333,2845.723,198.917L2845.723,206.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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjg4LjI1OTIxNzg0NTIxNTc0fSx7IngiOjI4NDUuNzIyNjU2MjUsInkiOjE2MX0seyJ4IjoyODQ1LjcyMjY1NjI1LCJ5IjoyMTAuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,92.376L1581.41,103.813C1683.991,115.251,1889.154,138.125,1991.735,157.146C2094.316,176.167,2094.316,191.333,2094.316,198.917L2094.316,206.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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjkyLjM3NjA4MjQxNDM2MDQ1fSx7IngiOjIwOTQuMzE2NDA2MjUsInkiOjE2MX0seyJ4IjoyMDk0LjMxNjQwNjI1LCJ5IjoyMTAuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,90.236L1624.08,102.03C1769.332,113.824,2059.836,137.412,2205.088,156.789C2350.34,176.167,2350.34,191.333,2350.34,198.917L2350.34,206.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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjkwLjIzNTgxMTAzNzcyNTI4fSx7IngiOjIzNTAuMzM5ODQzNzUsInkiOjE2MX0seyJ4IjoyMzUwLjMzOTg0Mzc1LCJ5IjoyMTAuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1337.547,101.418L1296.083,111.348C1254.618,121.279,1171.69,141.139,1130.226,158.653C1088.762,176.167,1088.762,191.333,1088.762,198.917L1088.762,206.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="W3sieCI6MTMzNy41NDY4NzUsInkiOjEwMS40MTc4ODI0MzA2MzExNH0seyJ4IjoxMDg4Ljc2MTcxODc1LCJ5IjoxNjF9LHsieCI6MTA4OC43NjE3MTg3NSwieSI6MjEwLjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,88.966L1668.723,100.972C1858.618,112.977,2238.409,136.989,2428.304,156.578C2618.199,176.167,2618.199,191.333,2618.199,198.917L2618.199,206.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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjg4Ljk2NjA3ODkwNTQ4NTh9LHsieCI6MjYxOC4xOTkyMTg3NSwieSI6MTYxfSx7IngiOjI2MTguMTk5MjE4NzUsInkiOjIxMC41fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1380.799,123.5L1376.41,129.75C1372.021,136,1363.243,148.5,1358.854,162.333C1354.465,176.167,1354.465,191.333,1354.465,198.917L1354.465,206.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="W3sieCI6MTM4MC43OTk0NzkxNjY2NjY3LCJ5IjoxMjMuNX0seyJ4IjoxMzU0LjQ2NDg0Mzc1LCJ5IjoxNjF9LHsieCI6MTM1NC40NjQ4NDM3NSwieSI6MjEwLjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,111.956L1499.859,120.13C1520.889,128.304,1562.951,144.652,1583.981,160.409C1605.012,176.167,1605.012,191.333,1605.012,198.917L1605.012,206.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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjExMS45NTYwMTA0Nzg4OTMzNn0seyJ4IjoxNjA1LjAxMTcxODc1LCJ5IjoxNjF9LHsieCI6MTYwNS4wMTE3MTg3NSwieSI6MjEwLjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1478.828,96.921L1539.564,107.601C1600.301,118.281,1721.773,139.64,1782.51,157.904C1843.246,176.167,1843.246,191.333,1843.246,198.917L1843.246,206.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="W3sieCI6MTQ3OC44MjgxMjUsInkiOjk2LjkyMTMzMzMzMzMzMzM0fSx7IngiOjE4NDMuMjQ2MDkzNzUsInkiOjE2MX0seyJ4IjoxODQzLjI0NjA5Mzc1LCJ5IjoyMTAuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1337.547,90.764L1205.54,102.47C1073.533,114.176,809.518,137.588,677.511,154.877C545.504,172.167,545.504,183.333,545.504,188.917L545.504,194.5" id="my-svg-L_IDX_SM_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_SM_0" data-points="W3sieCI6MTMzNy41NDY4NzUsInkiOjkwLjc2NDE4Mjg5NTg1MDk4fSx7IngiOjU0NS41MDM5MDYyNSwieSI6MTYxfSx7IngiOjU0NS41MDM5MDYyNSwieSI6MTk4LjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M909.738,281.898L936.324,291.249C962.909,300.599,1016.079,319.299,1118.986,340.253C1221.893,361.206,1374.536,384.412,1450.857,396.015L1527.178,407.618" 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="W3sieCI6OTA5LjczODI4MTI1LCJ5IjoyODEuODk4Mzg4NjI0MTIwOTd9LHsieCI6MTA2OS4yNSwieSI6MzM4fSx7IngiOjE1MzEuMTMyODEyNSwieSI6NDA4LjIxOTY3NjAyNTMzODJ9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M725.504,283.736L701.169,292.78C676.835,301.824,628.165,319.912,601.715,334.582C575.264,349.252,571.031,360.504,568.915,366.13L566.799,371.756" id="my-svg-L_MT_SSM_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_SSM_0" data-points="W3sieCI6NzI1LjUwMzkwNjI1LCJ5IjoyODMuNzM1Njc5MTMzODU4M30seyJ4Ijo1NzkuNDk2MDkzNzUsInkiOjMzOH0seyJ4Ijo1NjUuMzkwNTU4NzkyMzcyOSwieSI6Mzc1LjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M365.504,278.075L404.503,288.062C443.501,298.05,521.499,318.025,557.078,333.691C592.657,349.358,585.818,360.716,582.399,366.394L578.979,372.073" id="my-svg-L_MST_SSM_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_MST_SSM_0" data-points="W3sieCI6MzY1LjUwMzkwNjI1LCJ5IjoyNzguMDc0OTc3OTU3NjMzNDV9LHsieCI6NTk5LjQ5NjA5Mzc1LCJ5IjozMzh9LHsieCI6NTc2LjkxNTk4MjUyMTE4NjUsInkiOjM3NS41fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M666.395,300.5L681.21,306.75C696.025,313,725.655,325.5,726.319,337.74C726.982,349.98,698.679,361.961,684.528,367.951L670.376,373.941" id="my-svg-L_SM_SSM_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_SM_SSM_0" data-points="W3sieCI6NjY2LjM5NDc5NjA4MDUwODUsInkiOjMwMC41fSx7IngiOjc1NS4yODUxNTYyNSwieSI6MzM4fSx7IngiOjY2Ni42OTI3MzA0MDI1NDIzLCJ5IjozNzUuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2814.858,288.5L2808.329,296.75C2801.8,305,2788.742,321.5,2778.164,337.411C2767.587,353.321,2759.49,368.642,2755.442,376.303L2751.393,383.963" 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="W3sieCI6MjgxNC44NTc5ODQ2Mzk4MzA2LCJ5IjoyODguNX0seyJ4IjoyNzc1LjY4MzU5Mzc1LCJ5IjozMzh9LHsieCI6Mjc0OS41MjQzNjQ0MDY3Nzk2LCJ5IjozODcuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1651.375,465.5L1651.375,473.75C1651.375,482,1651.375,498.5,1742.642,517.523C1833.909,536.545,2016.443,558.091,2107.71,568.863L2198.977,579.636" 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="W3sieCI6MTY1MS4zNzUsInkiOjQ2NS41fSx7IngiOjE2NTEuMzc1LCJ5Ijo1MTV9LHsieCI6MjIwMi45NDkyMTg3NSwieSI6NTgwLjEwNTAxOTM3NzE1ODR9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2728.914,465.5L2728.914,473.75C2728.914,482,2728.914,498.5,2674.089,516.517C2619.264,534.534,2509.615,554.067,2454.79,563.834L2399.965,573.601" 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="W3sieCI6MjcyOC45MTQwNjI1LCJ5Ijo0NjUuNX0seyJ4IjoyNzI4LjkxNDA2MjUsInkiOjUxNX0seyJ4IjoyMzk2LjAyNzM0Mzc1LCJ5Ijo1NzQuMzAyMDYxMjU1NDkxOX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1987.613,269.632L1927.221,281.027C1866.829,292.422,1746.046,315.211,1687.899,334.216C1629.753,353.221,1634.244,368.442,1636.49,376.053L1638.735,383.664" 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="W3sieCI6MTk4Ny42MTMyODEyNSwieSI6MjY5LjYzMjQ2Mzg5ODQ2NTk3fSx7IngiOjE2MjUuMjYxNzE4NzUsInkiOjMzOH0seyJ4IjoxNjM5Ljg2NzQ1MjMzMDUwODUsInkiOjM4Ny41fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2251.02,264.472L2169.729,276.727C2088.438,288.982,1925.855,313.491,1834.656,333.582C1743.457,353.673,1723.64,369.346,1713.732,377.182L1703.824,385.019" 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="W3sieCI6MjI1MS4wMTk1MzEyNSwieSI6MjY0LjQ3MjQ5Mjk5NjgyNjEzfSx7IngiOjE3NjMuMjczNDM3NSwieSI6MzM4fSx7IngiOjE3MDAuNjg2MTc1ODQ3NDU3NywieSI6Mzg3LjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1197.785,263.393L1295.367,275.827C1392.948,288.262,1588.111,313.131,1673.95,333.444C1759.789,353.757,1736.305,369.514,1724.563,377.393L1712.821,385.271" 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="W3sieCI6MTE5Ny43ODUxNTYyNSwieSI6MjYzLjM5MjYwMTAyOTI3NTN9LHsieCI6MTc4My4yNzM0Mzc1LCJ5IjozMzh9LHsieCI6MTcwOS40OTk3MzUxNjk0OTE1LCJ5IjozODcuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M997.824,288.5L978.587,296.75C959.35,305,920.876,321.5,867.918,338.627C814.96,355.754,747.518,373.507,713.796,382.384L680.075,391.261" id="my-svg-L_CD_SSM_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_SSM_0" data-points="W3sieCI6OTk3LjgyMzY4OTA4ODk4MzEsInkiOjI4OC41fSx7IngiOjg4Mi40MDIzNDM3NSwieSI6MzM4fSx7IngiOjY3Ni4yMDcwMzEyNSwieSI6MzkyLjI3ODgyMDkwNDg4Njk3fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2525.888,288.5L2506.36,296.75C2486.833,305,2447.778,321.5,2322.728,342.081C2197.678,362.662,1986.634,387.323,1881.112,399.654L1775.59,411.985" 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="W3sieCI6MjUyNS44ODc1MTMyNDE1MjU1LCJ5IjoyODguNX0seyJ4IjoyNDA4LjcyMjY1NjI1LCJ5IjozMzh9LHsieCI6MTc3MS42MTcxODc1LCJ5Ijo0MTIuNDQ5MDc3MDExMTU2M31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M2696.413,288.5L2712.958,296.75C2729.503,305,2762.593,321.5,2773.316,337.468C2784.038,353.436,2772.393,368.871,2766.57,376.589L2760.747,384.307" 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="W3sieCI6MjY5Ni40MTI2NzIxMzk4MzA2LCJ5IjoyODguNX0seyJ4IjoyNzk1LjY4MzU5Mzc1LCJ5IjozMzh9LHsieCI6Mjc1OC4zMzc5MjM3Mjg4MTM2LCJ5IjozODcuNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M546.207,477.5L546.207,483.75C546.207,490,546.207,502.5,501.548,517.847C456.889,533.193,367.57,551.387,322.911,560.483L278.252,569.58" id="my-svg-L_SSM_DB_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_SSM_DB_0" data-points="W3sieCI6NTQ2LjIwNzAzMTI1LCJ5Ijo0NzcuNX0seyJ4Ijo1NDYuMjA3MDMxMjUsInkiOjUxNX0seyJ4IjoyNzQuMzMyMDMxMjUsInkiOjU3MC4zNzgyNzg4Njc1NTU1fV0=" 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_SSM_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_DB_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_MST_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_IDX_SM_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_MT_SSM_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_MST_SSM_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_SM_SSM_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_CD_SSM_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 class="edgeLabel"><g class="label" data-id="L_SSM_DB_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(1408.1875, 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(1651.375, 426.5)"><rect class="basic label-container" style="fill:#0f3460 !important;stroke:#fff !important" x="-120.2421875" y="-39" width="240.484375" height="78"/><g class="label" style="color:#fff !important" transform="translate(-90.2421875, -24)"><rect/><foreignObject width="180.484375" 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>Markdown memory CRUD</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SSM-2" data-look="classic" transform="translate(546.20703125, 426.5)"><rect class="basic label-container" style="fill:#1282a2 !important;stroke:#fff !important" x="-130" y="-51" width="260" height="102"/><g class="label" style="color:#fff !important" transform="translate(-100, -36)"><rect/><foreignObject width="200" height="72"><div style="color: rgb(255, 255, 255) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>sqlite-memory-store.ts<br /><i>Search mirror + backfill sync</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-DB-3" data-look="classic" transform="translate(170.63671875, 591.5)"><rect class="basic label-container" style="fill:#1b4332 !important;stroke:#fff !important" x="-103.6953125" y="-39" width="207.390625" height="78"/><g class="label" style="color:#fff !important" transform="translate(-73.6953125, -24)"><rect/><foreignObject width="147.390625" 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>db.ts<br /><i>sessions.db manager</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SS-4" data-look="classic" transform="translate(2728.9140625, 426.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-5" data-look="classic" transform="translate(817.62109375, 249.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-MST-6" data-look="classic" transform="translate(253.92578125, 249.5)"><rect class="basic label-container" style="" x="-111.578125" y="-39" width="223.15625" height="78"/><g class="label" style="" transform="translate(-81.578125, -24)"><rect/><foreignObject width="163.15625" 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-search-tool.ts<br /><i>Search SQLite memory</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-ST-7" data-look="classic" transform="translate(2845.72265625, 249.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-9" data-look="classic" transform="translate(2094.31640625, 249.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-10" data-look="classic" transform="translate(2350.33984375, 249.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-11" data-look="classic" transform="translate(1088.76171875, 249.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-12" data-look="classic" transform="translate(2618.19921875, 249.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-13" data-look="classic" transform="translate(1354.46484375, 249.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-14" data-look="classic" transform="translate(1605.01171875, 249.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-15" data-look="classic" transform="translate(1843.24609375, 249.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-SM-16" data-look="classic" transform="translate(545.50390625, 249.5)"><rect class="basic label-container" style="" x="-130" y="-51" width="260" height="102"/><g class="label" style="" transform="translate(-100, -36)"><rect/><foreignObject width="200" height="72"><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>sync-markdown-memories.ts<br /><i>/memory-sync-markdown</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-CS-8" data-look="classic" transform="translate(2299.48828125, 591.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>
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
graph TB
|
|
2
|
-
subgraph "Persistent Storage"
|
|
2
|
+
subgraph "Core Persistent Storage (Markdown)"
|
|
3
3
|
MEM["MEMORY.md<br/><i>Agent's notes</i>"]
|
|
4
4
|
USR["USER.md<br/><i>User profile</i>"]
|
|
5
5
|
FAIL["failures.md<br/><i>Failure memory</i><br/>corrections, insights, failures"]
|
|
6
6
|
SKL["skills/<br/><i>Procedural memory</i><br/>debug-ts.md<br/>deploy-checklist.md"]
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
subgraph "Search Store (SQLite sessions.db)"
|
|
10
|
+
SQM["memories table + FTS5<br/><i>search mirror/store</i>"]
|
|
11
|
+
SQS["sessions/messages + FTS5<br/><i>session search</i>"]
|
|
12
|
+
end
|
|
13
|
+
|
|
9
14
|
subgraph "System Prompt (frozen snapshot)"
|
|
10
|
-
SMEM["Memory block<br/>
|
|
11
|
-
SUSR["User block<br/>
|
|
15
|
+
SMEM["Memory block<br/>from Markdown only"]
|
|
16
|
+
SUSR["User block<br/>from Markdown only"]
|
|
12
17
|
SFAIL["Failures block<br/>Recent 7 days, max 5"]
|
|
13
18
|
SSKL["Skill index<br/>Names + descriptions only"]
|
|
14
19
|
end
|
|
15
20
|
|
|
16
|
-
subgraph "On Demand
|
|
21
|
+
subgraph "On Demand"
|
|
22
|
+
MSEARCH["memory_search<br/><i>query SQLite memories</i>"]
|
|
23
|
+
SSEARCH["session_search<br/><i>query indexed sessions</i>"]
|
|
24
|
+
BACKFILL["/memory-sync-markdown<br/><i>idempotent Markdown → SQLite sync</i>"]
|
|
17
25
|
FULL["Full skill content<br/>Loaded when needed"]
|
|
18
26
|
end
|
|
19
27
|
|
|
@@ -23,8 +31,18 @@ graph TB
|
|
|
23
31
|
SKL --> SSKL
|
|
24
32
|
SSKL -.->|"skill view"| FULL
|
|
25
33
|
|
|
34
|
+
MEM -.->|"successful saves mirrored"| SQM
|
|
35
|
+
USR -.->|"successful saves mirrored"| SQM
|
|
36
|
+
FAIL -.->|"successful saves mirrored"| SQM
|
|
37
|
+
BACKFILL --> SQM
|
|
38
|
+
MSEARCH --> SQM
|
|
39
|
+
SSEARCH --> SQS
|
|
40
|
+
|
|
26
41
|
style SMEM fill:#1a1a2e,stroke:#e94560,color:#fff
|
|
27
42
|
style SUSR fill:#1a1a2e,stroke:#e94560,color:#fff
|
|
28
43
|
style SFAIL fill:#2d1b2e,stroke:#ff6b6b,color:#fff
|
|
29
44
|
style SSKL fill:#16213e,stroke:#0f3460,color:#fff
|
|
45
|
+
style SQM fill:#0b525b,stroke:#fff,color:#fff
|
|
46
|
+
style SQS fill:#1b4332,stroke:#fff,color:#fff
|
|
47
|
+
style BACKFILL fill:#3a0ca3,stroke:#fff,color:#fff
|
|
30
48
|
style FULL fill:#0a1128,stroke:#1282a2,color:#fff
|
|
@@ -2,49 +2,52 @@ sequenceDiagram
|
|
|
2
2
|
participant User
|
|
3
3
|
participant Pi
|
|
4
4
|
participant Extension
|
|
5
|
-
participant
|
|
5
|
+
participant MD as Markdown (~/.pi/agent/...)
|
|
6
|
+
participant SQL as SQLite (sessions.db)
|
|
6
7
|
|
|
7
|
-
Note over Pi,
|
|
8
|
+
Note over Pi,SQL: ── Session Start ──
|
|
8
9
|
Pi->>Extension: session_start event
|
|
9
|
-
Extension->>
|
|
10
|
+
Extension->>MD: loadFromDisk() — MEMORY.md + USER.md + failures.md + skills/
|
|
10
11
|
Extension-->>Extension: Capture frozen snapshot (memory + failures + skill index)
|
|
11
12
|
|
|
12
|
-
Note over Pi,
|
|
13
|
+
Note over Pi,SQL: ── System Prompt Injection ──
|
|
13
14
|
Pi->>Extension: before_agent_start event
|
|
14
|
-
Extension-->>Pi: systemPrompt + frozen memory
|
|
15
|
-
Note right of Pi:
|
|
15
|
+
Extension-->>Pi: systemPrompt + frozen Markdown memory blocks
|
|
16
|
+
Note right of Pi: Prompt context comes from Markdown core memory
|
|
16
17
|
|
|
17
|
-
Note over Pi,
|
|
18
|
+
Note over Pi,SQL: ── Agent Loop (memory add) ──
|
|
18
19
|
User->>Pi: "Remember I prefer vim"
|
|
19
20
|
Pi->>Extension: tool_call (memory, add)
|
|
20
|
-
Extension->>Extension: scanContent()
|
|
21
|
-
Extension->>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
Extension->>Extension: scanContent() security check
|
|
22
|
+
Extension->>MD: Atomic write to USER.md
|
|
23
|
+
alt Markdown save success
|
|
24
|
+
Extension->>SQL: best-effort sync to memories table
|
|
25
|
+
Extension-->>Pi: success (plus warning only if sync fails)
|
|
26
|
+
else Markdown save fails (limit/validation)
|
|
27
|
+
Extension-->>Pi: fail (no SQLite-only fallback)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Note over Pi,SQL: ── User Correction ──
|
|
25
31
|
User->>Pi: "No, don't use npm — use pnpm"
|
|
26
32
|
Extension->>Extension: isCorrection() = true
|
|
27
33
|
Extension->>Pi: pi.exec("pi -p", correctionPrompt)
|
|
28
|
-
Extension->>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Note over Pi,
|
|
32
|
-
|
|
33
|
-
Extension->>
|
|
34
|
-
Extension
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Note over Pi,Disk: ── Background Review (10 turns or 15 tool calls) ──
|
|
43
|
-
Pi->>Extension: turn_end event
|
|
34
|
+
Extension->>MD: Save [correction] failure memory
|
|
35
|
+
Extension->>SQL: best-effort correction sync
|
|
36
|
+
|
|
37
|
+
Note over Pi,SQL: ── Search + Backfill ──
|
|
38
|
+
Pi->>Extension: memory_search(query)
|
|
39
|
+
Extension->>SQL: FTS5 search memories
|
|
40
|
+
SQL-->>Extension: results
|
|
41
|
+
Pi->>Extension: /memory-sync-markdown
|
|
42
|
+
Extension->>MD: scan global + project Markdown files
|
|
43
|
+
Extension->>SQL: idempotent Markdown → SQLite import
|
|
44
|
+
|
|
45
|
+
Note over Pi,SQL: ── Background Learning ──
|
|
46
|
+
Pi->>Extension: turn_end (10 turns or 15 tool calls)
|
|
44
47
|
Extension->>Pi: pi.exec("pi -p", reviewPrompt)
|
|
45
|
-
Note right of Pi:
|
|
48
|
+
Note right of Pi: Review can save memories/failures/skills
|
|
46
49
|
|
|
47
|
-
Note over Pi,
|
|
50
|
+
Note over Pi,SQL: ── Session End ──
|
|
48
51
|
Pi->>Extension: session_shutdown event
|
|
49
52
|
Extension->>Pi: pi.exec("pi -p", flushPrompt)
|
|
50
|
-
Note right of Pi:
|
|
53
|
+
Note right of Pi: final chance to save durable learnings
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
graph LR
|
|
2
2
|
subgraph "pi-hermes-memory/src/"
|
|
3
3
|
IDX["index.ts<br/><i>Entry point</i>"]
|
|
4
|
-
MS["memory-store.ts<br/><i>
|
|
4
|
+
MS["memory-store.ts<br/><i>Markdown memory CRUD</i>"]
|
|
5
|
+
SSM["sqlite-memory-store.ts<br/><i>Search mirror + backfill sync</i>"]
|
|
6
|
+
DB["db.ts<br/><i>sessions.db manager</i>"]
|
|
5
7
|
SS["skill-store.ts<br/><i>Skill CRUD</i>"]
|
|
6
8
|
MT["memory-tool.ts<br/><i>Memory LLM tool</i>"]
|
|
9
|
+
MST["memory-search-tool.ts<br/><i>Search SQLite memory</i>"]
|
|
7
10
|
ST["skill-tool.ts<br/><i>Skill LLM tool</i>"]
|
|
8
11
|
CS["content-scanner.ts<br/><i>Security</i>"]
|
|
9
12
|
BR["background-review.ts<br/><i>Learning loop</i>"]
|
|
@@ -13,11 +16,15 @@ graph LR
|
|
|
13
16
|
SF["session-flush.ts<br/><i>Pre-compaction flush</i>"]
|
|
14
17
|
IN["insights.ts<br/><i>/memory-insights</i>"]
|
|
15
18
|
SC["skills-command.ts<br/><i>/memory-skills</i>"]
|
|
19
|
+
SM["sync-markdown-memories.ts<br/><i>/memory-sync-markdown</i>"]
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
IDX --> MS
|
|
23
|
+
IDX --> SSM
|
|
24
|
+
IDX --> DB
|
|
19
25
|
IDX --> SS
|
|
20
26
|
IDX --> MT
|
|
27
|
+
IDX --> MST
|
|
21
28
|
IDX --> ST
|
|
22
29
|
IDX --> BR
|
|
23
30
|
IDX --> AC
|
|
@@ -26,17 +33,26 @@ graph LR
|
|
|
26
33
|
IDX --> SF
|
|
27
34
|
IDX --> IN
|
|
28
35
|
IDX --> SC
|
|
36
|
+
IDX --> SM
|
|
37
|
+
|
|
29
38
|
MT --> MS
|
|
39
|
+
MT --> SSM
|
|
40
|
+
MST --> SSM
|
|
41
|
+
SM --> SSM
|
|
30
42
|
ST --> SS
|
|
31
43
|
MS --> CS
|
|
32
44
|
SS --> CS
|
|
33
45
|
BR --> MS
|
|
34
46
|
AC --> MS
|
|
35
47
|
CD --> MS
|
|
48
|
+
CD --> SSM
|
|
36
49
|
SA --> MS
|
|
37
50
|
SA --> SS
|
|
51
|
+
SSM --> DB
|
|
38
52
|
|
|
39
53
|
style IDX fill:#e94560,stroke:#fff,color:#fff
|
|
40
54
|
style MS fill:#0f3460,stroke:#fff,color:#fff
|
|
55
|
+
style SSM fill:#1282a2,stroke:#fff,color:#fff
|
|
56
|
+
style DB fill:#1b4332,stroke:#fff,color:#fff
|
|
41
57
|
style SS fill:#0f3460,stroke:#fff,color:#fff
|
|
42
58
|
style CS fill:#ff6600,stroke:#fff,color:#fff
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-hermes-memory",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.9",
|
|
4
4
|
"description": "🧠 Persistent memory + 🔍 session search + 🛡️ secret scanning for Pi. SQLite FTS5 search across every conversation, auto-consolidation, memory aging, procedural skills. 272 tests. Ported from Hermes agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
|
|
11
11
|
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
12
12
|
import { MemoryStore } from "../store/memory-store.js";
|
|
13
|
+
import { DatabaseManager } from "../store/db.js";
|
|
14
|
+
import {
|
|
15
|
+
formatFailureMemoryContent,
|
|
16
|
+
syncMemoryEntry,
|
|
17
|
+
} from "../store/sqlite-memory-store.js";
|
|
13
18
|
import {
|
|
14
19
|
CORRECTION_SAVE_PROMPT,
|
|
15
20
|
CORRECTION_STRONG_PATTERNS,
|
|
@@ -72,6 +77,7 @@ export function setupCorrectionDetector(
|
|
|
72
77
|
store: MemoryStore,
|
|
73
78
|
projectStore: MemoryStore | null,
|
|
74
79
|
config: MemoryConfig,
|
|
80
|
+
dbManager: DatabaseManager | null = null,
|
|
75
81
|
): void {
|
|
76
82
|
if (!config.correctionDetection) return;
|
|
77
83
|
|
|
@@ -167,11 +173,30 @@ export function setupCorrectionDetector(
|
|
|
167
173
|
const correctionText = lastUserMsg ? lastUserMsg.replace(/^\[USER\]:\s*/, "") : "";
|
|
168
174
|
if (correctionText) {
|
|
169
175
|
const directive = extractCorrectionDirective(correctionText);
|
|
170
|
-
|
|
176
|
+
const failureReason = "User corrected the agent";
|
|
177
|
+
const projectMarker = projectStore ? "project" : undefined;
|
|
178
|
+
const addResult = await store.addFailure(directive, {
|
|
171
179
|
category: "correction",
|
|
172
|
-
failureReason
|
|
173
|
-
project:
|
|
180
|
+
failureReason,
|
|
181
|
+
project: projectMarker,
|
|
174
182
|
});
|
|
183
|
+
|
|
184
|
+
if (addResult.success && dbManager) {
|
|
185
|
+
try {
|
|
186
|
+
syncMemoryEntry(dbManager, {
|
|
187
|
+
content: formatFailureMemoryContent(directive, {
|
|
188
|
+
category: "correction",
|
|
189
|
+
failureReason,
|
|
190
|
+
project: projectMarker,
|
|
191
|
+
}),
|
|
192
|
+
target: "failure",
|
|
193
|
+
category: "correction",
|
|
194
|
+
failureReason,
|
|
195
|
+
});
|
|
196
|
+
} catch {
|
|
197
|
+
// Best-effort — searchable sync should not block correction capture
|
|
198
|
+
}
|
|
199
|
+
}
|
|
175
200
|
}
|
|
176
201
|
} catch {
|
|
177
202
|
// Best-effort — don't block the session
|
|
@@ -41,7 +41,7 @@ export function registerLearnMemoryCommand(pi: ExtensionAPI): void {
|
|
|
41
41
|
lines.push(" User: Who you are — name, preferences, communication style");
|
|
42
42
|
lines.push(" Failures: What didn't work — corrections, failures, insights");
|
|
43
43
|
lines.push(" Skills: Procedures — how to debug, deploy, test");
|
|
44
|
-
lines.push(" Extended:
|
|
44
|
+
lines.push(" Extended: SQLite search mirror for Markdown memory + backfill");
|
|
45
45
|
lines.push("");
|
|
46
46
|
lines.push(" Memory Categories:");
|
|
47
47
|
lines.push(" ─────────────────");
|
|
@@ -70,7 +70,7 @@ export function registerLearnMemoryCommand(pi: ExtensionAPI): void {
|
|
|
70
70
|
lines.push(" Search past conversations across all sessions");
|
|
71
71
|
lines.push("");
|
|
72
72
|
lines.push(" memory_search");
|
|
73
|
-
lines.push(" Search
|
|
73
|
+
lines.push(" Search the SQLite-backed memory mirror/store");
|
|
74
74
|
lines.push(" Filters: project, target, category");
|
|
75
75
|
lines.push(" Categories: failure, correction, insight, preference, convention, tool-quirk");
|
|
76
76
|
}
|
|
@@ -87,6 +87,8 @@ export function registerLearnMemoryCommand(pi: ExtensionAPI): void {
|
|
|
87
87
|
lines.push(" /memory-interview Answer questions to pre-fill profile");
|
|
88
88
|
lines.push(" /memory-switch-project List all project memories");
|
|
89
89
|
lines.push(" /memory-index-sessions Import past sessions for search");
|
|
90
|
+
lines.push(" /memory-sync-markdown Backfill Markdown memories into SQLite");
|
|
91
|
+
lines.push(" /memory-preview-context Show injected memory/skill prompt blocks");
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
if (section.startsWith("✅")) {
|
|
@@ -115,12 +117,13 @@ export function registerLearnMemoryCommand(pi: ExtensionAPI): void {
|
|
|
115
117
|
lines.push(" ╚══════════════════════════════════════════════╝");
|
|
116
118
|
lines.push("");
|
|
117
119
|
lines.push(" 1. Session starts → Core memory + recent failures injected");
|
|
118
|
-
lines.push(" 2. During conversation → Agent saves
|
|
119
|
-
lines.push(" 3.
|
|
120
|
-
lines.push(" 4.
|
|
121
|
-
lines.push(" 5. On
|
|
122
|
-
lines.push(" 6.
|
|
123
|
-
lines.push(" 7.
|
|
120
|
+
lines.push(" 2. During conversation → Agent saves to Markdown memory");
|
|
121
|
+
lines.push(" 3. Successful saves → Best-effort SQLite search sync");
|
|
122
|
+
lines.push(" 4. Every 10 turns → Background review saves items");
|
|
123
|
+
lines.push(" 5. On correction → Immediate save as [correction] category");
|
|
124
|
+
lines.push(" 6. On failure → Saves what failed + why");
|
|
125
|
+
lines.push(" 7. When full → Auto-consolidation merges");
|
|
126
|
+
lines.push(" 8. Session ends → Final flush");
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
if (section.startsWith("🏗️")) {
|
|
@@ -137,10 +140,11 @@ export function registerLearnMemoryCommand(pi: ExtensionAPI): void {
|
|
|
137
140
|
lines.push(" │ Project memory — When cwd matches │");
|
|
138
141
|
lines.push(" └─────────────────────────────────────┘");
|
|
139
142
|
lines.push("");
|
|
140
|
-
lines.push(" Searchable on Demand (
|
|
143
|
+
lines.push(" Searchable on Demand (SQLite mirror/store)");
|
|
141
144
|
lines.push(" ┌─────────────────────────────────────┐");
|
|
142
145
|
lines.push(" │ session_search(\"auth flow\") │");
|
|
143
146
|
lines.push(" │ memory_search(\"testing patterns\") │");
|
|
147
|
+
lines.push(" │ /memory-sync-markdown (backfill old md)│");
|
|
144
148
|
lines.push(" │ memory_search(\"auth\", cat:\"failure\")│");
|
|
145
149
|
lines.push(" └─────────────────────────────────────┘");
|
|
146
150
|
}
|
|
@@ -153,9 +157,11 @@ export function registerLearnMemoryCommand(pi: ExtensionAPI): void {
|
|
|
153
157
|
lines.push("");
|
|
154
158
|
lines.push(" \"Memory is full\"");
|
|
155
159
|
lines.push(" → /memory-consolidate to merge entries");
|
|
160
|
+
lines.push(" → If it still fails, the save does NOT silently become SQLite-only");
|
|
156
161
|
lines.push("");
|
|
157
162
|
lines.push(" \"Can't find something\"");
|
|
158
|
-
lines.push(" → memory_search to search
|
|
163
|
+
lines.push(" → memory_search to search the SQLite mirror/store");
|
|
164
|
+
lines.push(" → /memory-sync-markdown to import older Markdown entries");
|
|
159
165
|
lines.push("");
|
|
160
166
|
lines.push(" \"Agent forgot something\"");
|
|
161
167
|
lines.push(" → Check /memory-insights, tell agent \"remember X\"");
|