@selesai/code 0.13.0 → 0.13.2

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.
Files changed (463) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/core/agent-session.d.ts +1 -1
  3. package/dist/core/agent-session.js +1 -1
  4. package/dist/core/sdk.d.ts +2 -2
  5. package/dist/core/sdk.js +1 -1
  6. package/dist/core/system-prompt.d.ts +1 -1
  7. package/dist/core/system-prompt.js +1 -1
  8. package/dist/extensions/package.json +1 -2
  9. package/dist/extensions/pi-hermes-memory/CHANGELOG.md +371 -0
  10. package/dist/extensions/pi-hermes-memory/LICENSE +21 -0
  11. package/dist/extensions/pi-hermes-memory/README.md +643 -0
  12. package/dist/extensions/pi-hermes-memory/docs/0.1/TASKS.md +197 -0
  13. package/dist/extensions/pi-hermes-memory/docs/0.2/PLAN.md +290 -0
  14. package/dist/extensions/pi-hermes-memory/docs/0.2/TASKS.md +134 -0
  15. package/dist/extensions/pi-hermes-memory/docs/0.2/TEST-PLAN.md +216 -0
  16. package/dist/extensions/pi-hermes-memory/docs/0.3/PLAN.md +330 -0
  17. package/dist/extensions/pi-hermes-memory/docs/0.3/TASKS.md +125 -0
  18. package/dist/extensions/pi-hermes-memory/docs/0.4/PLAN.md +160 -0
  19. package/dist/extensions/pi-hermes-memory/docs/0.4/TASKS.md +113 -0
  20. package/dist/extensions/pi-hermes-memory/docs/0.6/CHANGELOG.md +57 -0
  21. package/dist/extensions/pi-hermes-memory/docs/0.6/PLAN.md +202 -0
  22. package/dist/extensions/pi-hermes-memory/docs/0.6/TASKS.md +144 -0
  23. package/dist/extensions/pi-hermes-memory/docs/0.7/PLAN.md +349 -0
  24. package/dist/extensions/pi-hermes-memory/docs/0.7/TASKS.md +110 -0
  25. package/dist/extensions/pi-hermes-memory/docs/PUBLISHING.md +149 -0
  26. package/dist/extensions/pi-hermes-memory/docs/ROADMAP.md +468 -0
  27. package/dist/extensions/pi-hermes-memory/docs/images/memory-architecture.svg +1 -0
  28. package/dist/extensions/pi-hermes-memory/docs/images/pi-logo.svg +22 -0
  29. package/dist/extensions/pi-hermes-memory/docs/images/pi_memory.png +0 -0
  30. package/dist/extensions/pi-hermes-memory/docs/images/pi_memory.svg +19 -0
  31. package/dist/extensions/pi-hermes-memory/docs/images/security-flow.svg +1 -0
  32. package/dist/extensions/pi-hermes-memory/docs/images/session-lifecycle.svg +1 -0
  33. package/dist/extensions/pi-hermes-memory/docs/images/source-architecture.svg +1 -0
  34. package/dist/extensions/pi-hermes-memory/docs/mermaid/memory-architecture.mmd +49 -0
  35. package/dist/extensions/pi-hermes-memory/docs/mermaid/security-flow.mmd +40 -0
  36. package/dist/extensions/pi-hermes-memory/docs/mermaid/session-lifecycle.mmd +56 -0
  37. package/dist/extensions/pi-hermes-memory/docs/mermaid/source-architecture.mmd +54 -0
  38. package/dist/extensions/pi-hermes-memory/package-lock.json +3799 -0
  39. package/dist/extensions/pi-hermes-memory/package.json +66 -0
  40. package/dist/extensions/pi-hermes-memory/scripts/check-min-sdk.mjs +99 -0
  41. package/dist/extensions/pi-hermes-memory/scripts/ensure-dev.mjs +57 -0
  42. package/dist/extensions/pi-hermes-memory/src/auto-consolidation-warning.ts +6 -0
  43. package/dist/extensions/pi-hermes-memory/src/config.ts +178 -0
  44. package/dist/extensions/pi-hermes-memory/src/constants.ts +424 -0
  45. package/dist/extensions/pi-hermes-memory/src/extension-root-migration.ts +639 -0
  46. package/dist/extensions/pi-hermes-memory/src/handlers/auto-consolidate.ts +401 -0
  47. package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +297 -0
  48. package/dist/extensions/pi-hermes-memory/src/handlers/child-process-watchdog.mjs +90 -0
  49. package/dist/extensions/pi-hermes-memory/src/handlers/correction-detector.ts +300 -0
  50. package/dist/extensions/pi-hermes-memory/src/handlers/index-sessions.ts +86 -0
  51. package/dist/extensions/pi-hermes-memory/src/handlers/insights.ts +78 -0
  52. package/dist/extensions/pi-hermes-memory/src/handlers/interview.ts +37 -0
  53. package/dist/extensions/pi-hermes-memory/src/handlers/learn-memory.ts +186 -0
  54. package/dist/extensions/pi-hermes-memory/src/handlers/message-parts.ts +27 -0
  55. package/dist/extensions/pi-hermes-memory/src/handlers/pi-child-process.ts +485 -0
  56. package/dist/extensions/pi-hermes-memory/src/handlers/preview-context.ts +105 -0
  57. package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +506 -0
  58. package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +145 -0
  59. package/dist/extensions/pi-hermes-memory/src/handlers/session-flush.ts +151 -0
  60. package/dist/extensions/pi-hermes-memory/src/handlers/session-live-index.ts +94 -0
  61. package/dist/extensions/pi-hermes-memory/src/handlers/skills-command.ts +1334 -0
  62. package/dist/extensions/pi-hermes-memory/src/handlers/standing-pin.ts +111 -0
  63. package/dist/extensions/pi-hermes-memory/src/handlers/switch-project.ts +75 -0
  64. package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +266 -0
  65. package/dist/extensions/pi-hermes-memory/src/index.ts +378 -0
  66. package/dist/extensions/pi-hermes-memory/src/lifecycle-timing.ts +54 -0
  67. package/dist/extensions/pi-hermes-memory/src/paths.ts +61 -0
  68. package/dist/extensions/pi-hermes-memory/src/project-context.ts +13 -0
  69. package/dist/extensions/pi-hermes-memory/src/project-memory-migration.ts +93 -0
  70. package/dist/extensions/pi-hermes-memory/src/project.ts +157 -0
  71. package/dist/extensions/pi-hermes-memory/src/prompt-context.ts +55 -0
  72. package/dist/extensions/pi-hermes-memory/src/store/atomic-lock-coordinator.ts +375 -0
  73. package/dist/extensions/pi-hermes-memory/src/store/canonical-storage-path.ts +54 -0
  74. package/dist/extensions/pi-hermes-memory/src/store/content-scanner.ts +101 -0
  75. package/dist/extensions/pi-hermes-memory/src/store/db.ts +1180 -0
  76. package/dist/extensions/pi-hermes-memory/src/store/fts-query.ts +101 -0
  77. package/dist/extensions/pi-hermes-memory/src/store/markdown-mutation-lock.ts +38 -0
  78. package/dist/extensions/pi-hermes-memory/src/store/memory-lookup.ts +24 -0
  79. package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +1191 -0
  80. package/dist/extensions/pi-hermes-memory/src/store/recovery-maintenance.ts +66 -0
  81. package/dist/extensions/pi-hermes-memory/src/store/schema.ts +118 -0
  82. package/dist/extensions/pi-hermes-memory/src/store/session-anchor-search.ts +472 -0
  83. package/dist/extensions/pi-hermes-memory/src/store/session-indexer.ts +511 -0
  84. package/dist/extensions/pi-hermes-memory/src/store/session-parser.ts +213 -0
  85. package/dist/extensions/pi-hermes-memory/src/store/session-search.ts +234 -0
  86. package/dist/extensions/pi-hermes-memory/src/store/skill-store.ts +950 -0
  87. package/dist/extensions/pi-hermes-memory/src/store/skill-utils.ts +133 -0
  88. package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +1002 -0
  89. package/dist/extensions/pi-hermes-memory/src/store/sqlite-native.ts +241 -0
  90. package/dist/extensions/pi-hermes-memory/src/store/standing-instructions.ts +247 -0
  91. package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +95 -0
  92. package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +469 -0
  93. package/dist/extensions/pi-hermes-memory/src/tools/session-search-tool.ts +246 -0
  94. package/dist/extensions/pi-hermes-memory/src/tools/shared-output-view.ts +170 -0
  95. package/dist/extensions/pi-hermes-memory/src/tools/skill-tool.ts +333 -0
  96. package/dist/extensions/pi-hermes-memory/src/tools/tool-result-views.ts +105 -0
  97. package/dist/extensions/pi-hermes-memory/src/types.ts +214 -0
  98. package/dist/extensions/pi-hermes-memory/tests/config.test.ts +434 -0
  99. package/dist/extensions/pi-hermes-memory/tests/extension-root-migration.test.ts +368 -0
  100. package/dist/extensions/pi-hermes-memory/tests/handlers/auto-consolidate.test.ts +984 -0
  101. package/dist/extensions/pi-hermes-memory/tests/handlers/background-review.test.ts +950 -0
  102. package/dist/extensions/pi-hermes-memory/tests/handlers/correction-detector.test.ts +671 -0
  103. package/dist/extensions/pi-hermes-memory/tests/handlers/insights.test.ts +157 -0
  104. package/dist/extensions/pi-hermes-memory/tests/handlers/interview.test.ts +127 -0
  105. package/dist/extensions/pi-hermes-memory/tests/handlers/pi-child-process.test.ts +905 -0
  106. package/dist/extensions/pi-hermes-memory/tests/handlers/preview-context.test.ts +152 -0
  107. package/dist/extensions/pi-hermes-memory/tests/handlers/prompt-context.test.ts +166 -0
  108. package/dist/extensions/pi-hermes-memory/tests/handlers/resources-discover.test.ts +71 -0
  109. package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +614 -0
  110. package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +192 -0
  111. package/dist/extensions/pi-hermes-memory/tests/handlers/session-flush.test.ts +677 -0
  112. package/dist/extensions/pi-hermes-memory/tests/handlers/session-live-index.test.ts +225 -0
  113. package/dist/extensions/pi-hermes-memory/tests/handlers/skills-command.test.ts +827 -0
  114. package/dist/extensions/pi-hermes-memory/tests/handlers/standing-pin.test.ts +134 -0
  115. package/dist/extensions/pi-hermes-memory/tests/handlers/sync-markdown-memories.test.ts +491 -0
  116. package/dist/extensions/pi-hermes-memory/tests/handlers/system-prompt.test.ts +199 -0
  117. package/dist/extensions/pi-hermes-memory/tests/handlers/thinking-max.test.ts +64 -0
  118. package/dist/extensions/pi-hermes-memory/tests/index.test.ts +30 -0
  119. package/dist/extensions/pi-hermes-memory/tests/integration/flow.test.ts +126 -0
  120. package/dist/extensions/pi-hermes-memory/tests/lifecycle-timing.test.ts +76 -0
  121. package/dist/extensions/pi-hermes-memory/tests/paths.test.ts +23 -0
  122. package/dist/extensions/pi-hermes-memory/tests/project-memory-migration.test.ts +80 -0
  123. package/dist/extensions/pi-hermes-memory/tests/project-rebinding.test.ts +115 -0
  124. package/dist/extensions/pi-hermes-memory/tests/project.test.ts +120 -0
  125. package/dist/extensions/pi-hermes-memory/tests/run-all-timeout.test.ts +107 -0
  126. package/dist/extensions/pi-hermes-memory/tests/run-all.sh +45 -0
  127. package/dist/extensions/pi-hermes-memory/tests/store/atomic-lock-coordinator.test.ts +381 -0
  128. package/dist/extensions/pi-hermes-memory/tests/store/content-scanner.test.ts +388 -0
  129. package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +1046 -0
  130. package/dist/extensions/pi-hermes-memory/tests/store/markdown-mutation-lock.test.ts +34 -0
  131. package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +2150 -0
  132. package/dist/extensions/pi-hermes-memory/tests/store/recovery-maintenance.test.ts +170 -0
  133. package/dist/extensions/pi-hermes-memory/tests/store/session-anchor-search.test.ts +210 -0
  134. package/dist/extensions/pi-hermes-memory/tests/store/session-indexer.test.ts +643 -0
  135. package/dist/extensions/pi-hermes-memory/tests/store/session-parser.test.ts +282 -0
  136. package/dist/extensions/pi-hermes-memory/tests/store/session-search.test.ts +287 -0
  137. package/dist/extensions/pi-hermes-memory/tests/store/skill-store.test.ts +678 -0
  138. package/dist/extensions/pi-hermes-memory/tests/store/skill-utils.test.ts +21 -0
  139. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-lazy-load.test.ts +78 -0
  140. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +543 -0
  141. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-native.test.ts +164 -0
  142. package/dist/extensions/pi-hermes-memory/tests/store/standing-instructions.test.ts +171 -0
  143. package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +84 -0
  144. package/dist/extensions/pi-hermes-memory/tests/tools/memory-tool.test.ts +709 -0
  145. package/dist/extensions/pi-hermes-memory/tests/tools/session-search-tool.test.ts +345 -0
  146. package/dist/extensions/pi-hermes-memory/tests/tools/shared-output-view.test.ts +362 -0
  147. package/dist/extensions/pi-hermes-memory/tests/tools/skill-tool.test.ts +478 -0
  148. package/dist/extensions/pi-hermes-memory/tests/tools/tool-result-renderer-wiring.test.ts +40 -0
  149. package/dist/extensions/pi-hermes-memory/tsconfig.json +19 -0
  150. package/dist/extensions/pi-rewind-hook/README.md +4 -1
  151. package/dist/extensions/pi-rewind-hook/index.ts +151 -21
  152. package/dist/extensions/pi-rewind-hook/package.json +5 -3
  153. package/dist/extensions/pi-subagents/.oxlintrc.json +43 -0
  154. package/dist/extensions/pi-subagents/AGENTS.md +5 -0
  155. package/dist/extensions/pi-subagents/CHANGELOG.md +157 -0
  156. package/dist/extensions/pi-subagents/README.md +12 -6
  157. package/dist/extensions/pi-subagents/VISION.md +81 -0
  158. package/dist/extensions/pi-subagents/agents/claude-code-writer.md +15 -0
  159. package/dist/extensions/pi-subagents/agents/claude-code.md +15 -0
  160. package/dist/extensions/pi-subagents/agents/codex-exec-writer.md +15 -0
  161. package/dist/extensions/pi-subagents/agents/codex-exec.md +15 -0
  162. package/dist/extensions/pi-subagents/agents/cursor-agent-writer.md +14 -0
  163. package/dist/extensions/pi-subagents/agents/cursor-agent.md +14 -0
  164. package/dist/extensions/pi-subagents/agents/reviewer.md +1 -3
  165. package/dist/extensions/pi-subagents/docs/agents.md +488 -0
  166. package/dist/extensions/pi-subagents/docs/configuration.md +46 -9
  167. package/dist/extensions/pi-subagents/docs/extension-api.md +42 -3
  168. package/dist/extensions/pi-subagents/docs/models.md +27 -4
  169. package/dist/extensions/pi-subagents/docs/observability.md +10 -9
  170. package/dist/extensions/pi-subagents/docs/tool-reference.md +102 -6
  171. package/dist/extensions/pi-subagents/docs/workflows.md +135 -0
  172. package/dist/extensions/pi-subagents/package-lock.json +389 -2
  173. package/dist/extensions/pi-subagents/package.json +3 -1
  174. package/dist/extensions/pi-subagents/prompts/review-loop.md +2 -2
  175. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +1 -1
  176. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +3 -1
  177. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +7 -3
  178. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
  179. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +26 -5
  180. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +41 -22
  181. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +4 -4
  182. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +9 -2
  183. package/dist/extensions/pi-subagents/src/agents/agents.ts +322 -75
  184. package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +6 -0
  185. package/dist/extensions/pi-subagents/src/agents/runtime-agent-events.ts +70 -0
  186. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +27 -20
  187. package/dist/extensions/pi-subagents/src/api/agents.ts +10 -5
  188. package/dist/extensions/pi-subagents/src/api/background-work.ts +5 -1
  189. package/dist/extensions/pi-subagents/src/api/delegation.ts +0 -7
  190. package/dist/extensions/pi-subagents/src/api/preflight.ts +34 -12
  191. package/dist/extensions/pi-subagents/src/extension/config.ts +70 -0
  192. package/dist/extensions/pi-subagents/src/extension/doctor.ts +3 -3
  193. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -3
  194. package/dist/extensions/pi-subagents/src/extension/index.ts +83 -30
  195. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +44 -15
  196. package/dist/extensions/pi-subagents/src/extension/rpc.ts +55 -19
  197. package/dist/extensions/pi-subagents/src/extension/schemas.ts +41 -15
  198. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +28 -31
  199. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -1
  200. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -10
  201. package/dist/extensions/pi-subagents/src/inspectors/herdr/session-roots-codec.ts +42 -0
  202. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +51 -7
  203. package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +2 -0
  204. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +5 -6
  205. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +77 -10
  206. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +176 -53
  207. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +19 -12
  208. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +29 -27
  209. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +20 -3
  210. package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +23 -261
  211. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +73 -7
  212. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +8 -3
  213. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +74 -8
  214. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +37 -21
  215. package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +8 -8
  216. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +184 -9
  217. package/dist/extensions/pi-subagents/src/runs/background/result-delivery-ownership.ts +45 -0
  218. package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +28 -14
  219. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +38 -15
  220. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +1 -1
  221. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +1 -1
  222. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +50 -13
  223. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +93 -8
  224. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +10 -4
  225. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +4 -14
  226. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +549 -377
  227. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +58 -10
  228. package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +1 -1
  229. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +26 -1
  230. package/dist/extensions/pi-subagents/src/runs/background/wait-config.ts +23 -9
  231. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +9 -2
  232. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +2 -2
  233. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +204 -129
  234. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +9 -0
  235. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +23 -1
  236. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +773 -311
  237. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +140 -115
  238. package/dist/extensions/pi-subagents/src/runs/shared/abort-recovery.ts +119 -0
  239. package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +463 -0
  240. package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +19 -4
  241. package/dist/extensions/pi-subagents/src/runs/shared/child-launch-plan.ts +151 -0
  242. package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +21 -7
  243. package/dist/extensions/pi-subagents/src/runs/shared/claude-code-adapter.ts +129 -0
  244. package/dist/extensions/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
  245. package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +89 -0
  246. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +5 -4
  247. package/dist/extensions/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
  248. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +3 -3
  249. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-contract.ts +167 -0
  250. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +122 -0
  251. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +348 -55
  252. package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +5 -5
  253. package/dist/extensions/pi-subagents/src/runs/shared/host-step-status.ts +230 -0
  254. package/dist/extensions/pi-subagents/src/runs/shared/lane-metadata.ts +105 -0
  255. package/dist/extensions/pi-subagents/src/runs/shared/launch-cwd.ts +16 -0
  256. package/dist/extensions/pi-subagents/src/runs/shared/long-running-guard.ts +2 -1
  257. package/dist/extensions/pi-subagents/src/runs/shared/mcp-config-sources.ts +422 -0
  258. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +221 -158
  259. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +197 -0
  260. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +69 -7
  261. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +47 -6
  262. package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +7 -2
  263. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +9 -3
  264. package/dist/extensions/pi-subagents/src/runs/shared/nested-render.ts +9 -5
  265. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +419 -7
  266. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +15 -1
  267. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +81 -8
  268. package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +13 -0
  269. package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +21 -1
  270. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +44 -4
  271. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +98 -13
  272. package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +1 -1
  273. package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +847 -0
  274. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +18 -0
  275. package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +46 -0
  276. package/dist/extensions/pi-subagents/src/shared/extension-context.ts +24 -0
  277. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +21 -0
  278. package/dist/extensions/pi-subagents/src/shared/formatters.ts +18 -3
  279. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +5 -1
  280. package/dist/extensions/pi-subagents/src/shared/pruned-fork.ts +450 -0
  281. package/dist/extensions/pi-subagents/src/shared/session-file-trust.ts +19 -0
  282. package/dist/extensions/pi-subagents/src/shared/session-tokens.ts +14 -3
  283. package/dist/extensions/pi-subagents/src/shared/settings.ts +19 -105
  284. package/dist/extensions/pi-subagents/src/shared/shortcuts.ts +17 -0
  285. package/dist/extensions/pi-subagents/src/shared/types.ts +359 -40
  286. package/dist/extensions/pi-subagents/src/shared/utils.ts +41 -84
  287. package/dist/extensions/pi-subagents/src/shared/workflow-child-permit.ts +116 -0
  288. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -9
  289. package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +0 -4
  290. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +1 -2
  291. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +378 -88
  292. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +22 -11
  293. package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +3 -0
  294. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +147 -79
  295. package/dist/extensions/pi-subagents/src/tui/fleet-transcript.ts +11 -5
  296. package/dist/extensions/pi-subagents/src/tui/fleet.ts +39 -18
  297. package/dist/extensions/pi-subagents/src/tui/render.ts +369 -46
  298. package/dist/extensions/pi-subagents/src/watchdog/turn-delta.ts +1 -1
  299. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +6 -3
  300. package/dist/extensions/pi-subagents/src/workflows/host-command.ts +230 -0
  301. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +740 -58
  302. package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +121 -0
  303. package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +270 -0
  304. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +195 -6
  305. package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +246 -0
  306. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
  307. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1114 -260
  308. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +34 -0
  309. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +150 -3
  310. package/dist/extensions/pi-subagents/test/integration/claude-code-smoke.test.ts +52 -0
  311. package/dist/extensions/pi-subagents/test/integration/claude-code-writer-smoke.test.ts +55 -0
  312. package/dist/extensions/pi-subagents/test/integration/codex-exec-smoke.test.ts +53 -0
  313. package/dist/extensions/pi-subagents/test/integration/codex-exec-writer-smoke.test.ts +57 -0
  314. package/dist/extensions/pi-subagents/test/integration/cursor-agent-smoke.test.ts +59 -0
  315. package/dist/extensions/pi-subagents/test/integration/cursor-agent-writer-smoke.test.ts +62 -0
  316. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +57 -1
  317. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +1 -0
  318. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +20 -0
  319. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +4 -3
  320. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +2 -2
  321. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +54 -4
  322. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +482 -4
  323. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +157 -9
  324. package/dist/extensions/pi-subagents/test/integration/session-tokens.test.ts +5 -5
  325. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1508 -291
  326. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +423 -1
  327. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +8 -0
  328. package/dist/extensions/pi-subagents/test/support/cursor-smoke-inputs.ts +51 -0
  329. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  330. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +5 -5
  331. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +6 -6
  332. package/dist/extensions/pi-subagents/test/unit/abort-recovery.test.ts +152 -0
  333. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +48 -0
  334. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +184 -6
  335. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +66 -6
  336. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +77 -0
  337. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +18 -0
  338. package/dist/extensions/pi-subagents/test/unit/anti-slop-oxlint.test.ts +86 -0
  339. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +1 -1
  340. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +101 -1
  341. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +121 -0
  342. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +28 -0
  343. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +14 -7
  344. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +53 -0
  345. package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +190 -0
  346. package/dist/extensions/pi-subagents/test/unit/async-status-snapshot.test.ts +42 -0
  347. package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +8 -4
  348. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +23 -0
  349. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +78 -1
  350. package/dist/extensions/pi-subagents/test/unit/child-launch-plan.test.ts +94 -0
  351. package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +21 -0
  352. package/dist/extensions/pi-subagents/test/unit/child-session-name.test.ts +50 -0
  353. package/dist/extensions/pi-subagents/test/unit/claude-code-adapter.test.ts +245 -0
  354. package/dist/extensions/pi-subagents/test/unit/codex-exec-adapter.test.ts +192 -0
  355. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +27 -0
  356. package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +150 -0
  357. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +21 -0
  358. package/dist/extensions/pi-subagents/test/unit/cursor-agent-adapter.test.ts +259 -0
  359. package/dist/extensions/pi-subagents/test/unit/cursor-smoke-inputs.test.ts +77 -0
  360. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +1 -4
  361. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
  362. package/dist/extensions/pi-subagents/test/unit/extension-context.test.ts +27 -0
  363. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +223 -0
  364. package/dist/extensions/pi-subagents/test/unit/fast-mode-extension.test.ts +27 -0
  365. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +208 -2
  366. package/dist/extensions/pi-subagents/test/unit/fleet-transcript.test.ts +29 -1
  367. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +110 -1
  368. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +10 -0
  369. package/dist/extensions/pi-subagents/test/unit/formatters.test.ts +14 -0
  370. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +18 -9
  371. package/dist/extensions/pi-subagents/test/unit/herdr-session-roots-codec.test.ts +63 -0
  372. package/dist/extensions/pi-subagents/test/unit/herdr-shell-command.test.ts +2 -2
  373. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +136 -6
  374. package/dist/extensions/pi-subagents/test/unit/host-command.test.ts +156 -0
  375. package/dist/extensions/pi-subagents/test/unit/host-step-status.test.ts +98 -0
  376. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +178 -26
  377. package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +2 -1
  378. package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +21 -0
  379. package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +138 -0
  380. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +1 -1
  381. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +91 -0
  382. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +72 -7
  383. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +21 -0
  384. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +1 -0
  385. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +20 -2
  386. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +129 -1
  387. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +2 -2
  388. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +4 -0
  389. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +358 -0
  390. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +574 -21
  391. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +109 -1
  392. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +71 -1
  393. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +7 -7
  394. package/dist/extensions/pi-subagents/test/unit/pruned-fork.test.ts +214 -0
  395. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +29 -8
  396. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +53 -0
  397. package/dist/extensions/pi-subagents/test/unit/result-delivery-ownership.test.ts +34 -0
  398. package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +101 -3
  399. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +1 -0
  400. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +10 -8
  401. package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +71 -1
  402. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +41 -7
  403. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +136 -2
  404. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +137 -0
  405. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +33 -12
  406. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +504 -1
  407. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +8 -0
  408. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
  409. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +12 -1
  410. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +3 -5
  411. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +5 -6
  412. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +0 -8
  413. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +5 -0
  414. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +157 -2
  415. package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +1 -1
  416. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +63 -4
  417. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +27 -23
  418. package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +44 -0
  419. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +1 -0
  420. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +7 -5
  421. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +106 -0
  422. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +484 -9
  423. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +38 -4
  424. package/dist/extensions/pi-subagents/test/unit/workflow-preflight.test.ts +155 -0
  425. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +318 -0
  426. package/dist/extensions/pi-subagents/test/unit/workflow-resume-hint.test.ts +365 -0
  427. package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +349 -0
  428. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +21 -0
  429. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +2 -7
  430. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/effect/index.ts +13 -0
  431. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/effect/rules/no-service-constructor-imports.ts +52 -0
  432. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/index.ts +41 -0
  433. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-chained-type-assertions.ts +77 -0
  434. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-conditional-empty-object-spread.ts +49 -0
  435. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-known-value-widening.ts +247 -0
  436. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-module-mocking.ts +91 -0
  437. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-object-parameters.ts +126 -0
  438. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-reflect-apply.ts +28 -0
  439. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-reflect-get.ts +28 -0
  440. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-runtime-typeof.ts +67 -0
  441. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-shape-in-symbol-names.ts +39 -0
  442. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-parameters.ts +83 -0
  443. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-returns.ts +115 -0
  444. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-type-aliases.ts +72 -0
  445. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unsafe-dictionary-type.ts +134 -0
  446. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-widen-then-assert.ts +366 -0
  447. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/require-safety-comment-for-type-assertion.ts +62 -0
  448. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/dictionary-types.ts +502 -0
  449. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/lexical-type-parameters.ts +60 -0
  450. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/reflect-method.ts +35 -0
  451. package/dist/extensions/pi-tool-display/tests/capabilities.test.ts +1 -1
  452. package/dist/extensions/pi-tool-display/tests/settings-inspector.test.ts +2 -2
  453. package/dist/extensions/pi-tool-display/tests/tool-overrides-mcp.test.ts +1 -1
  454. package/dist/modes/interactive/interactive-mode.js +7 -7
  455. package/dist/skills/workflow/SKILL.md +65 -50
  456. package/package.json +112 -110
  457. package/dist/extensions/enable-readonly-tools.test.ts +0 -63
  458. package/dist/extensions/enable-readonly-tools.ts +0 -24
  459. package/dist/extensions/model-prompt-injector/config.json +0 -16
  460. package/dist/extensions/model-prompt-injector/index.test.ts +0 -102
  461. package/dist/extensions/model-prompt-injector/index.ts +0 -148
  462. package/dist/extensions/pi-subagents/src/runs/shared/turn-budget.ts +0 -98
  463. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +0 -250
@@ -0,0 +1,468 @@
1
+ # Pi Hermes Memory — Roadmap
2
+
3
+ > From markdown files to a pluggable memory substrate for any Pi agent harness.
4
+
5
+ ## Where We Are (v0.1.0)
6
+
7
+ - Persistent memory via `MEMORY.md` + `USER.md` with `§` delimiter
8
+ - Real-time `memory` tool (add / replace / remove) for the LLM
9
+ - Content scanning: prompt injection, role hijacking, secret exfiltration, invisible unicode
10
+ - Background learning loop (every N turns via `pi.exec`)
11
+ - Session flush before compaction and shutdown
12
+ - `/memory-insights` command
13
+ - Frozen snapshot injection into system prompt
14
+ - 119 automated tests, 0 type errors
15
+ - Atomic writes (temp + rename)
16
+
17
+ ---
18
+
19
+ ## Hermes Agent Competitive Analysis
20
+
21
+ > Research conducted 2026-04-26. Sources: [hermes-agent.ai](https://hermes-agent.ai/blog/hermes-agent-memory-system), [GitHub README](https://github.com/NousResearch/Hermes-Agent), [official docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/memory), [skills docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/skills).
22
+
23
+ ### Hermes 3-Layer Memory Architecture
24
+
25
+ Hermes has three memory subsystems operating at different timescales:
26
+
27
+ | Layer | What | Capacity | Token Cost |
28
+ |---|---|---|---|
29
+ | **L1: Persistent Memory** (MEMORY.md + USER.md) | Curated facts, frozen snapshot injection | ~1,300 tokens total | Fixed per session |
30
+ | **L2: Episodic Memory** (Skills System) | Procedural memory — SKILL.md files created from experience, progressive disclosure | Unlimited | ~3K tokens for index, full content on demand |
31
+ | **L3: Session Search** (SQLite FTS5) | Full-text search over ALL conversations | Unlimited | On-demand only |
32
+
33
+ Plus **L4: External Providers** — Honcho, Mem0, Hindsight, etc. for deeper user modeling.
34
+
35
+ ### Gap Analysis: Hermes vs. Our v0.1
36
+
37
+ | Capability | Hermes | Our v0.1 | Priority |
38
+ |---|---|---|---|
39
+ | L1: Persistent Memory (MEMORY.md + USER.md) | ✅ | ✅ **Covered** | — |
40
+ | Frozen snapshot + prefix cache preservation | ✅ | ✅ **Covered** | — |
41
+ | Content scanning (injection, exfil, unicode) | ✅ | ✅ **Covered** | — |
42
+ | Background learning loop (periodic nudge) | ✅ | ✅ **Covered** | — |
43
+ | Session flush (compact + shutdown) | ✅ | ✅ **Covered** | — |
44
+ | **L2: Skills / Procedural Memory** | ✅ Auto-created after complex tasks, progressive disclosure, SKILL.md format | ❌ **MISSING** — our COMBINED_REVIEW_PROMPT already asks about skills but there's no skill tool | 🔴 **Critical** |
45
+ | **L3: Session Search** | ✅ SQLite FTS5 over all conversations, on-demand retrieval + summarization | ❌ **MISSING** — no cross-session recall at all | 🔴 **Critical** |
46
+ | **Auto-consolidation when memory full** | ✅ Agent merges/removes entries automatically | ❌ Returns error "Replace or remove existing entries" | 🟡 **High** |
47
+ | **Correction-triggered memory save** | ✅ Detects user corrections for immediate save | ❌ Only saves on nudge interval (every 10 turns) | 🟡 **High** |
48
+ | **Tool-call-aware nudge** | ✅ Self-evaluation every 15 tool calls | ❌ Only turn-count based | 🟡 **Medium** |
49
+ | **Progressive disclosure** | ✅ 3-level loading (index → full → references) | ❌ Not applicable (no skills yet) | 🟡 **Depends on Skills** |
50
+ | **Memory aging / staleness tracking** | ✅ Consolidation removes superseded entries | ❌ Entries live forever until manually removed | 🟠 **Medium** |
51
+ | **Context fencing** (memory-context XML tags) | ✅ Prevents prompt injection through stored memories | ❌ Raw injection | 🟠 **Medium** |
52
+ | **External providers** (Honcho, Mem0, etc.) | ✅ 8+ external provider plugins | ⏳ Planned for v0.4 | 🟢 **Deferred** |
53
+ | **Skills Hub / Community skills** | ✅ agentskills.io, search, install, audit | ❌ Not applicable (Pi has its own skill system) | ⚪ **N/A** |
54
+ | **Cross-platform messaging** | ✅ Telegram, Discord, Slack, WhatsApp, Signal | ❌ Not applicable (Pi extension, not standalone agent) | ⚪ **N/A** |
55
+
56
+ ### Key Painpoints Hermes Solves That We Must Address
57
+
58
+ 1. **"Goldfish memory"** — Every session starts from zero, user re-explains preferences, stack, conventions. Our L1 solves this. ✅
59
+
60
+ 2. **No procedural knowledge** — The agent forgets *how* it solved problems. After 60+ sessions, Hermes shows "anticipatory behavior" because it has skill documents from past experience. Our review prompt asks about skills but has nowhere to save them. 🔴
61
+
62
+ 3. **No cross-session recall** — "Did we discuss X last week?" is unanswerable. Hermes searches all past conversations via FTS5. We have zero session search. 🔴
63
+
64
+ 4. **Memory full = dead end** — When our memory hits capacity, we return an error and force the user/agent to manually fix it. Hermes auto-consolidates. 🟡
65
+
66
+ 5. **Missed corrections** — User says "no, don't do that" and the agent only saves it 8 turns later at the next nudge. Hermes detects corrections immediately. 🟡
67
+
68
+ ---
69
+
70
+ ## Revised Roadmap
71
+
72
+ The roadmap is restructured based on the Hermes gap analysis. The biggest missing pieces are **Skills/Procedural Memory** and **Smart Curation** (auto-consolidation, correction detection). Session Search and External Providers stay in later phases.
73
+
74
+ ```mermaid
75
+ graph LR
76
+ subgraph "v0.1 ✅"
77
+ A[L1: Persistent Memory]
78
+ B[Content Scanner]
79
+ C[Background Review]
80
+ D[Session Flush]
81
+ end
82
+
83
+ subgraph "v0.2 ✅"
84
+ E[Skill Tool]
85
+ F[Auto-Consolidation]
86
+ G[Correction Detection]
87
+ H[Tool-Call-Aware Nudge]
88
+ end
89
+
90
+ subgraph "v0.3 — Next"
91
+ I[Memory Interview]
92
+ J[Context Fencing]
93
+ K[Memory Aging]
94
+ L[Project Memory Polish]
95
+ end
96
+
97
+ subgraph "v0.4"
98
+ M[MemoryBackend Interface]
99
+ N[SQLite + Session Search]
100
+ end
101
+
102
+ subgraph "v0.5"
103
+ O[ExternalSync Interface]
104
+ P[Mem0 / Honcho]
105
+ end
106
+
107
+ A --> E
108
+ C --> F
109
+ C --> G
110
+ C --> H
111
+ A --> J
112
+ F --> K
113
+ A --> I
114
+ K --> M
115
+ M --> O
116
+ O --> P
117
+ ```
118
+
119
+ ---
120
+
121
+ ## v0.2.0 ✅ — Skills + Smart Curation
122
+
123
+ **Goal**: Close the two biggest gaps from the Hermes analysis — procedural memory (skills) and intelligent memory management (auto-consolidation, correction detection, tool-call-aware nudges).
124
+
125
+ **Why this before SQLite/Session Search**: Our `COMBINED_REVIEW_PROMPT` already asks the agent to save skills — but there's no skill tool. The review prompt is literally asking the agent to do something it can't do. Fixing this is the single highest-leverage change. Auto-consolidation and correction detection are small, high-impact additions to the existing curation system.
126
+
127
+ ### Epic 1: Skill Tool + Procedural Memory
128
+
129
+ Hermes creates skills after complex tasks (5+ tool calls). Skills are SKILL.md files in `~/.hermes/skills/` with progressive disclosure. We adapt this for Pi's existing skill infrastructure at `~/.selesai/agent/skills/`.
130
+
131
+ **Key insight**: Pi already has a skill system. Our skill tool should write SKILL.md files that are compatible with Pi's skill discovery. This means our skills are immediately usable as Pi slash commands — no separate ecosystem needed.
132
+
133
+ - [ ] `skill` tool — register via `pi.registerTool()` with actions: `create`, `patch`, `edit`, `delete`
134
+ - [x] Skill storage split by scope: global skills in `~/.selesai/agent/skills/<slug>/SKILL.md`, project skills in `~/.selesai/agent/projects-memory/<project>/skills/<slug>/SKILL.md` (discovered via `resources_discover`)
135
+ - [ ] SKILL.md format — compatible with Pi's SKILL.md spec (frontmatter + markdown body)
136
+ - [ ] Progressive disclosure — skill index (name + description only) injected into system prompt, full content loaded on demand via `skill_view` action
137
+ - [ ] Auto-trigger after complex tasks — track tool calls per turn, trigger skill extraction at 5+ tool calls
138
+ - [ ] Background skill review — extend `COMBINED_REVIEW_PROMPT` to actually call the `skill` tool (currently it asks about skills but can't save them)
139
+ - [ ] Security — skill writes go through the same content scanner as memory writes
140
+ - [ ] `/memory-skills` command — list all agent-created skills with usage stats
141
+
142
+ **Reference**: Hermes `skill_manage` tool and `~/.hermes/skills/` directory structure. See [Hermes Skills docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/skills).
143
+
144
+ ### Epic 2: Auto-Consolidation
145
+
146
+ When Hermes memory hits capacity, it automatically merges related entries and removes superseded ones. Our extension currently returns an error. This fixes the "memory full" dead end.
147
+
148
+ - [ ] When `add()` would exceed char limit, trigger auto-consolidation instead of returning error
149
+ - [ ] Consolidation via `pi.exec()` — spawn a one-shot process with a consolidation prompt
150
+ - [ ] Consolidation prompt — "Memory is at capacity. Merge related entries, remove outdated ones, keep the most important facts. Use memory_add, memory_replace, or memory_remove to make changes."
151
+ - [ ] After consolidation, retry the original `add()`
152
+ - [ ] Config: `autoConsolidate: boolean` (default: true)
153
+ - [ ] `/memory-consolidate` command — manual consolidation trigger
154
+
155
+ **Reference**: Hermes memory compression behavior described in [hermes-agent.ai memory blog](https://hermes-agent.ai/blog/hermes-agent-memory-system).
156
+
157
+ ### Epic 3: Correction Detection + Immediate Save
158
+
159
+ Hermes detects user corrections and saves them immediately. Our extension only saves on the nudge interval (every 10 turns). User corrections are the most valuable memories — every missed correction is a repeated mistake.
160
+
161
+ - [ ] Correction detector — scan user messages for patterns: "no,", "wrong,", "actually,", "don't do that", "stop", "not like that", "I said..."
162
+ - [ ] On detection, trigger an immediate memory save prompt via `pi.exec()`
163
+ - [ ] Config: `correctionDetection: boolean` (default: true)
164
+ - [ ] Rate limit — max 1 correction save per 3 turns (avoid over-triggering on multi-turn corrections)
165
+
166
+ **Reference**: Hermes correction patterns inferred from the `MEMORY_TOOL_DESCRIPTION` priority list: "User preferences and corrections > environment facts > procedural knowledge."
167
+
168
+ ### Epic 4: Tool-Call-Aware Nudge
169
+
170
+ Hermes runs a self-evaluation checkpoint every 15 tool calls. Our nudge is purely turn-count based. Complex tasks with many tool calls generate more valuable memories than simple conversations.
171
+
172
+ - [ ] Track tool call count per turn (via `tool_end` event or similar)
173
+ - [ ] Trigger background review when EITHER `nudgeInterval` turns OR `nudgeToolCalls` (default: 15) tool calls are reached
174
+ - [ ] Weight the review prompt based on complexity — more tool calls = deeper review
175
+ - [ ] Config: `nudgeToolCalls: number` (default: 15)
176
+
177
+ **Reference**: Hermes self-evaluation checkpoint described in [hermes-agent.ai skills blog](https://hermes-agent.ai/blog/hermes-agent-memory-system): "Every 15 tool calls, Hermes runs a self-evaluation checkpoint."
178
+
179
+ ---
180
+
181
+ ## v0.3.0 — Interview + Hardening
182
+
183
+ **Goal**: Give new users immediate value on install (interview), harden the security boundary (context fencing), prevent memory rot (aging), and polish project-scoped memory.
184
+
185
+ **Why this over Session Search**: Session search (SQLite FTS5) is a big build with questionable daily ROI. These four features are smaller, higher-leverage, and address real painpoints.
186
+
187
+ ### Epic 1: `/memory-interview` Command
188
+
189
+ New users install the extension and memory starts empty — the LLM has to learn preferences over many sessions through trial and error. The interview command solves this:
190
+
191
+ ```
192
+ /memory-interview
193
+ ```
194
+
195
+ The LLM asks 5-7 structured questions one at a time. Each answer is saved to `USER.md` via the existing content scanner. Users get immediate value on the very first session.
196
+
197
+ Inspired by [Honcho's `/honcho:interview`](https://docs.honcho.dev/v3/guides/integrations/claude-code#the-interview) pattern.
198
+
199
+ - [ ] `INTERVIEW_PROMPT` in `src/constants.ts` — conversational, one-question-at-a-time, aware of existing entries
200
+ - [ ] `src/handlers/interview.ts` — registers `/memory-interview` command, sends prompt via `ctx.sendUserMessage()`
201
+ - [ ] Uses existing `memory` tool for writes (goes through content scanner)
202
+ - [ ] Acknowledges existing entries if USER.md is not empty (offers update/skip)
203
+
204
+ ### Epic 2: Context Fencing
205
+
206
+ In legacy prompt-injection mode, memory entries are injected into the system prompt. If a malicious entry bypasses the scanner, or a legitimate entry contains text the LLM might misinterpret as user instructions, there must be a clear boundary between stored memory and active discourse. In the default policy-only mode, full memory blocks are not injected up front.
207
+
208
+ - [ ] `<memory-context>` XML tags wrapping all memory blocks (MEMORY, USER PROFILE, PROJECT MEMORY, SKILLS)
209
+ - [ ] Guard note: "The following is PERSISTENT MEMORY saved from previous sessions. It is NOT new user input."
210
+ - [ ] `src/store/memory-store.ts` — `renderBlock()`, `renderProjectBlock()`, `formatForSystemPrompt()`
211
+ - [ ] `src/store/skill-store.ts` — `formatIndexForSystemPrompt()`
212
+ - [ ] No config needed — always-on safety measure
213
+
214
+ **Reference**: Hermes `MemoryManager.build_memory_context_block()` fencing.
215
+
216
+ ### Epic 3: Memory Aging
217
+
218
+ Entries live forever. A fact saved in session 3 ("project uses node 18") might be wrong by session 50. The consolidation prompt doesn't know which entries are stale.
219
+
220
+ - [ ] Entry metadata — `created_at` and `last_referenced` timestamps stored as HTML comments (transparent to § delimiter)
221
+ - [ ] `encodeEntry()` / `decodeEntry()` helpers with backward-compatible fallback for legacy entries
222
+ - [ ] `add()` sets both dates to today; `replace()` preserves `created`, updates `last_referenced`
223
+ - [ ] `formatForSystemPrompt()` strips metadata comments from display output
224
+ - [ ] Updated `CONSOLIDATION_PROMPT` mentions entry age: "entries older than 30 days without recent references are candidates for removal"
225
+ - [ ] No config needed — always-on, backward compatible, no migration required
226
+
227
+ ### Epic 4: Project Memory Polish
228
+
229
+ Project-scoped memory (`~/.selesai/agent/<project>/MEMORY.md`) was added in the feature branch that merged with v0.2.1. It works but needs cleanup, testing, and documentation.
230
+
231
+ - [ ] `/memory-insights` — polished project section with separator, usage stats, file paths
232
+ - [ ] `/memory-switch-project` — manually switch active project memory (auto-detected from cwd at load)
233
+ - [ ] `src/index.ts` — extract project detection into helper function, handle edge cases
234
+ - [ ] Test coverage for project memory: null store, system prompt injection, insights display
235
+ - [ ] README: "Two-Tier Memory Architecture" section with diagram
236
+
237
+ ### Epic 5: Documentation & Release
238
+
239
+ - [ ] Update README, ROADMAP, version bump, tag, publish
240
+
241
+ **Full plan**: `docs/0.3/PLAN.md` · **Tasks**: `docs/0.3/TASKS.md`
242
+
243
+ ---
244
+
245
+ ## v0.4.0 — SQLite FTS5 Session Search + Hybrid Memory
246
+
247
+ **Goal**: SQLite backend with FTS5 full-text search over all past conversations. Extended memory store with unlimited capacity. Increased core memory limits.
248
+
249
+ **Why now**: Power users hit the 2,200-char limit and lose important knowledge. Past sessions are rich with context but unreachable. Hybrid memory solves both — compact policy context by default, legacy full injection as an opt-in, and deep knowledge searchable on demand.
250
+
251
+ **Full plan**: `docs/0.4/PLAN.md` · **Tasks**: `docs/0.4/TASKS.md`
252
+
253
+ ### Architecture
254
+
255
+ ```
256
+ Session starts
257
+ ↓
258
+ ┌─────────────────────────────────────────────────┐
259
+ │ System Prompt (default policy-only) │
260
+ │ • Compact memory policy │
261
+ │ • Explains when to use memory_search │
262
+ │ • Full memory blocks only in legacy-inject mode │
263
+ └─────────────────────────────────────────────────┘
264
+
265
+ Agent has access to tools:
266
+ memory_search("prisma migration")
267
+ → Searches SQLite memories table (global + project)
268
+ → Returns top-10 relevant entries
269
+
270
+ session_search("how we fixed the test hang")
271
+ → Searches session history via FTS5
272
+ → Returns relevant conversation snippets
273
+ ```
274
+
275
+ ### Data Model
276
+
277
+ - `~/.selesai/agent/memory/sessions.db` — single SQLite file
278
+ - `sessions` + `messages` tables — all past conversations indexed
279
+ - `message_fts` FTS5 virtual table — full-text search across messages
280
+ - `memories` table — extended memory entries (unlimited, searchable)
281
+ - `memory_fts` FTS5 virtual table — full-text search across memories
282
+
283
+ ### Deliverables
284
+
285
+ - [ ] `better-sqlite3` dependency — SQLite with FTS5
286
+ - [ ] `src/store/db.ts` — DatabaseManager (lazy init, WAL mode, auto-create tables)
287
+ - [ ] `src/store/session-parser.ts` — JSONL parser for Pi session files
288
+ - [ ] `src/store/session-indexer.ts` — index sessions + messages into SQLite
289
+ - [ ] `src/store/session-search.ts` — FTS5 search across session history
290
+ - [ ] `src/store/sqlite-memory-store.ts` — extended memory store (unlimited, searchable)
291
+ - [ ] `session_search` tool — agent queries past conversations
292
+ - [ ] `memory_search` tool — agent queries extended memories
293
+ - [ ] `/memory-index-sessions` command — bulk import existing sessions
294
+ - [ ] Auto-index session on shutdown
295
+ - [ ] Char limits: MEMORY.md 2,200 → 5,000, USER.md 1,375 → 5,000, project 2,200 → 5,000
296
+ - [ ] Config: `sessionSearchEnabled: boolean` (default: true)
297
+ - [ ] Config: `sessionRetentionDays: number` (default: 90)
298
+
299
+ ### What Does NOT Change
300
+
301
+ - Content scanner (guards all writes)
302
+ - Memory tool interface (add/replace/remove actions)
303
+ - Legacy system prompt injection remains available as an opt-in
304
+ - Skills system (unchanged)
305
+ - Background review, correction detection, auto-consolidation (unchanged)
306
+
307
+ ---
308
+
309
+ ## v0.5.0 — External Sync
310
+
311
+ **Goal**: Run a local backend (SQLite) as the source of truth, with optional external sync (Mem0 or Honcho) that mirrors writes and supplements search. Based on the [Hermes MemoryManager pattern](https://github.com/NousResearch/hermes-agent/blob/main/agent/memory_manager.py).
312
+
313
+ ### Architecture: Orchestrator + Sync Mirror
314
+
315
+ ```
316
+ memory tool call (add/replace/remove/search)
317
+ ↓
318
+ Content Scanner (always runs first, local)
319
+ ↓ blocked? → return error to LLM
320
+ ↓ passed
321
+ MemoryOrchestrator.write()
322
+ ↓
323
+ ├── BuiltinBackend.add() ← always runs (source of truth)
324
+ │
325
+ └── ExternalSync.onWrite() ← if configured (Mem0 or Honcho)
326
+ ├── Mirror the write to external API
327
+ └── If external fails → log warning, don't block
328
+
329
+ MemoryOrchestrator.search()
330
+ ↓
331
+ ├── BuiltinBackend.search() ← always runs
332
+ └── ExternalSync.search() ← supplementary results (if configured)
333
+ ↓
334
+ Merge + deduplicate → return to LLM
335
+ ```
336
+
337
+ ### Deliverables
338
+
339
+ - [ ] `MemoryOrchestrator` — wraps `MemoryBackend` + optional `ExternalSync`
340
+ - [ ] `ExternalSync` interface in `src/types.ts`
341
+ - [ ] `Mem0Sync` — implements `ExternalSync` using Mem0 Node.js SDK
342
+ - [ ] `HonchoSync` — implements `ExternalSync` using Honcho API
343
+ - [ ] `onWrite()` mirroring — builtin writes propagate to external sync
344
+ - [ ] One-external-only enforcement — same as Hermes, prevents conflicts
345
+ - [ ] Offline fallback — if external sync `isAvailable()` returns false, skip silently
346
+ - [ ] Config: `"externalSync": "mem0" | "honcho" | "none"` with credentials
347
+ - [ ] Data export — `memory export` command to dump all entries as JSON
348
+
349
+ ---
350
+
351
+ ## v0.7.0 — Token-Aware Memory Policy
352
+
353
+ **Goal**: Replace full memory prompt injection with a policy-only system prompt. The system prompt explains how memory should be searched and interpreted, but does not include the full memory dump by default.
354
+
355
+ **Why now**: Full Markdown injection turns memory into a permanent token tax. Users with large memory files, MCP servers, repo context, and long coding sessions can spend thousands of tokens before the task starts. SQLite search already exists, so the safest first step is to teach the agent when to call `memory_search` instead of injecting all memory up front.
356
+
357
+ **Full plan**: `docs/0.7/PLAN.md` · **Tasks**: `docs/0.7/TASKS.md`
358
+
359
+ ### Target Architecture
360
+
361
+ ```
362
+ System prompt
363
+ -> memory policy only, with accepted targets/categories
364
+
365
+ Agent needs durable context
366
+ -> calls memory_search with target/category/project filters
367
+ -> uses memory results as context, not authority
368
+
369
+ Future phase
370
+ -> automatic router + ranker + graph-boosted retrieval
371
+ ```
372
+
373
+ ### Deliverables
374
+
375
+ - [x] `MEMORY_POLICY_PROMPT` — expanded policy-only prompt block
376
+ - [x] Config: `memoryMode: "policy-only" | "legacy-inject"`
377
+ - [x] Default: no full Markdown memory injection
378
+ - [x] Legacy compatibility: opt into old full-injection behavior
379
+ - [x] Policy documents memory write targets: `user`, `memory`, `project`, `failure`
380
+ - [x] Policy documents `memory_search` filters: `target` = `memory`/`user`/`failure`, plus `project` and `category`
381
+ - [x] Policy documents accepted categories: `failure`, `correction`, `insight`, `preference`, `convention`, `tool-quirk`
382
+ - [x] `/memory-preview-context` shows policy-only context in default mode
383
+
384
+ ### What Changes
385
+
386
+ - Full Markdown memory is no longer injected by default.
387
+ - Memory content is treated as untrusted context, not instructions.
388
+ - Current user request, repo files, and tool outputs override retrieved memory.
389
+ - Markdown remains human-readable storage/export, but SQLite becomes the runtime retrieval path.
390
+
391
+ ---
392
+
393
+ ## v1.0.0 — Production Memory Substrate
394
+
395
+ **Goal**: The memory layer that any Pi agent harness can build on top of.
396
+
397
+ ### Deliverables
398
+
399
+ - [ ] Smart consolidation — structured extraction with typed output (preferences, patterns, corrections, tool prefs)
400
+ - [ ] Confidence scoring — entries gain confidence over time as they're referenced, decay if never used
401
+ - [ ] Multi-agent memory — shared context between agents, scoping rules (per-user, per-project, global)
402
+ - [ ] Extensible scanner rules — users can add custom patterns to the content scanner
403
+ - [ ] `/memory-insights` upgrade — show backend type, entry count, storage stats, last sync time
404
+ - [ ] Audit log — track all memory operations with timestamps
405
+ - [ ] Import/export — migrate between backends without data loss
406
+ - [ ] Benchmarks — context injection latency, search relevance, token budget utilization
407
+
408
+ ---
409
+
410
+ ## Design Principles (Unchanging)
411
+
412
+ These hold across all versions:
413
+
414
+ 1. **Security first** — Content scanning before any write, regardless of backend. No exceptions.
415
+ 2. **Real-time saves** — The LLM can save memories mid-conversation via tool calls, not just at session end.
416
+ 3. **Token-aware retrieval** — The system prompt should describe memory behavior. Full memory injection is legacy opt-in; default runtime behavior retrieves only relevant memory under a strict token budget.
417
+ 4. **Crash safety** — Atomic writes for markdown, WAL mode for SQLite, graceful degradation for external backends.
418
+ 5. **Zero-config start** — Install and it works with sensible defaults. Configuration is for power users.
419
+ 6. **Backwards compatible** — Every new version is a drop-in upgrade. No breaking changes to the tool interface or config format without a major version bump.
420
+ 7. **Hermes-compatible data format** — `§` delimiter, MEMORY.md/USER.md structure, so users migrating from Hermes keep their data.
421
+
422
+ ---
423
+
424
+ ## Version Timeline
425
+
426
+ ```mermaid
427
+ gantt
428
+ title Pi Hermes Memory — Release Timeline
429
+ dateFormat YYYY-MM-DD
430
+ axisFormat %b %Y
431
+
432
+ section v0.1.0 ✅
433
+ Core memory + scanner + tool + review + flush :done, v01, 2026-04-20, 5d
434
+
435
+ section v0.2.0 ✅
436
+ Skill tool + procedural memory :done, v02a, 2026-04-27, 5d
437
+ Auto-consolidation :done, v02b, after v02a, 3d
438
+ Correction detection + immediate save :done, v02c, after v02b, 3d
439
+ Tool-call-aware nudge :done, v02d, after v02c, 2d
440
+ Project memory + review fixes :done, v02e, after v02d, 2d
441
+
442
+ section v0.3.0 — Next
443
+ Memory interview command :v03a, after v02e, 2d
444
+ Context fencing :v03b, after v03a, 2d
445
+ Memory aging :v03c, after v03b, 3d
446
+ Project memory polish :v03d, after v03c, 2d
447
+
448
+ section v0.4.0
449
+ SQLite FTS5 + session search + hybrid memory :v04a, after v03d, 10d
450
+
451
+ section v0.5.0
452
+ ExternalSync + Mem0 / Honcho :v05a, after v04a, 10d
453
+
454
+ section v0.7.0
455
+ Token-aware graph memory retrieval :v07a, after v05a, 10d
456
+
457
+ section v1.0.0
458
+ Smart consolidation + confidence :v1a, after v07a, 10d
459
+ Multi-agent memory + audit log :v1b, after v1a, 10d
460
+ ```
461
+
462
+ ---
463
+
464
+ ## How to Contribute
465
+
466
+ See [TASKS.md](0.1/TASKS.md) for current v0.1 work. Pick an unchecked item, mark it `[~]`, implement, mark it `[x]` with the commit hash.
467
+
468
+ For v0.2+ items, see [v0.2/TASKS.md](0.2/TASKS.md) once created. Open an issue with the version tag and describe what you want to work on.
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 2057.18px; background-color: white;" viewBox="0 0 2057.1796875 797" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-subGraph3" data-look="classic"><rect style="" x="796.6015625" y="460" width="1252.578125" height="329"/><g class="cluster-label" transform="translate(1381.7734375, 460)"><foreignObject width="82.234375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>On Demand</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-subGraph2" data-look="classic"><rect style="" x="1161.765625" y="234" width="866.03125" height="152"/><g class="cluster-label" transform="translate(1465.625, 234)"><foreignObject width="258.3125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>System Prompt (default policy-only)</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-subGraph1" data-look="classic"><rect style="" x="22.99609375" y="661" width="753.60546875" height="128"/><g class="cluster-label" transform="translate(280.814453125, 661)"><foreignObject width="237.96875" 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>Search Store (SQLite sessions.db)</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-subGraph0" data-look="classic"><rect style="" x="22.99609375" y="8" width="2021.09765625" height="176"/><g class="cluster-label" transform="translate(905.388671875, 8)"><foreignObject width="256.3125" 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>Core Persistent Storage (Markdown)</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M1401.414,345.808L1377.095,352.507C1352.776,359.206,1304.138,372.603,1279.819,385.468C1255.5,398.333,1255.5,410.667,1255.5,423C1255.5,435.333,1255.5,447.667,1255.5,459.333C1255.5,471,1255.5,482,1255.5,487.5L1255.5,493" id="my-svg-L_POLICY_MSEARCH_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_POLICY_MSEARCH_0" data-points="W3sieCI6MTQwMS40MTQwNjI1LCJ5IjozNDUuODA4MjUwOTgzOTQ1NH0seyJ4IjoxMjU1LjUsInkiOjM4Nn0seyJ4IjoxMjU1LjUsInkiOjQyM30seyJ4IjoxMjU1LjUsInkiOjQ2MH0seyJ4IjoxMjU1LjUsInkiOjQ5N31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1531.414,361L1531.414,365.167C1531.414,369.333,1531.414,377.667,1531.414,388C1531.414,398.333,1531.414,410.667,1531.414,423C1531.414,435.333,1531.414,447.667,1531.414,459.333C1531.414,471,1531.414,482,1531.414,487.5L1531.414,493" id="my-svg-L_POLICY_SSEARCH_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_POLICY_SSEARCH_0" data-points="W3sieCI6MTUzMS40MTQwNjI1LCJ5IjozNjF9LHsieCI6MTUzMS40MTQwNjI1LCJ5IjozODZ9LHsieCI6MTUzMS40MTQwNjI1LCJ5Ijo0MjN9LHsieCI6MTUzMS40MTQwNjI1LCJ5Ijo0NjB9LHsieCI6MTUzMS40MTQwNjI1LCJ5Ijo0OTd9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1661.414,340.646L1693.479,348.205C1725.544,355.764,1789.674,370.882,1821.74,384.608C1853.805,398.333,1853.805,410.667,1853.805,423C1853.805,435.333,1853.805,447.667,1853.805,459.333C1853.805,471,1853.805,482,1853.805,487.5L1853.805,493" id="my-svg-L_POLICY_SKILLTOOL_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_POLICY_SKILLTOOL_0" data-points="W3sieCI6MTY2MS40MTQwNjI1LCJ5IjozNDAuNjQ2MDUyNDQwMjY1Nn0seyJ4IjoxODUzLjgwNDY4NzUsInkiOjM4Nn0seyJ4IjoxODUzLjgwNDY4NzUsInkiOjQyM30seyJ4IjoxODUzLjgwNDY4NzUsInkiOjQ2MH0seyJ4IjoxODUzLjgwNDY4NzUsInkiOjQ5N31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M588.32,102.925L739.387,116.437C890.454,129.95,1192.589,156.975,1343.656,174.654C1494.723,192.333,1494.723,200.667,1494.723,209C1494.723,217.333,1494.723,225.667,1533.749,237.891C1572.775,250.116,1650.827,266.232,1689.853,274.291L1728.88,282.349" id="my-svg-L_MEM_LEGACY_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MEM_LEGACY_0" data-points="W3sieCI6NTg4LjMyMDMxMjUsInkiOjEwMi45MjQ1MDA4MDc5OTgxOX0seyJ4IjoxNDk0LjcyMjY1NjI1LCJ5IjoxODR9LHsieCI6MTQ5NC43MjI2NTYyNSwieSI6MjA5fSx7IngiOjE0OTQuNzIyNjU2MjUsInkiOjIzNH0seyJ4IjoxNzMyLjc5Njg3NSwieSI6MjgzLjE1NzU4NzUyNzk5MDl9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M785.422,103.204L922.012,116.67C1058.603,130.136,1331.784,157.068,1468.374,174.701C1604.965,192.333,1604.965,200.667,1604.965,209C1604.965,217.333,1604.965,225.667,1625.631,235.925C1646.297,246.183,1687.628,258.366,1708.294,264.458L1728.96,270.55" id="my-svg-L_USR_LEGACY_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_USR_LEGACY_0" data-points="W3sieCI6Nzg1LjQyMTg3NSwieSI6MTAzLjIwMzc3NzUzMTczODM1fSx7IngiOjE2MDQuOTY0ODQzNzUsInkiOjE4NH0seyJ4IjoxNjA0Ljk2NDg0Mzc1LCJ5IjoyMDl9LHsieCI6MTYwNC45NjQ4NDM3NSwieSI6MjM0fSx7IngiOjE3MzIuNzk2ODc1LCJ5IjoyNzEuNjgwNDc4NzUxNjA5N31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1309.094,115.857L1383.445,127.214C1457.797,138.572,1606.5,161.286,1680.852,176.81C1755.203,192.333,1755.203,200.667,1755.203,209C1755.203,217.333,1755.203,225.667,1760.557,233.615C1765.912,241.564,1776.62,249.128,1781.974,252.91L1787.329,256.692" id="my-svg-L_FAIL_LEGACY_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_FAIL_LEGACY_0" data-points="W3sieCI6MTMwOS4wOTM3NSwieSI6MTE1Ljg1NzM0MDQ1NzI2OTk0fSx7IngiOjE3NTUuMjAzMTI1LCJ5IjoxODR9LHsieCI6MTc1NS4yMDMxMjUsInkiOjIwOX0seyJ4IjoxNzU1LjIwMzEyNSwieSI6MjM0fSx7IngiOjE3OTAuNTk1ODA1OTIxMDUyNywieSI6MjU5fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1906.5,159L1906.5,163.167C1906.5,167.333,1906.5,175.667,1906.5,184C1906.5,192.333,1906.5,200.667,1906.5,209C1906.5,217.333,1906.5,225.667,1904.436,233.422C1902.373,241.177,1898.245,248.355,1896.182,251.944L1894.118,255.532" id="my-svg-L_SKL_LEGACY_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SKL_LEGACY_0" data-points="W3sieCI6MTkwNi41LCJ5IjoxNTl9LHsieCI6MTkwNi41LCJ5IjoxODR9LHsieCI6MTkwNi41LCJ5IjoyMDl9LHsieCI6MTkwNi41LCJ5IjoyMzR9LHsieCI6MTg5Mi4xMjM5NzIwMzk0NzM4LCJ5IjoyNTl9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1853.805,575L1853.805,583.167C1853.805,591.333,1853.805,607.667,1853.805,622C1853.805,636.333,1853.805,648.667,1853.805,658.333C1853.805,668,1853.805,675,1853.805,678.5L1853.805,682" id="my-svg-L_SKILLTOOL_FULL_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SKILLTOOL_FULL_0" data-points="W3sieCI6MTg1My44MDQ2ODc1LCJ5Ijo1NzV9LHsieCI6MTg1My44MDQ2ODc1LCJ5Ijo2MjR9LHsieCI6MTg1My44MDQ2ODc1LCJ5Ijo2NjF9LHsieCI6MTg1My44MDQ2ODc1LCJ5Ijo2ODZ9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M433.492,112.547L377.777,124.456C322.063,136.365,210.633,160.182,154.918,176.258C99.203,192.333,99.203,200.667,99.203,209C99.203,217.333,99.203,225.667,99.203,242.5C99.203,259.333,99.203,284.667,99.203,310C99.203,335.333,99.203,360.667,99.203,379.5C99.203,398.333,99.203,410.667,99.203,423C99.203,435.333,99.203,447.667,99.203,466.5C99.203,485.333,99.203,510.667,99.203,538C99.203,565.333,99.203,594.667,99.203,615.5C99.203,636.333,99.203,648.667,116.53,659.883C133.857,671.099,168.51,681.199,185.837,686.249L203.164,691.298" id="my-svg-L_MEM_SQM_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MEM_SQM_0" data-points="W3sieCI6NDMzLjQ5MjE4NzUsInkiOjExMi41NDY5NjU3MjkyNDk2OX0seyJ4Ijo5OS4yMDMxMjUsInkiOjE4NH0seyJ4Ijo5OS4yMDMxMjUsInkiOjIwOX0seyJ4Ijo5OS4yMDMxMjUsInkiOjIzNH0seyJ4Ijo5OS4yMDMxMjUsInkiOjMxMH0seyJ4Ijo5OS4yMDMxMjUsInkiOjM4Nn0seyJ4Ijo5OS4yMDMxMjUsInkiOjQyM30seyJ4Ijo5OS4yMDMxMjUsInkiOjQ2MH0seyJ4Ijo5OS4yMDMxMjUsInkiOjUzNn0seyJ4Ijo5OS4yMDMxMjUsInkiOjYyNH0seyJ4Ijo5OS4yMDMxMjUsInkiOjY2MX0seyJ4IjoyMDcuMDAzOTA2MjUsInkiOjY5Mi40MTc2ODUwNDE4OTEyfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M639.281,111.655L583.003,123.713C526.724,135.77,414.167,159.885,357.888,176.109C301.609,192.333,301.609,200.667,301.609,209C301.609,217.333,301.609,225.667,301.609,242.5C301.609,259.333,301.609,284.667,301.609,310C301.609,335.333,301.609,360.667,301.609,379.5C301.609,398.333,301.609,410.667,301.609,423C301.609,435.333,301.609,447.667,301.609,466.5C301.609,485.333,301.609,510.667,301.609,538C301.609,565.333,301.609,594.667,301.609,615.5C301.609,636.333,301.609,648.667,302.556,658.356C303.502,668.046,305.395,675.091,306.341,678.614L307.287,682.137" id="my-svg-L_USR_SQM_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_USR_SQM_0" data-points="W3sieCI6NjM5LjI4MTI1LCJ5IjoxMTEuNjU1MDQ1MTczNTYxNTh9LHsieCI6MzAxLjYwOTM3NSwieSI6MTg0fSx7IngiOjMwMS42MDkzNzUsInkiOjIwOX0seyJ4IjozMDEuNjA5Mzc1LCJ5IjoyMzR9LHsieCI6MzAxLjYwOTM3NSwieSI6MzEwfSx7IngiOjMwMS42MDkzNzUsInkiOjM4Nn0seyJ4IjozMDEuNjA5Mzc1LCJ5Ijo0MjN9LHsieCI6MzAxLjYwOTM3NSwieSI6NDYwfSx7IngiOjMwMS42MDkzNzUsInkiOjUzNn0seyJ4IjozMDEuNjA5Mzc1LCJ5Ijo2MjR9LHsieCI6MzAxLjYwOTM3NSwieSI6NjYxfSx7IngiOjMwOC4zMjQ3NjgwNjY0MDYyNSwieSI6Njg2fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1049.094,113.607L962.469,125.339C875.845,137.071,702.596,160.536,615.972,176.434C529.348,192.333,529.348,200.667,529.348,209C529.348,217.333,529.348,225.667,529.348,242.5C529.348,259.333,529.348,284.667,529.348,310C529.348,335.333,529.348,360.667,529.348,379.5C529.348,398.333,529.348,410.667,529.348,423C529.348,435.333,529.348,447.667,529.348,466.5C529.348,485.333,529.348,510.667,529.348,538C529.348,565.333,529.348,594.667,529.348,615.5C529.348,636.333,529.348,648.667,513.527,659.642C497.707,670.618,466.066,680.236,450.245,685.045L434.425,689.854" id="my-svg-L_FAIL_SQM_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_FAIL_SQM_0" data-points="W3sieCI6MTA0OS4wOTM3NSwieSI6MTEzLjYwNjg3NzY4NjU5NjMzfSx7IngiOjUyOS4zNDc2NTYyNSwieSI6MTg0fSx7IngiOjUyOS4zNDc2NTYyNSwieSI6MjA5fSx7IngiOjUyOS4zNDc2NTYyNSwieSI6MjM0fSx7IngiOjUyOS4zNDc2NTYyNSwieSI6MzEwfSx7IngiOjUyOS4zNDc2NTYyNSwieSI6Mzg2fSx7IngiOjUyOS4zNDc2NTYyNSwieSI6NDIzfSx7IngiOjUyOS4zNDc2NTYyNSwieSI6NDYwfSx7IngiOjUyOS4zNDc2NTYyNSwieSI6NTM2fSx7IngiOjUyOS4zNDc2NTYyNSwieSI6NjI0fSx7IngiOjUyOS4zNDc2NTYyNSwieSI6NjYxfSx7IngiOjQzMC41OTc2NTYyNSwieSI6NjkxLjAxNzA2ODY0NTY0fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M961.602,587L961.602,593.167C961.602,599.333,961.602,611.667,961.602,624C961.602,636.333,961.602,648.667,873.764,663.579C785.927,678.491,610.253,695.982,522.415,704.727L434.578,713.473" id="my-svg-L_BACKFILL_SQM_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_BACKFILL_SQM_0" data-points="W3sieCI6OTYxLjYwMTU2MjUsInkiOjU4N30seyJ4Ijo5NjEuNjAxNTYyNSwieSI6NjI0fSx7IngiOjk2MS42MDE1NjI1LCJ5Ijo2NjF9LHsieCI6NDMwLjU5NzY1NjI1LCJ5Ijo3MTMuODY5MDI0MTA3MTQ4M31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1255.5,575L1255.5,583.167C1255.5,591.333,1255.5,607.667,1255.5,622C1255.5,636.333,1255.5,648.667,1118.681,664.181C981.863,679.696,708.226,698.393,571.407,707.741L434.588,717.089" id="my-svg-L_MSEARCH_SQM_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_MSEARCH_SQM_0" data-points="W3sieCI6MTI1NS41LCJ5Ijo1NzV9LHsieCI6MTI1NS41LCJ5Ijo2MjR9LHsieCI6MTI1NS41LCJ5Ijo2NjF9LHsieCI6NDMwLjU5NzY1NjI1LCJ5Ijo3MTcuMzYxNDc1NDI2OTI3Mn1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1531.414,575L1531.414,583.167C1531.414,591.333,1531.414,607.667,1531.414,622C1531.414,636.333,1531.414,648.667,1400.444,664.03C1269.473,679.392,1007.533,697.785,876.562,706.981L745.592,716.177" id="my-svg-L_SSEARCH_SQS_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_SSEARCH_SQS_0" data-points="W3sieCI6MTUzMS40MTQwNjI1LCJ5Ijo1NzV9LHsieCI6MTUzMS40MTQwNjI1LCJ5Ijo2MjR9LHsieCI6MTUzMS40MTQwNjI1LCJ5Ijo2NjF9LHsieCI6NzQxLjYwMTU2MjUsInkiOjcxNi40NTcyNjc5OTc0OTcyfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_POLICY_MSEARCH_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_POLICY_SSEARCH_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_POLICY_SKILLTOOL_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_MEM_LEGACY_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_USR_LEGACY_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_FAIL_LEGACY_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_SKL_LEGACY_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1853.8046875, 624)"><g class="label" data-id="L_SKILLTOOL_FULL_0" transform="translate(-16.515625, -12)"><foreignObject width="33.03125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>view</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(99.203125, 423)"><g class="label" data-id="L_MEM_SQM_0" transform="translate(-91.203125, -12)"><foreignObject width="182.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>successful saves mirrored</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(301.609375, 423)"><g class="label" data-id="L_USR_SQM_0" transform="translate(-91.203125, -12)"><foreignObject width="182.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>successful saves mirrored</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(529.34765625, 423)"><g class="label" data-id="L_FAIL_SQM_0" transform="translate(-91.203125, -12)"><foreignObject width="182.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>successful saves mirrored</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_BACKFILL_SQM_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_MSEARCH_SQM_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_SSEARCH_SQS_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-MEM-0" data-look="classic" transform="translate(510.90625, 96)"><rect class="basic label-container" style="" x="-77.4140625" y="-39" width="154.828125" height="78"/><g class="label" style="" transform="translate(-47.4140625, -24)"><rect/><foreignObject width="94.828125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>MEMORY.md<br /><i>Agent's notes</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-USR-1" data-look="classic" transform="translate(712.3515625, 96)"><rect class="basic label-container" style="" x="-73.0703125" y="-39" width="146.140625" height="78"/><g class="label" style="" transform="translate(-43.0703125, -24)"><rect/><foreignObject width="86.140625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>USER.md<br /><i>User profile</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-FAIL-2" data-look="classic" transform="translate(1179.09375, 96)"><rect class="basic label-container" style="" x="-130" y="-63" width="260" height="126"/><g class="label" style="" transform="translate(-100, -48)"><rect/><foreignObject width="200" height="96"><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>failures.md<br /><i>Failure memory</i><br />corrections, insights, failures</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SKL-3" data-look="classic" transform="translate(1906.5, 96)"><rect class="basic label-container" style="" x="-102.59375" y="-63" width="205.1875" height="126"/><g class="label" style="" transform="translate(-72.59375, -48)"><rect/><foreignObject width="145.1875" height="96"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>skills/<br /><i>Procedural memory</i><br />debug-ts.md<br />deploy-checklist.md</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SQM-4" data-look="classic" transform="translate(318.80078125, 725)"><rect class="basic label-container" style="fill:#0b525b !important;stroke:#fff !important" x="-111.796875" y="-39" width="223.59375" height="78"/><g class="label" style="color:#fff !important" transform="translate(-81.796875, -24)"><rect/><foreignObject width="163.59375" 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>memories table + FTS5<br /><i>search mirror/store</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SQS-5" data-look="classic" transform="translate(619.9375, 725)"><rect class="basic label-container" style="fill:#1b4332 !important;stroke:#fff !important" x="-121.6640625" y="-39" width="243.328125" height="78"/><g class="label" style="color:#fff !important" transform="translate(-91.6640625, -24)"><rect/><foreignObject width="183.328125" 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>sessions/messages + FTS5<br /><i>session search</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-POLICY-6" data-look="classic" transform="translate(1531.4140625, 310)"><rect class="basic label-container" style="fill:#1a1a2e !important;stroke:#e94560 !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>Memory policy<br /><i>when to search + safety rules</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-LEGACY-7" data-look="classic" transform="translate(1862.796875, 310)"><rect class="basic label-container" style="fill:#2d1b2e !important;stroke:#ff6b6b !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>Legacy full blocks<br /><i>only with memoryMode=legacy-inject</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-MSEARCH-8" data-look="classic" transform="translate(1255.5, 536)"><rect class="basic label-container" style="" x="-113.8984375" y="-39" width="227.796875" height="78"/><g class="label" style="" transform="translate(-83.8984375, -24)"><rect/><foreignObject width="167.796875" 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<br /><i>query SQLite memories</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SSEARCH-9" data-look="classic" transform="translate(1531.4140625, 536)"><rect class="basic label-container" style="" x="-112.015625" y="-39" width="224.03125" height="78"/><g class="label" style="" transform="translate(-82.015625, -24)"><rect/><foreignObject width="164.03125" 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_search<br /><i>query indexed sessions</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SKILLTOOL-10" data-look="classic" transform="translate(1853.8046875, 536)"><rect class="basic label-container" style="fill:#16213e !important;stroke:#0f3460 !important" x="-160.375" y="-39" width="320.75" height="78"/><g class="label" style="color:#fff !important" transform="translate(-130.375, -24)"><rect/><foreignObject width="260.75" height="48"><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>skill tool<br /><i>list/view/create/patch/edit/delete</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-BACKFILL-11" data-look="classic" transform="translate(961.6015625, 536)"><rect class="basic label-container" style="fill:#3a0ca3 !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>/memory-sync-markdown<br /><i>idempotent Markdown → SQLite sync</i></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-FULL-12" data-look="classic" transform="translate(1853.8046875, 725)"><rect class="basic label-container" style="fill:#0a1128 !important;stroke:#1282a2 !important" x="-106.078125" y="-39" width="212.15625" height="78"/><g class="label" style="color:#fff !important" transform="translate(-76.078125, -24)"><rect/><foreignObject width="152.15625" height="48"><div style="color: rgb(255, 255, 255) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#fff !important" class="nodeLabel"><p>Full skill content<br />Loaded when needed</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800">
3
+ <!-- P shape: outer boundary clockwise, inner hole counter-clockwise -->
4
+ <path fill="#fff" fill-rule="evenodd" d="
5
+ M165.29 165.29
6
+ H517.36
7
+ V400
8
+ H400
9
+ V517.36
10
+ H282.65
11
+ V634.72
12
+ H165.29
13
+ Z
14
+ M282.65 282.65
15
+ V400
16
+ H400
17
+ V282.65
18
+ Z
19
+ "/>
20
+ <!-- i dot -->
21
+ <path fill="#fff" d="M517.36 400 H634.72 V634.72 H517.36 Z"/>
22
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 78.5" width="800" height="392">
2
+ <!-- SVG created with Arrow, by QuiverAI (https://quiver.ai) -->
3
+ <style type="text/css">.cls-0 {fill:#11141D;}
4
+ .cls-1 {fill:url(#SVGID_1_);}
5
+ .cls-2 {fill:#4F90FF;}
6
+ .cls-3 {fill:none;stroke:#FFFFFF;stroke-width:0.5436;stroke-linecap:round;stroke-miterlimit:10;stroke-dasharray:2.7181,3.4026;}
7
+ .cls-4 {fill:#FFFFFF;}</style>
8
+ <rect class="cls-0" width="160" height="78.5"/>
9
+ <radialGradient id="SVGID_1_" cx="120" cy="37.94" r="36.95" gradientUnits="userSpaceOnUse">
10
+ <stop stop-color="#1E345E" offset="0"/>
11
+ <stop stop-color="#11141D" offset="1"/>
12
+ </radialGradient>
13
+ <path class="cls-1" d="m160 0h-80v78.5h80v-78.5z"/>
14
+ <path class="cls-2" d="m151.6 33.2c-0.1 0-0.1 0 0 0-1.3-3.9-3.5-6.9-6.1-9.1 1.4-2.5-0.5-6.1-3.5-5.9-0.8-0.2-1.7 0.1-2.2 0.5-1.7-1-3.7-2.1-6.8-3.2 0.1-1.6-2-4.2-5-4.2-1.4 0.1-2.5 0.9-3.3 2.2-3.7-0.3-7.4 0-11.9 1.1-0.6-0.7-1.8-1.1-3.2-1.1-2.2 0-4.6 2.2-4.4 4.8-3.3 1.4-6.8 4.1-9.5 8.3-2.6-0.6-5.3 1.8-5.2 4.2 0 1.4 0.6 2.8 1.8 3.6-0.7 5.4 1.1 9.1 5.9 11.1-0.2 2.3 2 4.6 4.2 4.6s4.7-1.7 4.5-4.5l13.5-2.7 0.2 0.5-6.5 5.5c-3.2-1.9-6.7 0.7-6.6 4.2 0.1 2.7 4.1 5.8 7.6 2.6 2.3 0.9 3.8 0.9 6.7 0.5 0.6 1.8 2.8 3.3 4.4 2.9l3.8 5.7c-2.1 2.8-0.1 7.7 4.1 7.5 4.5-0.4 5.5-6.5 1.5-8.8-1-0.6-2.1-0.8-3.4-0.4l-3.3-4.9c0.2-0.2 0.6-0.4 0.7-0.7 1.9 0.9 4.8 1.9 7.5 1.9 3-0.1 5.9-1.2 8-3.4 2.5 0.7 6.4-2.2 4.4-6.5 1.6-2.4 2.6-4.6 2.9-7.9 4-1.1 4.5-7.5-0.8-8.4zm-19-15.1c1.8 0.5 3.4 1.4 5.5 2.6-1 1.2-0.7 3.7 0.5 5.2l-2.6 4.5c-1-0.5-2.6-0.4-3.6 0.3l-3-2.5c0.8-1.7 0.1-4-1.5-5.1l0.3-2.5c1.7 0.1 3.7-1.1 4.4-2.5zm-18.7 3.4h-0.9 0.9zm10.1-5.1c0 1.1 0.9 2.6 1.9 3.2l-0.7 2.6c-2.7-0.2-4.7 2.4-4.5 4.8 0.3 3.6 4.3 5.6 6.9 3.2l2.9 2.3c-0.5 0.7-0.9 2.5-0.3 3.4l-3.3 1.8c-2.7-2.1-6.5-0.8-7 2.8l-13.7 2.9c-1.8-2.4-5-3.2-7.1-0.3-3.6-1.3-4.6-3.7-4.2-7.7 1.2 0.2 3-0.8 3.8-2 2.8 0.8 5.9 1.7 7.7 1.6l5-0.4c2.2 3.6 6.5 3.5 8.2 0 1.5-3.1-0.9-6.5-4-6.4l-3-6.7c1-0.8 1.8-2.5 1.3-4 2.8-0.9 6.2-1.3 10.1-1.1zm-17.9 4.5c0.8 1.2 2.4 2.3 4.1 1.8l2.9 6.2c-1 0.6-2 2.2-1.9 3.3l-4.7 0.3c-2.4-0.3-4.8-1-7-1.6 0.1-0.9-0.6-2.3-1.3-3 2.3-3.3 5-5.3 7.9-7zm24.1 34c0.2-0.8-0.3-1.9-0.8-2.5l3.3-3c1.3 1 3.5 0.5 5.2-0.9l4 2.1c-0.5 1 0.2 3 0.8 3.8-2.6 3-7.3 3.5-12.5 0.5zm17.3-7.9v0.1l-0.1 0.1v0.1l-0.2 0.2v0.1l-0.2 0.2v0.1l-0.1 0.1c-1.7-1.1-3.3-0.8-3.8-0.3-0.5 0.2-0.6 0.4 0 0-0.2 0.2-0.7 0.5 0 0-0.2 0.2-0.6 0.5-0.9 0.8l-3.1-1.6h-0.1v-0.1h-0.1l-0.1-0.1h-0.1l-0.1-0.1h-0.1l0.6 0.3h-0.1v-0.1h-0.1l-0.1-0.1h-0.1l-0.1-0.1c1-3.6-3.5-7.1-6.7-4.7-1.7 1.2-2.7 3.7-1.2 5.6l-3.3 3.2c-2.3-0.7-4.5 0.3-5.5 2.8l-3.3 0.3-2.2-0.3c0.2-0.8 0.2-1.9-0.5-2.8l6.3-5.7c2.4 1.6 7.2 0 6.3-5l3.1-2.1c3.1 2.6 8 0.6 7.6-4-0.1-0.8-0.5-1.7-1-2.3l2.7-4.4c1.3 0.5 2.7 0.2 3.5-0.8 2.1 1.5 3.7 4.3 4.3 7.4-3.3 1.8-2.5 7.2 0.9 8 0 2.1-1 4.1-1.4 4.8v0.1h-0.1v0.1l-0.1 0.1v0.1h-0.1v0.1h-0.1v0.1 0.1h-0.1v0.1l-0.1 0.1v0.1h-0.1v0.1z"/>
15
+ <path class="cls-3" d="m51.1 9.5c5.5-3.6 12.5-6.9 23.5-6.9 10 0 15.6 1.5 23.9 6.5l4.1 3.9"/>
16
+ <path class="cls-4" d="m26.7 30.2v-12.8h-24.2v51.3h11.7v-13.1h12.4v-12.5h-12.3v-12.8l12.4-0.1z"/>
17
+ <path class="cls-4" d="m26.7 30.2v12.9h13v-12.9h-13z"/>
18
+ <path class="cls-4" d="m39.6 10.9v13.4h12.9v-13.4h-12.9z"/>
19
+ </svg>