silica-agent 0.4.0__tar.gz

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 (556) hide show
  1. silica_agent-0.4.0/.claude/hooks/uv-guard.py +58 -0
  2. silica_agent-0.4.0/.claude/settings.json +15 -0
  3. silica_agent-0.4.0/.claude-plugin/marketplace.json +14 -0
  4. silica_agent-0.4.0/.claude-plugin/plugin.json +23 -0
  5. silica_agent-0.4.0/.env.example +168 -0
  6. silica_agent-0.4.0/.github/dependabot.yml +31 -0
  7. silica_agent-0.4.0/.github/workflows/release.yml +67 -0
  8. silica_agent-0.4.0/.gitignore +190 -0
  9. silica_agent-0.4.0/CODE_OF_CONDUCT.md +133 -0
  10. silica_agent-0.4.0/CONTRIBUTING.md +41 -0
  11. silica_agent-0.4.0/LICENSE +661 -0
  12. silica_agent-0.4.0/PKG-INFO +367 -0
  13. silica_agent-0.4.0/README.md +310 -0
  14. silica_agent-0.4.0/SECURITY.md +34 -0
  15. silica_agent-0.4.0/assets/architecture.svg +215 -0
  16. silica_agent-0.4.0/assets/cli_screenshot.png +0 -0
  17. silica_agent-0.4.0/assets/mcp_screenshot.png +0 -0
  18. silica_agent-0.4.0/assets/obsidian_plugin_screenshot.png +0 -0
  19. silica_agent-0.4.0/assets/pipeline.svg +86 -0
  20. silica_agent-0.4.0/assets/sili_no_bg.png +0 -0
  21. silica_agent-0.4.0/assets/web_gui_screenshot.png +0 -0
  22. silica_agent-0.4.0/cliff.toml +46 -0
  23. silica_agent-0.4.0/evals/__init__.py +0 -0
  24. silica_agent-0.4.0/evals/_shared.py +115 -0
  25. silica_agent-0.4.0/evals/conftest.py +10 -0
  26. silica_agent-0.4.0/evals/factscore.py +296 -0
  27. silica_agent-0.4.0/evals/golden/__init__.py +5 -0
  28. silica_agent-0.4.0/evals/golden/__main__.py +3 -0
  29. silica_agent-0.4.0/evals/golden/baseline.json +55 -0
  30. silica_agent-0.4.0/evals/golden/probe_classify.py +120 -0
  31. silica_agent-0.4.0/evals/golden/probe_correlate.py +101 -0
  32. silica_agent-0.4.0/evals/golden/probe_dedup.py +180 -0
  33. silica_agent-0.4.0/evals/golden/probe_fusion.py +116 -0
  34. silica_agent-0.4.0/evals/golden/probe_links.py +107 -0
  35. silica_agent-0.4.0/evals/golden/runner.py +382 -0
  36. silica_agent-0.4.0/evals/locomo/__init__.py +4 -0
  37. silica_agent-0.4.0/evals/locomo/__main__.py +6 -0
  38. silica_agent-0.4.0/evals/locomo/repair_dangling.py +136 -0
  39. silica_agent-0.4.0/evals/locomo/runner.py +1139 -0
  40. silica_agent-0.4.0/evals/locomo/test_hybrid_overlay.py +52 -0
  41. silica_agent-0.4.0/evals/locomo/test_locomo_adapter.py +177 -0
  42. silica_agent-0.4.0/evals/locomo/test_locomo_e2e.py +453 -0
  43. silica_agent-0.4.0/evals/locomo/test_locomo_timeline.py +107 -0
  44. silica_agent-0.4.0/evals/longmemeval/__init__.py +4 -0
  45. silica_agent-0.4.0/evals/longmemeval/__main__.py +6 -0
  46. silica_agent-0.4.0/evals/longmemeval/metrics.json +126 -0
  47. silica_agent-0.4.0/evals/longmemeval/probes.py +398 -0
  48. silica_agent-0.4.0/evals/longmemeval/runner.py +707 -0
  49. silica_agent-0.4.0/evals/longmemeval/test_longmemeval_adapter.py +644 -0
  50. silica_agent-0.4.0/evals/longmemeval/test_probes.py +383 -0
  51. silica_agent-0.4.0/evals/musique/__init__.py +4 -0
  52. silica_agent-0.4.0/evals/musique/__main__.py +6 -0
  53. silica_agent-0.4.0/evals/musique/metrics.json +1296 -0
  54. silica_agent-0.4.0/evals/musique/runner.py +375 -0
  55. silica_agent-0.4.0/evals/musique/test_musique_adapter.py +111 -0
  56. silica_agent-0.4.0/evals/paired_stats.py +137 -0
  57. silica_agent-0.4.0/evals/phase0_gates.py +176 -0
  58. silica_agent-0.4.0/evals/probe_abstention_rubric.py +85 -0
  59. silica_agent-0.4.0/evals/probe_dedup_batch.py +178 -0
  60. silica_agent-0.4.0/evals/probe_judge_ab.py +64 -0
  61. silica_agent-0.4.0/evals/probe_judge_floor.py +110 -0
  62. silica_agent-0.4.0/evals/probe_regrade_sweep.py +84 -0
  63. silica_agent-0.4.0/evals/probe_single_hop_regrade.py +84 -0
  64. silica_agent-0.4.0/evals/probe_temporal_regrade.py +91 -0
  65. silica_agent-0.4.0/evals/test_factscore.py +144 -0
  66. silica_agent-0.4.0/evals/test_phase0_gates.py +38 -0
  67. silica_agent-0.4.0/evals/test_vault_energy_bench.py +140 -0
  68. silica_agent-0.4.0/evals/test_vault_energy_realdriver.py +80 -0
  69. silica_agent-0.4.0/examples/taxonomy.example.yaml +54 -0
  70. silica_agent-0.4.0/obsidian-silica/.gitignore +4 -0
  71. silica_agent-0.4.0/obsidian-silica/PROTOCOL.md +149 -0
  72. silica_agent-0.4.0/obsidian-silica/README.md +47 -0
  73. silica_agent-0.4.0/obsidian-silica/bridge.test.ts +145 -0
  74. silica_agent-0.4.0/obsidian-silica/bridge.ts +186 -0
  75. silica_agent-0.4.0/obsidian-silica/chat.test.ts +47 -0
  76. silica_agent-0.4.0/obsidian-silica/chat.ts +66 -0
  77. silica_agent-0.4.0/obsidian-silica/esbuild.config.mjs +23 -0
  78. silica_agent-0.4.0/obsidian-silica/handlers.test.ts +324 -0
  79. silica_agent-0.4.0/obsidian-silica/handlers.ts +341 -0
  80. silica_agent-0.4.0/obsidian-silica/main.ts +297 -0
  81. silica_agent-0.4.0/obsidian-silica/manifest.json +9 -0
  82. silica_agent-0.4.0/obsidian-silica/package.json +18 -0
  83. silica_agent-0.4.0/obsidian-silica/styles.css +20 -0
  84. silica_agent-0.4.0/obsidian-silica/tsconfig.json +15 -0
  85. silica_agent-0.4.0/pyproject.toml +228 -0
  86. silica_agent-0.4.0/setup.cfg +4 -0
  87. silica_agent-0.4.0/silica/.env.example +168 -0
  88. silica_agent-0.4.0/silica/__init__.py +17 -0
  89. silica_agent-0.4.0/silica/_version.py +24 -0
  90. silica_agent-0.4.0/silica/agent/__init__.py +4 -0
  91. silica_agent-0.4.0/silica/agent/bounds.py +280 -0
  92. silica_agent-0.4.0/silica/agent/bus.py +63 -0
  93. silica_agent-0.4.0/silica/agent/commit.py +216 -0
  94. silica_agent-0.4.0/silica/agent/compaction.py +115 -0
  95. silica_agent-0.4.0/silica/agent/concurrency.py +54 -0
  96. silica_agent-0.4.0/silica/agent/constraints.py +19 -0
  97. silica_agent-0.4.0/silica/agent/events.py +85 -0
  98. silica_agent-0.4.0/silica/agent/llm.py +514 -0
  99. silica_agent-0.4.0/silica/agent/loop.py +379 -0
  100. silica_agent-0.4.0/silica/agent/providers.py +545 -0
  101. silica_agent-0.4.0/silica/agent/subagent.py +177 -0
  102. silica_agent-0.4.0/silica/capabilities/__init__.py +78 -0
  103. silica_agent-0.4.0/silica/capabilities/_base.py +48 -0
  104. silica_agent-0.4.0/silica/capabilities/codewiki.py +380 -0
  105. silica_agent-0.4.0/silica/capabilities/dedup.py +527 -0
  106. silica_agent-0.4.0/silica/capabilities/enrich.py +101 -0
  107. silica_agent-0.4.0/silica/capabilities/expand.py +149 -0
  108. silica_agent-0.4.0/silica/capabilities/orphan.py +111 -0
  109. silica_agent-0.4.0/silica/capabilities/profile.py +31 -0
  110. silica_agent-0.4.0/silica/capabilities/profiles_builtin.py +59 -0
  111. silica_agent-0.4.0/silica/capabilities/prompts/_anti_slop.txt +19 -0
  112. silica_agent-0.4.0/silica/capabilities/prompts/dedup_prompt.txt +35 -0
  113. silica_agent-0.4.0/silica/capabilities/prompts/distiller_prompt.txt +143 -0
  114. silica_agent-0.4.0/silica/capabilities/prompts/expand_prompt.txt +15 -0
  115. silica_agent-0.4.0/silica/capabilities/prompts/orphan_prompt.txt +13 -0
  116. silica_agent-0.4.0/silica/capabilities/prompts/profiles/default/examples.md +99 -0
  117. silica_agent-0.4.0/silica/capabilities/prompts/profiles/default/quality.md +16 -0
  118. silica_agent-0.4.0/silica/capabilities/prompts/profiles/default/rubric.md +9 -0
  119. silica_agent-0.4.0/silica/capabilities/prompts/profiles/extractive/examples.md +61 -0
  120. silica_agent-0.4.0/silica/capabilities/prompts/profiles/extractive/quality.md +13 -0
  121. silica_agent-0.4.0/silica/capabilities/prompts/profiles/extractive/rubric.md +14 -0
  122. silica_agent-0.4.0/silica/capabilities/prompts/profiles/transcript/examples.md +64 -0
  123. silica_agent-0.4.0/silica/capabilities/prompts/profiles/transcript/quality.md +8 -0
  124. silica_agent-0.4.0/silica/capabilities/prompts/profiles/transcript/rubric.md +13 -0
  125. silica_agent-0.4.0/silica/capabilities/prompts/refiner_prompt.txt +19 -0
  126. silica_agent-0.4.0/silica/capabilities/refine.py +85 -0
  127. silica_agent-0.4.0/silica/capabilities/runtime.py +77 -0
  128. silica_agent-0.4.0/silica/cli.py +1769 -0
  129. silica_agent-0.4.0/silica/config.py +407 -0
  130. silica_agent-0.4.0/silica/domains/codebase.yaml +8 -0
  131. silica_agent-0.4.0/silica/driver/__init__.py +99 -0
  132. silica_agent-0.4.0/silica/driver/base.py +380 -0
  133. silica_agent-0.4.0/silica/driver/fs_backend.py +989 -0
  134. silica_agent-0.4.0/silica/driver/ws_backend.py +559 -0
  135. silica_agent-0.4.0/silica/kernel/__init__.py +9 -0
  136. silica_agent-0.4.0/silica/kernel/analyst_plan.py +378 -0
  137. silica_agent-0.4.0/silica/kernel/assembly.py +211 -0
  138. silica_agent-0.4.0/silica/kernel/ast.py +170 -0
  139. silica_agent-0.4.0/silica/kernel/atomic_write.py +153 -0
  140. silica_agent-0.4.0/silica/kernel/autolink.py +348 -0
  141. silica_agent-0.4.0/silica/kernel/bulk.py +281 -0
  142. silica_agent-0.4.0/silica/kernel/checkpoints.py +144 -0
  143. silica_agent-0.4.0/silica/kernel/classify.py +514 -0
  144. silica_agent-0.4.0/silica/kernel/codeast/__init__.py +31 -0
  145. silica_agent-0.4.0/silica/kernel/codeast/base.py +202 -0
  146. silica_agent-0.4.0/silica/kernel/codeast/c.py +211 -0
  147. silica_agent-0.4.0/silica/kernel/codeast/java.py +190 -0
  148. silica_agent-0.4.0/silica/kernel/codeast/python.py +244 -0
  149. silica_agent-0.4.0/silica/kernel/codeast/ts.py +43 -0
  150. silica_agent-0.4.0/silica/kernel/codedocs.py +164 -0
  151. silica_agent-0.4.0/silica/kernel/codegraph.py +467 -0
  152. silica_agent-0.4.0/silica/kernel/codewiki.py +355 -0
  153. silica_agent-0.4.0/silica/kernel/cohesion.py +156 -0
  154. silica_agent-0.4.0/silica/kernel/contested.py +68 -0
  155. silica_agent-0.4.0/silica/kernel/contested_register.py +51 -0
  156. silica_agent-0.4.0/silica/kernel/context_builder.py +53 -0
  157. silica_agent-0.4.0/silica/kernel/cooccurrence.py +675 -0
  158. silica_agent-0.4.0/silica/kernel/correlate.py +88 -0
  159. silica_agent-0.4.0/silica/kernel/curator.py +205 -0
  160. silica_agent-0.4.0/silica/kernel/deferred.py +270 -0
  161. silica_agent-0.4.0/silica/kernel/embed.py +612 -0
  162. silica_agent-0.4.0/silica/kernel/episodic.py +547 -0
  163. silica_agent-0.4.0/silica/kernel/frontmatter.py +73 -0
  164. silica_agent-0.4.0/silica/kernel/gitstate.py +235 -0
  165. silica_agent-0.4.0/silica/kernel/graph_diff.py +136 -0
  166. silica_agent-0.4.0/silica/kernel/graph_export.py +547 -0
  167. silica_agent-0.4.0/silica/kernel/graph_report/__init__.py +66 -0
  168. silica_agent-0.4.0/silica/kernel/graph_report/code_signals.py +75 -0
  169. silica_agent-0.4.0/silica/kernel/graph_report/compute.py +451 -0
  170. silica_agent-0.4.0/silica/kernel/graph_report/cooccur_delta.py +257 -0
  171. silica_agent-0.4.0/silica/kernel/graph_report/embed_signals.py +189 -0
  172. silica_agent-0.4.0/silica/kernel/graph_report/models.py +160 -0
  173. silica_agent-0.4.0/silica/kernel/graph_report/render.py +511 -0
  174. silica_agent-0.4.0/silica/kernel/health/__init__.py +270 -0
  175. silica_agent-0.4.0/silica/kernel/health/lint.py +306 -0
  176. silica_agent-0.4.0/silica/kernel/heatmap.py +367 -0
  177. silica_agent-0.4.0/silica/kernel/ipynb.py +71 -0
  178. silica_agent-0.4.0/silica/kernel/keyphrase.py +291 -0
  179. silica_agent-0.4.0/silica/kernel/language.py +106 -0
  180. silica_agent-0.4.0/silica/kernel/ledger.py +200 -0
  181. silica_agent-0.4.0/silica/kernel/lexical.py +190 -0
  182. silica_agent-0.4.0/silica/kernel/linter.py +211 -0
  183. silica_agent-0.4.0/silica/kernel/media.py +128 -0
  184. silica_agent-0.4.0/silica/kernel/memory_lane.py +86 -0
  185. silica_agent-0.4.0/silica/kernel/merge.py +53 -0
  186. silica_agent-0.4.0/silica/kernel/mindmap.py +800 -0
  187. silica_agent-0.4.0/silica/kernel/minhash_dedup.py +119 -0
  188. silica_agent-0.4.0/silica/kernel/moc.py +59 -0
  189. silica_agent-0.4.0/silica/kernel/ofm.py +170 -0
  190. silica_agent-0.4.0/silica/kernel/ops.py +189 -0
  191. silica_agent-0.4.0/silica/kernel/ops_io.py +58 -0
  192. silica_agent-0.4.0/silica/kernel/overlay.py +265 -0
  193. silica_agent-0.4.0/silica/kernel/partition.py +120 -0
  194. silica_agent-0.4.0/silica/kernel/paths.py +332 -0
  195. silica_agent-0.4.0/silica/kernel/payload.py +168 -0
  196. silica_agent-0.4.0/silica/kernel/perception.py +375 -0
  197. silica_agent-0.4.0/silica/kernel/plans.py +39 -0
  198. silica_agent-0.4.0/silica/kernel/prep_delegation.py +532 -0
  199. silica_agent-0.4.0/silica/kernel/progress.py +688 -0
  200. silica_agent-0.4.0/silica/kernel/provenance.py +383 -0
  201. silica_agent-0.4.0/silica/kernel/recall_weights.py +77 -0
  202. silica_agent-0.4.0/silica/kernel/recon.py +81 -0
  203. silica_agent-0.4.0/silica/kernel/relatedness.py +638 -0
  204. silica_agent-0.4.0/silica/kernel/rename.py +358 -0
  205. silica_agent-0.4.0/silica/kernel/rerank.py +190 -0
  206. silica_agent-0.4.0/silica/kernel/run_log.py +142 -0
  207. silica_agent-0.4.0/silica/kernel/run_substrate.py +259 -0
  208. silica_agent-0.4.0/silica/kernel/sanitize.py +251 -0
  209. silica_agent-0.4.0/silica/kernel/taxonomy.py +228 -0
  210. silica_agent-0.4.0/silica/kernel/templates.py +432 -0
  211. silica_agent-0.4.0/silica/kernel/text.py +140 -0
  212. silica_agent-0.4.0/silica/kernel/timeline.py +56 -0
  213. silica_agent-0.4.0/silica/kernel/title.py +87 -0
  214. silica_agent-0.4.0/silica/kernel/undo_journal.py +237 -0
  215. silica_agent-0.4.0/silica/kernel/validate.py +745 -0
  216. silica_agent-0.4.0/silica/kernel/vault_energy.py +91 -0
  217. silica_agent-0.4.0/silica/kernel/vault_manifest.py +284 -0
  218. silica_agent-0.4.0/silica/kernel/vault_map.py +177 -0
  219. silica_agent-0.4.0/silica/kernel/workqueue.py +320 -0
  220. silica_agent-0.4.0/silica/onboarding/__init__.py +3 -0
  221. silica_agent-0.4.0/silica/onboarding/checks.py +388 -0
  222. silica_agent-0.4.0/silica/onboarding/wizard.py +645 -0
  223. silica_agent-0.4.0/silica/overlays/italian.yaml +174 -0
  224. silica_agent-0.4.0/silica/prompts.py +102 -0
  225. silica_agent-0.4.0/silica/recipes/injector.yaml +24 -0
  226. silica_agent-0.4.0/silica/recipes/organizer.yaml +15 -0
  227. silica_agent-0.4.0/silica/router/__init__.py +4 -0
  228. silica_agent-0.4.0/silica/router/base_fsm.py +157 -0
  229. silica_agent-0.4.0/silica/router/coordinator.py +216 -0
  230. silica_agent-0.4.0/silica/router/orchestrator.py +1051 -0
  231. silica_agent-0.4.0/silica/router/organize_fsm.py +564 -0
  232. silica_agent-0.4.0/silica/router/overlay.py +53 -0
  233. silica_agent-0.4.0/silica/router/prefetch.py +50 -0
  234. silica_agent-0.4.0/silica/router/recipe_parser.py +43 -0
  235. silica_agent-0.4.0/silica/router/states/__init__.py +9 -0
  236. silica_agent-0.4.0/silica/router/states/collision.py +681 -0
  237. silica_agent-0.4.0/silica/router/states/distill.py +731 -0
  238. silica_agent-0.4.0/silica/router/states/finalize.py +499 -0
  239. silica_agent-0.4.0/silica/router/states/linking.py +228 -0
  240. silica_agent-0.4.0/silica/router/states/setup.py +554 -0
  241. silica_agent-0.4.0/silica/router/states/write.py +551 -0
  242. silica_agent-0.4.0/silica/router/warning_ledger.py +76 -0
  243. silica_agent-0.4.0/silica/sources/__init__.py +7 -0
  244. silica_agent-0.4.0/silica/sources/base.py +52 -0
  245. silica_agent-0.4.0/silica/sources/code.py +178 -0
  246. silica_agent-0.4.0/silica/sources/convert.py +401 -0
  247. silica_agent-0.4.0/silica/sources/notebook.py +94 -0
  248. silica_agent-0.4.0/silica/sources/prose.py +44 -0
  249. silica_agent-0.4.0/silica/sources/registry.py +74 -0
  250. silica_agent-0.4.0/silica/sources/web_research.py +223 -0
  251. silica_agent-0.4.0/silica/tools/__init__.py +138 -0
  252. silica_agent-0.4.0/silica/tools/atomic.py +452 -0
  253. silica_agent-0.4.0/silica/tools/codedocs_tool.py +42 -0
  254. silica_agent-0.4.0/silica/tools/composed.py +85 -0
  255. silica_agent-0.4.0/silica/tools/curate.py +389 -0
  256. silica_agent-0.4.0/silica/tools/delegate_tool.py +61 -0
  257. silica_agent-0.4.0/silica/tools/graph.py +910 -0
  258. silica_agent-0.4.0/silica/tools/notes.py +228 -0
  259. silica_agent-0.4.0/silica/tools/pipeline.py +624 -0
  260. silica_agent-0.4.0/silica/tools/runners.py +545 -0
  261. silica_agent-0.4.0/silica/tools/wrapped.py +308 -0
  262. silica_agent-0.4.0/silica/ui/__init__.py +4 -0
  263. silica_agent-0.4.0/silica/ui/banner.py +74 -0
  264. silica_agent-0.4.0/silica/ui/commands.py +332 -0
  265. silica_agent-0.4.0/silica/ui/connect.py +311 -0
  266. silica_agent-0.4.0/silica/ui/console.py +8 -0
  267. silica_agent-0.4.0/silica/ui/home.py +44 -0
  268. silica_agent-0.4.0/silica/ui/logging.py +108 -0
  269. silica_agent-0.4.0/silica/ui/mcp.py +112 -0
  270. silica_agent-0.4.0/silica/ui/prompt.py +100 -0
  271. silica_agent-0.4.0/silica/ui/renderer.py +784 -0
  272. silica_agent-0.4.0/silica/ui/style.py +83 -0
  273. silica_agent-0.4.0/silica/ui/theme.py +27 -0
  274. silica_agent-0.4.0/silica/ui/web/__init__.py +17 -0
  275. silica_agent-0.4.0/silica/ui/web/callback.py +48 -0
  276. silica_agent-0.4.0/silica/ui/web/graph_view.py +832 -0
  277. silica_agent-0.4.0/silica/ui/web/server.py +1041 -0
  278. silica_agent-0.4.0/silica/ui/web/static/3d-force-graph.min.js +5 -0
  279. silica_agent-0.4.0/silica/ui/web/static/app.css +2064 -0
  280. silica_agent-0.4.0/silica/ui/web/static/app.js +1146 -0
  281. silica_agent-0.4.0/silica/ui/web/static/index.html +230 -0
  282. silica_agent-0.4.0/silica/ui/web/static/lexend-latin.woff2 +0 -0
  283. silica_agent-0.4.0/silica/ui/web/static/martian-mono-latin.woff2 +0 -0
  284. silica_agent-0.4.0/silica/ui/web/static/mermaid.min.js +3587 -0
  285. silica_agent-0.4.0/silica/update.py +103 -0
  286. silica_agent-0.4.0/silica_agent.egg-info/PKG-INFO +367 -0
  287. silica_agent-0.4.0/silica_agent.egg-info/SOURCES.txt +554 -0
  288. silica_agent-0.4.0/silica_agent.egg-info/dependency_links.txt +1 -0
  289. silica_agent-0.4.0/silica_agent.egg-info/entry_points.txt +2 -0
  290. silica_agent-0.4.0/silica_agent.egg-info/requires.txt +46 -0
  291. silica_agent-0.4.0/silica_agent.egg-info/scm_file_list.json +549 -0
  292. silica_agent-0.4.0/silica_agent.egg-info/scm_version.json +8 -0
  293. silica_agent-0.4.0/silica_agent.egg-info/top_level.txt +1 -0
  294. silica_agent-0.4.0/skills/silica/SKILL.md +68 -0
  295. silica_agent-0.4.0/tests/__init__.py +1 -0
  296. silica_agent-0.4.0/tests/conftest.py +242 -0
  297. silica_agent-0.4.0/tests/fixtures/__init__.py +1 -0
  298. silica_agent-0.4.0/tests/fixtures/vault_factory.py +295 -0
  299. silica_agent-0.4.0/tests/golden/__init__.py +2 -0
  300. silica_agent-0.4.0/tests/golden/autolink_cases.json +58 -0
  301. silica_agent-0.4.0/tests/golden/collision_threshold_cases.json +26 -0
  302. silica_agent-0.4.0/tests/golden/keyphrase_cases.json +72 -0
  303. silica_agent-0.4.0/tests/golden/test_driver_parity.py +289 -0
  304. silica_agent-0.4.0/tests/golden/test_eval_autolink.py +81 -0
  305. silica_agent-0.4.0/tests/golden/test_eval_correlate.py +68 -0
  306. silica_agent-0.4.0/tests/golden/test_eval_fusion.py +169 -0
  307. silica_agent-0.4.0/tests/golden/test_eval_keyphrase.py +149 -0
  308. silica_agent-0.4.0/tests/golden/test_golden_regression.py +58 -0
  309. silica_agent-0.4.0/tests/llm_mocks.py +46 -0
  310. silica_agent-0.4.0/tests/test_agent_constraints.py +136 -0
  311. silica_agent-0.4.0/tests/test_agent_guards_and_provider.py +251 -0
  312. silica_agent-0.4.0/tests/test_agent_history_repair.py +50 -0
  313. silica_agent-0.4.0/tests/test_analyst_plan.py +202 -0
  314. silica_agent-0.4.0/tests/test_anneal.py +161 -0
  315. silica_agent-0.4.0/tests/test_anti_slop.py +36 -0
  316. silica_agent-0.4.0/tests/test_assembly.py +105 -0
  317. silica_agent-0.4.0/tests/test_assembly_perception.py +52 -0
  318. silica_agent-0.4.0/tests/test_atomic_write.py +63 -0
  319. silica_agent-0.4.0/tests/test_atomic_write_bytes.py +31 -0
  320. silica_agent-0.4.0/tests/test_autolink.py +380 -0
  321. silica_agent-0.4.0/tests/test_autolink_facade.py +63 -0
  322. silica_agent-0.4.0/tests/test_autolink_note_title_index.py +116 -0
  323. silica_agent-0.4.0/tests/test_bounds.py +196 -0
  324. silica_agent-0.4.0/tests/test_bulk.py +347 -0
  325. silica_agent-0.4.0/tests/test_bulk_verify.py +454 -0
  326. silica_agent-0.4.0/tests/test_bus.py +117 -0
  327. silica_agent-0.4.0/tests/test_cancel_token.py +161 -0
  328. silica_agent-0.4.0/tests/test_cancel_tool_seam.py +78 -0
  329. silica_agent-0.4.0/tests/test_capability_seam.py +69 -0
  330. silica_agent-0.4.0/tests/test_checkpoints.py +94 -0
  331. silica_agent-0.4.0/tests/test_clean_tag.py +27 -0
  332. silica_agent-0.4.0/tests/test_cli_clear.py +31 -0
  333. silica_agent-0.4.0/tests/test_cli_subcommands.py +125 -0
  334. silica_agent-0.4.0/tests/test_cluster_cache.py +84 -0
  335. silica_agent-0.4.0/tests/test_codeast.py +567 -0
  336. silica_agent-0.4.0/tests/test_codedocs.py +179 -0
  337. silica_agent-0.4.0/tests/test_codegraph.py +373 -0
  338. silica_agent-0.4.0/tests/test_codewiki.py +240 -0
  339. silica_agent-0.4.0/tests/test_codewiki_capability.py +289 -0
  340. silica_agent-0.4.0/tests/test_cohesion.py +308 -0
  341. silica_agent-0.4.0/tests/test_collision_intra_chunk.py +71 -0
  342. silica_agent-0.4.0/tests/test_commit.py +190 -0
  343. silica_agent-0.4.0/tests/test_compaction.py +149 -0
  344. silica_agent-0.4.0/tests/test_compaction_wiring.py +147 -0
  345. silica_agent-0.4.0/tests/test_confidence_tier.py +85 -0
  346. silica_agent-0.4.0/tests/test_config_domain.py +10 -0
  347. silica_agent-0.4.0/tests/test_config_failfast.py +27 -0
  348. silica_agent-0.4.0/tests/test_config_git.py +11 -0
  349. silica_agent-0.4.0/tests/test_config_ws.py +21 -0
  350. silica_agent-0.4.0/tests/test_connect.py +398 -0
  351. silica_agent-0.4.0/tests/test_contested.py +233 -0
  352. silica_agent-0.4.0/tests/test_context_builder.py +161 -0
  353. silica_agent-0.4.0/tests/test_convert.py +367 -0
  354. silica_agent-0.4.0/tests/test_cooccur_key.py +42 -0
  355. silica_agent-0.4.0/tests/test_cooccurrence.py +687 -0
  356. silica_agent-0.4.0/tests/test_cooccurrence_community_labels.py +193 -0
  357. silica_agent-0.4.0/tests/test_cooccurrence_refresh_tool.py +142 -0
  358. silica_agent-0.4.0/tests/test_coordinator.py +227 -0
  359. silica_agent-0.4.0/tests/test_correlate.py +121 -0
  360. silica_agent-0.4.0/tests/test_curate_apply.py +342 -0
  361. silica_agent-0.4.0/tests/test_curator.py +264 -0
  362. silica_agent-0.4.0/tests/test_dedup_batch.py +177 -0
  363. silica_agent-0.4.0/tests/test_dedup_gate.py +129 -0
  364. silica_agent-0.4.0/tests/test_dedup_near_title_score.py +50 -0
  365. silica_agent-0.4.0/tests/test_dedup_refine_commands.py +288 -0
  366. silica_agent-0.4.0/tests/test_deferred.py +298 -0
  367. silica_agent-0.4.0/tests/test_deferred_flush.py +160 -0
  368. silica_agent-0.4.0/tests/test_distill_cascade.py +159 -0
  369. silica_agent-0.4.0/tests/test_distill_prefetch.py +172 -0
  370. silica_agent-0.4.0/tests/test_distill_profiles.py +196 -0
  371. silica_agent-0.4.0/tests/test_distiller_resilience.py +265 -0
  372. silica_agent-0.4.0/tests/test_distiller_schema.py +280 -0
  373. silica_agent-0.4.0/tests/test_document_rbac.py +40 -0
  374. silica_agent-0.4.0/tests/test_document_tool.py +108 -0
  375. silica_agent-0.4.0/tests/test_embed.py +544 -0
  376. silica_agent-0.4.0/tests/test_embed_binary.py +72 -0
  377. silica_agent-0.4.0/tests/test_embed_phantom_cleanup.py +37 -0
  378. silica_agent-0.4.0/tests/test_embed_search_topk.py +110 -0
  379. silica_agent-0.4.0/tests/test_embed_title_search.py +36 -0
  380. silica_agent-0.4.0/tests/test_episodic.py +698 -0
  381. silica_agent-0.4.0/tests/test_expand_capability.py +182 -0
  382. silica_agent-0.4.0/tests/test_extractive_grounding.py +120 -0
  383. silica_agent-0.4.0/tests/test_files_cap.py +33 -0
  384. silica_agent-0.4.0/tests/test_finalize_provenance.py +176 -0
  385. silica_agent-0.4.0/tests/test_finalize_status.py +51 -0
  386. silica_agent-0.4.0/tests/test_flag_note.py +90 -0
  387. silica_agent-0.4.0/tests/test_freshness_hook.py +177 -0
  388. silica_agent-0.4.0/tests/test_fs_backend_graph.py +159 -0
  389. silica_agent-0.4.0/tests/test_fs_body_cache.py +143 -0
  390. silica_agent-0.4.0/tests/test_fs_create_index.py +48 -0
  391. silica_agent-0.4.0/tests/test_fs_move_rewrite.py +464 -0
  392. silica_agent-0.4.0/tests/test_fsm.py +1465 -0
  393. silica_agent-0.4.0/tests/test_fsm_domain_wiring.py +29 -0
  394. silica_agent-0.4.0/tests/test_gate_leniency.py +127 -0
  395. silica_agent-0.4.0/tests/test_git_autocommit.py +197 -0
  396. silica_agent-0.4.0/tests/test_gitstate.py +126 -0
  397. silica_agent-0.4.0/tests/test_gitstate_codegraph.py +64 -0
  398. silica_agent-0.4.0/tests/test_golden_probes.py +105 -0
  399. silica_agent-0.4.0/tests/test_graph_community_labels.py +370 -0
  400. silica_agent-0.4.0/tests/test_graph_delta.py +451 -0
  401. silica_agent-0.4.0/tests/test_graph_diff.py +256 -0
  402. silica_agent-0.4.0/tests/test_graph_render_html.py +384 -0
  403. silica_agent-0.4.0/tests/test_graph_report.py +618 -0
  404. silica_agent-0.4.0/tests/test_graph_report_convention.py +68 -0
  405. silica_agent-0.4.0/tests/test_graph_tools.py +274 -0
  406. silica_agent-0.4.0/tests/test_graph_view_export.py +134 -0
  407. silica_agent-0.4.0/tests/test_graph_view_tree.py +61 -0
  408. silica_agent-0.4.0/tests/test_grounding_invariant.py +39 -0
  409. silica_agent-0.4.0/tests/test_gui_web.py +803 -0
  410. silica_agent-0.4.0/tests/test_heatmap.py +236 -0
  411. silica_agent-0.4.0/tests/test_hub_desc.py +37 -0
  412. silica_agent-0.4.0/tests/test_impact.py +67 -0
  413. silica_agent-0.4.0/tests/test_import_boundaries.py +28 -0
  414. silica_agent-0.4.0/tests/test_injector_atomic_parity.py +192 -0
  415. silica_agent-0.4.0/tests/test_ipynb.py +53 -0
  416. silica_agent-0.4.0/tests/test_keyphrase.py +388 -0
  417. silica_agent-0.4.0/tests/test_knn_edges.py +72 -0
  418. silica_agent-0.4.0/tests/test_lang_detect.py +25 -0
  419. silica_agent-0.4.0/tests/test_language.py +120 -0
  420. silica_agent-0.4.0/tests/test_ledger_integrity.py +230 -0
  421. silica_agent-0.4.0/tests/test_lexical.py +188 -0
  422. silica_agent-0.4.0/tests/test_lexical_fusion.py +15 -0
  423. silica_agent-0.4.0/tests/test_lexical_refresh_tool.py +167 -0
  424. silica_agent-0.4.0/tests/test_lexical_write_hook.py +20 -0
  425. silica_agent-0.4.0/tests/test_linter_documents.py +19 -0
  426. silica_agent-0.4.0/tests/test_linter_expires_at.py +71 -0
  427. silica_agent-0.4.0/tests/test_llm_bounded_call.py +32 -0
  428. silica_agent-0.4.0/tests/test_llm_streaming.py +143 -0
  429. silica_agent-0.4.0/tests/test_llm_structured_output.py +72 -0
  430. silica_agent-0.4.0/tests/test_llm_temperature.py +30 -0
  431. silica_agent-0.4.0/tests/test_load_recipe_domain.py +41 -0
  432. silica_agent-0.4.0/tests/test_logging.py +249 -0
  433. silica_agent-0.4.0/tests/test_loop_cancel.py +157 -0
  434. silica_agent-0.4.0/tests/test_map_layout.py +73 -0
  435. silica_agent-0.4.0/tests/test_map_serialize.py +92 -0
  436. silica_agent-0.4.0/tests/test_max_tokens_clamp.py +45 -0
  437. silica_agent-0.4.0/tests/test_mcp_surface.py +47 -0
  438. silica_agent-0.4.0/tests/test_media.py +189 -0
  439. silica_agent-0.4.0/tests/test_memory_lane.py +126 -0
  440. silica_agent-0.4.0/tests/test_mention_index.py +97 -0
  441. silica_agent-0.4.0/tests/test_merge_wiring.py +148 -0
  442. silica_agent-0.4.0/tests/test_message_provenance.py +39 -0
  443. silica_agent-0.4.0/tests/test_mineru_error.py +67 -0
  444. silica_agent-0.4.0/tests/test_minhash_dedup.py +120 -0
  445. silica_agent-0.4.0/tests/test_model_limits.py +239 -0
  446. silica_agent-0.4.0/tests/test_multi_file_injector.py +677 -0
  447. silica_agent-0.4.0/tests/test_note_edges.py +69 -0
  448. silica_agent-0.4.0/tests/test_notebook_adapter.py +71 -0
  449. silica_agent-0.4.0/tests/test_novelty_gate.py +142 -0
  450. silica_agent-0.4.0/tests/test_nucleate_dispatch.py +376 -0
  451. silica_agent-0.4.0/tests/test_nucleate_log.py +120 -0
  452. silica_agent-0.4.0/tests/test_onboarding_checks.py +512 -0
  453. silica_agent-0.4.0/tests/test_onboarding_wizard.py +978 -0
  454. silica_agent-0.4.0/tests/test_ops_io.py +78 -0
  455. silica_agent-0.4.0/tests/test_organize_fsm.py +521 -0
  456. silica_agent-0.4.0/tests/test_orphan_candidates_facade.py +72 -0
  457. silica_agent-0.4.0/tests/test_overlay.py +336 -0
  458. silica_agent-0.4.0/tests/test_partition.py +119 -0
  459. silica_agent-0.4.0/tests/test_payload_gate.py +100 -0
  460. silica_agent-0.4.0/tests/test_perception.py +303 -0
  461. silica_agent-0.4.0/tests/test_plans_loop.py +127 -0
  462. silica_agent-0.4.0/tests/test_profiles_registry.py +46 -0
  463. silica_agent-0.4.0/tests/test_progress_ledger.py +459 -0
  464. silica_agent-0.4.0/tests/test_prompt_cache_stability.py +62 -0
  465. silica_agent-0.4.0/tests/test_provenance.py +219 -0
  466. silica_agent-0.4.0/tests/test_provenance_dedup.py +86 -0
  467. silica_agent-0.4.0/tests/test_providers.py +447 -0
  468. silica_agent-0.4.0/tests/test_quarantine.py +62 -0
  469. silica_agent-0.4.0/tests/test_reading_path.py +83 -0
  470. silica_agent-0.4.0/tests/test_readme_sync.py +32 -0
  471. silica_agent-0.4.0/tests/test_recall_weights.py +46 -0
  472. silica_agent-0.4.0/tests/test_recipe_overlay.py +57 -0
  473. silica_agent-0.4.0/tests/test_recon.py +236 -0
  474. silica_agent-0.4.0/tests/test_regression_validation.py +207 -0
  475. silica_agent-0.4.0/tests/test_relate.py +24 -0
  476. silica_agent-0.4.0/tests/test_related_tool.py +213 -0
  477. silica_agent-0.4.0/tests/test_relatedness.py +654 -0
  478. silica_agent-0.4.0/tests/test_relatedness_boundary.py +92 -0
  479. silica_agent-0.4.0/tests/test_rename_kernel.py +466 -0
  480. silica_agent-0.4.0/tests/test_reply_language.py +67 -0
  481. silica_agent-0.4.0/tests/test_repo_mode.py +96 -0
  482. silica_agent-0.4.0/tests/test_repo_root.py +77 -0
  483. silica_agent-0.4.0/tests/test_report_analytics.py +168 -0
  484. silica_agent-0.4.0/tests/test_report_code_signals.py +37 -0
  485. silica_agent-0.4.0/tests/test_rerank.py +262 -0
  486. silica_agent-0.4.0/tests/test_retry_transient.py +122 -0
  487. silica_agent-0.4.0/tests/test_revert_command.py +36 -0
  488. silica_agent-0.4.0/tests/test_review_queue.py +147 -0
  489. silica_agent-0.4.0/tests/test_run.py +176 -0
  490. silica_agent-0.4.0/tests/test_run_log.py +157 -0
  491. silica_agent-0.4.0/tests/test_run_substrate_facade.py +230 -0
  492. silica_agent-0.4.0/tests/test_run_worker.py +89 -0
  493. silica_agent-0.4.0/tests/test_sanitize.py +321 -0
  494. silica_agent-0.4.0/tests/test_shared_memory_leases.py +69 -0
  495. silica_agent-0.4.0/tests/test_silica_delegate.py +56 -0
  496. silica_agent-0.4.0/tests/test_smoke.py +246 -0
  497. silica_agent-0.4.0/tests/test_snippet_gate.py +177 -0
  498. silica_agent-0.4.0/tests/test_source_adapters.py +186 -0
  499. silica_agent-0.4.0/tests/test_source_leaves.py +277 -0
  500. silica_agent-0.4.0/tests/test_span_grounding.py +201 -0
  501. silica_agent-0.4.0/tests/test_stale_command.py +41 -0
  502. silica_agent-0.4.0/tests/test_steer_feedback.py +237 -0
  503. silica_agent-0.4.0/tests/test_store_seam.py +101 -0
  504. silica_agent-0.4.0/tests/test_structural_gaps.py +67 -0
  505. silica_agent-0.4.0/tests/test_subagent.py +467 -0
  506. silica_agent-0.4.0/tests/test_target_dir_resolution.py +50 -0
  507. silica_agent-0.4.0/tests/test_taxonomy.py +229 -0
  508. silica_agent-0.4.0/tests/test_templates.py +275 -0
  509. silica_agent-0.4.0/tests/test_text_seam.py +112 -0
  510. silica_agent-0.4.0/tests/test_three_way_merge.py +120 -0
  511. silica_agent-0.4.0/tests/test_timeline.py +61 -0
  512. silica_agent-0.4.0/tests/test_title_identity.py +189 -0
  513. silica_agent-0.4.0/tests/test_title_index_cache.py +49 -0
  514. silica_agent-0.4.0/tests/test_token_meter.py +43 -0
  515. silica_agent-0.4.0/tests/test_tool_call_fanout.py +47 -0
  516. silica_agent-0.4.0/tests/test_tool_collapse_field.py +36 -0
  517. silica_agent-0.4.0/tests/test_tool_progress.py +734 -0
  518. silica_agent-0.4.0/tests/test_tool_sensitive.py +139 -0
  519. silica_agent-0.4.0/tests/test_trie_incremental.py +163 -0
  520. silica_agent-0.4.0/tests/test_ui_commands.py +149 -0
  521. silica_agent-0.4.0/tests/test_undo_journal.py +222 -0
  522. silica_agent-0.4.0/tests/test_update.py +110 -0
  523. silica_agent-0.4.0/tests/test_validate_body_field_coercion.py +80 -0
  524. silica_agent-0.4.0/tests/test_validate_links.py +388 -0
  525. silica_agent-0.4.0/tests/test_validate_title_gate_scope.py +120 -0
  526. silica_agent-0.4.0/tests/test_vault_codebase_switch.py +98 -0
  527. silica_agent-0.4.0/tests/test_vault_command.py +106 -0
  528. silica_agent-0.4.0/tests/test_vault_config_paths.py +57 -0
  529. silica_agent-0.4.0/tests/test_vault_conventions.py +431 -0
  530. silica_agent-0.4.0/tests/test_vault_display.py +50 -0
  531. silica_agent-0.4.0/tests/test_vault_energy.py +106 -0
  532. silica_agent-0.4.0/tests/test_vault_factory.py +155 -0
  533. silica_agent-0.4.0/tests/test_vault_manifest.py +210 -0
  534. silica_agent-0.4.0/tests/test_vault_map.py +142 -0
  535. silica_agent-0.4.0/tests/test_vault_root_silica.py +15 -0
  536. silica_agent-0.4.0/tests/test_warning_ledger.py +53 -0
  537. silica_agent-0.4.0/tests/test_web_research.py +247 -0
  538. silica_agent-0.4.0/tests/test_wikilink.py +19 -0
  539. silica_agent-0.4.0/tests/test_worker_concurrency.py +56 -0
  540. silica_agent-0.4.0/tests/test_worker_config.py +16 -0
  541. silica_agent-0.4.0/tests/test_worker_profile.py +27 -0
  542. silica_agent-0.4.0/tests/test_workqueue.py +121 -0
  543. silica_agent-0.4.0/tests/test_workqueue_sentinel.py +131 -0
  544. silica_agent-0.4.0/tests/test_write_boundary_regression.py +39 -0
  545. silica_agent-0.4.0/tests/test_write_note_tool.py +102 -0
  546. silica_agent-0.4.0/tests/test_ws_backend.py +441 -0
  547. silica_agent-0.4.0/uv.lock +4394 -0
  548. silica_agent-0.4.0/verify-or-revert.cast +4 -0
  549. silica_agent-0.4.0/web/README.md +22 -0
  550. silica_agent-0.4.0/web/animation.html +858 -0
  551. silica_agent-0.4.0/web/fonts/martian-mono-latin.woff2 +0 -0
  552. silica_agent-0.4.0/web/index.html +336 -0
  553. silica_agent-0.4.0/web/silica-favicon.svg +22 -0
  554. silica_agent-0.4.0/web/silica-logo.svg +21 -0
  555. silica_agent-0.4.0/web/style.css +688 -0
  556. silica_agent-0.4.0/web/vercel.json +13 -0
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env python3
2
+ """PreToolUse guard: keep Bash commands on `uv`, the project's only env manager.
3
+
4
+ Blocks the two things that actually desync the uv-managed .venv / uv.lock:
5
+ - `pip install` run outside uv (use `uv add` / `uv pip install`)
6
+ - a bare `pytest` invocation (use `uv run pytest`)
7
+
8
+ Wired from .claude/settings.json. Exit 2 = block; stderr is shown to the model.
9
+ Run `python3 .claude/hooks/uv-guard.py --selftest` to check the matcher.
10
+ """
11
+ import json
12
+ import re
13
+ import sys
14
+
15
+ # Match only at the start of a command *segment* (^, or after ; & | newline), so a
16
+ # literal "pip install" / "pytest" inside a quoted arg or commit message is ignored.
17
+ # ponytail: segment-anchored regex, not a shell lexer; a pipeline like
18
+ # `echo x | pytest` would slip through. Swap in shlex if that ever bites.
19
+ _SEG = r"(?:^|[;&|\n])\s*"
20
+ _PIP = re.compile(_SEG + r"(?:sudo\s+)?(?:python[0-9.]*\s+-m\s+)?pip[0-9.]*\s+install\b")
21
+ _PYTEST = re.compile(_SEG + r"pytest\b")
22
+
23
+
24
+ def check(cmd: str) -> str | None:
25
+ """Return a block reason, or None to allow."""
26
+ if _PIP.search(cmd):
27
+ return "pip install desyncs the uv env. Use `uv add <pkg>` (or `uv pip install`)."
28
+ if _PYTEST.search(cmd):
29
+ return "Bare pytest may use the wrong interpreter. Use `uv run pytest`."
30
+ return None
31
+
32
+
33
+ def _selftest() -> None:
34
+ assert check("pip install foo")
35
+ assert check("pip3 install foo")
36
+ assert check("python -m pip install foo")
37
+ assert check("sudo pip install foo")
38
+ assert check("cd x && pip install foo")
39
+ assert check("pytest tests/")
40
+ assert check("cd x && pytest -k thing")
41
+ assert check("uv add foo") is None
42
+ assert check("uv pip install foo") is None
43
+ assert check("uv run pip install foo") is None
44
+ assert check("uv run pytest -q") is None
45
+ assert check("git commit -m 'fix pip install docs'") is None
46
+ assert check("git commit -m 'flaky pytest run'") is None
47
+ print("uv-guard selftest ok")
48
+
49
+
50
+ if __name__ == "__main__":
51
+ if "--selftest" in sys.argv:
52
+ _selftest()
53
+ sys.exit(0)
54
+ cmd = json.load(sys.stdin).get("tool_input", {}).get("command", "")
55
+ reason = check(cmd)
56
+ if reason:
57
+ print(reason, file=sys.stderr)
58
+ sys.exit(2)
@@ -0,0 +1,15 @@
1
+ {
2
+ "hooks": {
3
+ "PreToolUse": [
4
+ {
5
+ "matcher": "Bash",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "python3 \"$CLAUDE_PROJECT_DIR/.claude/hooks/uv-guard.py\""
10
+ }
11
+ ]
12
+ }
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "silica",
3
+ "description": "Silica for Claude Code — an Obsidian vault as persistent agent memory, served by a deterministic knowledge-graph engine.",
4
+ "owner": {
5
+ "name": "Alessandro Carosia"
6
+ },
7
+ "plugins": [
8
+ {
9
+ "name": "silica",
10
+ "source": "./",
11
+ "description": "Obsidian-vault memory over MCP: recall before answering, capture after learning."
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "silica",
3
+ "version": "0.1.0",
4
+ "description": "Obsidian-vault memory for coding agents: deterministic knowledge-graph engine served over MCP (semantic + literal search, gated note writing) with a skill teaching the recall/capture loop.",
5
+ "author": {
6
+ "name": "Alessandro Carosia"
7
+ },
8
+ "keywords": ["memory", "knowledge-graph", "obsidian", "vault", "mcp"],
9
+ "mcpServers": {
10
+ "silica": {
11
+ "command": "uv",
12
+ "args": [
13
+ "run",
14
+ "--project",
15
+ "${CLAUDE_PLUGIN_ROOT}",
16
+ "--with",
17
+ "mcp",
18
+ "silica",
19
+ "mcp"
20
+ ]
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,168 @@
1
+ # ============================================================================
2
+ # Silica — configuration
3
+ # Copy this file to .env. Every line is commented out; defaults apply when
4
+ # unset. Ordered from essential to expert: stop reading when you have enough.
5
+ # ============================================================================
6
+
7
+
8
+ # ----------------------------------------------------------------------------
9
+ # 1. REQUIRED (the first-run wizard fills these for you)
10
+ # ----------------------------------------------------------------------------
11
+
12
+ # Main LLM model (litellm format).
13
+ # Examples: openrouter/anthropic/claude-sonnet-4-20250514, openai/gpt-4o,
14
+ # ollama/llama3.1:8b, lmstudio/qwen/qwen3.5-9b
15
+ # SILICA_MODEL=openrouter/google/gemini-3.5-flash
16
+
17
+ # Provider preset (derived from SILICA_MODEL when unset).
18
+ # One of: openrouter, lmstudio, ollama, gemini, openai, groq, deepseek,
19
+ # mistral, xai, custom. Silica is tool-driven — with ollama pick a model that
20
+ # supports function-calling (llama3.1, qwen2.5); text-only models will stall.
21
+ # SILICA_PROVIDER=openrouter
22
+
23
+ # API key for the provider above. ANTHROPIC_API_KEY / OPENAI_API_KEY are only
24
+ # needed when SILICA_MODEL targets that provider directly (litellm reads them).
25
+ # OPENROUTER_API_KEY=
26
+ # ANTHROPIC_API_KEY=
27
+ # OPENAI_API_KEY=
28
+
29
+ # Obsidian vault path (required for the default fs backend)
30
+ # SILICA_VAULT=/path/to/your/vault
31
+
32
+
33
+ # ----------------------------------------------------------------------------
34
+ # 2. CUSTOM ENDPOINT — only with SILICA_PROVIDER=custom
35
+ # ----------------------------------------------------------------------------
36
+ # Any OpenAI-compatible server without a dedicated preset: vLLM, llama.cpp,
37
+ # LocalAI, Jan, or a hosted vendor. Both variables route the "custom" preset.
38
+
39
+ # SILICA_PROVIDER_BASE_URL=http://localhost:8080/v1
40
+ # SILICA_PROVIDER_API_KEY=
41
+
42
+
43
+ # ----------------------------------------------------------------------------
44
+ # 3. RACCOMANDED OPTIONS — embeddings, vault behavior, UI
45
+ # ----------------------------------------------------------------------------
46
+
47
+ # Embedding model for semantic search and deduplication.
48
+ # Example: qwen3-embedding-4b (LM Studio), text-embedding-3-small (OpenAI)
49
+ # SILICA_EMBEDDING_MODEL=qwen3-embedding-4b
50
+
51
+ # Embeddings endpoint (defaults to LM Studio local) and its API key
52
+ # SILICA_EMBEDDING_BASE_URL=http://localhost:1234/v1
53
+ # SILICA_EMBEDDING_API_KEY=lm-studio
54
+
55
+ # Git commit safety net for vault writes: off (default) or auto
56
+ # SILICA_GIT_COMMIT=off
57
+
58
+ # Inbox folder inside the vault, for staging inbound files. Default: Inbox
59
+ # SILICA_INBOX_DIR=Inbox
60
+
61
+ # Tool progress display level: off, new, all, verbose
62
+ # SILICA_TOOL_PROGRESS=all
63
+
64
+ # Show reasoning/thinking blocks from the model (True/False)
65
+ # SILICA_SHOW_THINKING=True
66
+
67
+ # Startup banner art (True → wordmark, False → plain one-liner)
68
+ # SILICA_SHOW_BANNER=True
69
+
70
+ # Debug logging on stderr (True/False)
71
+ # SILICA_VERBOSE=False
72
+
73
+
74
+ # ----------------------------------------------------------------------------
75
+ # 4. ADVANCED — workers, context, search, PDF
76
+ # ----------------------------------------------------------------------------
77
+
78
+ # Sub-agent worker model for background tasks (dedup, refiner). If unset,
79
+ # workers fall back to the main model configuration.
80
+ # SILICA_WORKER_MODEL=lmstudio/qwen/qwen3.5-9b
81
+ # SILICA_WORKER_PROVIDER=lmstudio
82
+ # SILICA_WORKER_API_KEY=lm-studio
83
+
84
+ # Concurrency caps: sub-agent threads (default 3), worker LLM calls (default 4)
85
+ # SILICA_SUBAGENT_MAX_CONCURRENT=3
86
+ # SILICA_WORKER_MAX_CONCURRENT=4
87
+
88
+ # Context window pin for LOCAL providers (LM Studio, Ollama) only; OpenRouter
89
+ # always uses the provider-reported context_length. Auto-detected if unset.
90
+ # SILICA_MAX_CONTEXT=60000
91
+
92
+ # Max generation tokens fallback. Default: 65536. Oversized values shrink the
93
+ # OpenRouter provider pool (endpoints with a smaller output cap are dropped).
94
+ # MAX_TOKENS=32768
95
+
96
+ # Tavily API key (enables /web-search). Bare TAVILY_API_KEY works as fallback.
97
+ # SILICA_TAVILY_API_KEY=
98
+
99
+ # PDF-to-Markdown converter: mineru (default, silica[pdf] extra), docling, or
100
+ # opendataloader. OCR languages are used by docling only.
101
+ # SILICA_PDF_PROVIDER=mineru
102
+ # SILICA_PDF_OCR_LANG=en,it,fr,de,es
103
+
104
+ # Driver backend: fs (default, headless filesystem). The Obsidian plugin
105
+ # bridge installs the ws backend live at dial-in; never set ws here.
106
+ # SILICA_BACKEND=fs
107
+
108
+ # Vault display name (prompt fallback when no vault path is set)
109
+ # SILICA_VAULT_NAME=My Vault
110
+
111
+ # Domain-pack overlay name, and override dir for recipe packs
112
+ # SILICA_DOMAIN=
113
+ # SILICA_DOMAINS_DIR=
114
+
115
+
116
+ # ----------------------------------------------------------------------------
117
+ # 5. RERANKER — optional recall reordering
118
+ # ----------------------------------------------------------------------------
119
+ # A cross-encoder reads query and candidate TOGETHER and reorders recall
120
+ # results. It is not an LLM and not an embedding model, so LM Studio and
121
+ # Ollama cannot serve one. The supported way needs no variables here:
122
+ #
123
+ # pip install silica[rerank]
124
+ #
125
+ # The cross-encoder then runs inside Silica (~2GB weights on first use).
126
+ # The variables below only point Silica at a reranker you already serve
127
+ # (llama.cpp/Infinity/Jina/Cohere, /rerank protocol); all three must be set
128
+ # and take priority over the in-process one. Local llama.cpp example:
129
+ # llama-server -m bge-reranker-v2-m3.gguf --reranking --port 1235
130
+ # SILICA_RERANK_BASE_URL=http://localhost:1235/v1
131
+ # SILICA_RERANK_MODEL=bge-reranker-v2-m3
132
+ # SILICA_RERANK_API_KEY=lm-studio
133
+
134
+
135
+ # ----------------------------------------------------------------------------
136
+ # 6. EXPERT — similarity thresholds, mindmap, token budgets
137
+ # ----------------------------------------------------------------------------
138
+ # All have safe defaults; override only to tune behavior/cost.
139
+
140
+ # Dedup: ≥ HIGH → patch existing note; ≤ LOW → new note. Title threshold
141
+ # promotes a pair into the borderline window; THEME is the keep floor.
142
+ # SILICA_SIM_THRESHOLD_HIGH=0.85
143
+ # SILICA_SIM_THRESHOLD_LOW=0.65
144
+ # SILICA_SIM_TITLE_THRESHOLD=0.80
145
+ # SILICA_SIM_THRESHOLD_THEME=0.35
146
+
147
+ # Candidate notes retrieved per note during dedup scans. Default: 5
148
+ # SILICA_DEDUP_SCAN_K=5
149
+
150
+ # Language for the co-occurrence graph. Default: auto
151
+ # SILICA_COOCCURRENCE_LANG=auto
152
+
153
+ # Mindmap (/map <note>): node cap, latent neighbours, wikilink BFS depth
154
+ # SILICA_MINDMAP_MAX_NODES=35
155
+ # SILICA_MINDMAP_LATENT_K=10
156
+ # SILICA_MINDMAP_HOPS=2
157
+
158
+ # Per-capability generation ceilings and distiller chunking.
159
+ # NOTE: read WITHOUT the SILICA_ prefix (bare names).
160
+ # DEDUP_MAX_TOKENS=1024
161
+ # ORPHAN_MAX_TOKENS=512
162
+ # EXPAND_MAX_TOKENS=4096
163
+ # ENRICH_MAX_TOKENS=256000
164
+ # REFINE_MAX_TOKENS=256000
165
+ # MODEL_CONTEXT_WINDOW=0 # 0 = auto-detect from the model
166
+ # DISTILLER_MAX_TOKENS=0 # 0 = derive from context window
167
+ # DISTILLER_TOKEN_SAFETY_MARGIN=2048
168
+ # DISTILLER_CHUNK_MAX_BYTES=30720 # 30 * 1024
@@ -0,0 +1,31 @@
1
+ # Dependabot version updates.
2
+ # Two ecosystems match this repo: uv-managed Python deps (pyproject.toml + uv.lock)
3
+ # and the pinned actions in .github/workflows/release.yml.
4
+ # Commit prefixes (build / ci) map to cliff.toml's "^build|^ci" -> Build & CI section.
5
+ version: 2
6
+ updates:
7
+ - package-ecosystem: "uv"
8
+ directory: "/"
9
+ schedule:
10
+ interval: "weekly"
11
+ commit-message:
12
+ prefix: "build"
13
+ include: "scope"
14
+ open-pull-requests-limit: 5
15
+ # Minor/patch bumps arrive as one grouped PR to cut solo-maintainer noise;
16
+ # majors stay individual so breaking changes are reviewed on their own.
17
+ groups:
18
+ python-minor-patch:
19
+ patterns: ["*"]
20
+ update-types: ["minor", "patch"]
21
+
22
+ - package-ecosystem: "github-actions"
23
+ directory: "/"
24
+ schedule:
25
+ interval: "weekly"
26
+ commit-message:
27
+ prefix: "ci"
28
+ include: "scope"
29
+ groups:
30
+ actions:
31
+ patterns: ["*"]
@@ -0,0 +1,67 @@
1
+ name: release
2
+
3
+ # Cut a release by pushing a SemVer tag, e.g.:
4
+ # git tag v0.3.0 && git push origin v0.3.0
5
+ # setuptools-scm reads the tag to stamp the version; git-cliff builds the notes.
6
+
7
+ on:
8
+ push:
9
+ tags:
10
+ - "v*"
11
+
12
+ permissions:
13
+ contents: write # create the GitHub Release
14
+ id-token: write # OIDC for PyPI Trusted Publishing (no stored token)
15
+
16
+ jobs:
17
+ release:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0 # full history + tags for setuptools-scm and git-cliff
23
+
24
+ - uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.11"
27
+
28
+ - name: Build sdist and wheel
29
+ run: |
30
+ python -m pip install --upgrade build
31
+ python -m build
32
+
33
+ - name: Verify built version matches the tag
34
+ run: ls -1 dist/ && python -c "import pathlib,sys; t='${{ github.ref_name }}'.lstrip('v'); files=[p.name for p in pathlib.Path('dist').glob('*.whl')]; sys.exit(0 if any(t.replace('-','_') in f for f in files) else f'tag {t} not in {files}')"
35
+
36
+ - name: Verify the wheel ships runtime assets
37
+ # Guards the package-data config: a wheel that drops these crashes at
38
+ # runtime (recipes/prompts/domains are loaded via Path(__file__)).
39
+ run: |
40
+ for f in \
41
+ silica/capabilities/prompts/distiller_prompt.txt \
42
+ silica/recipes/injector.yaml \
43
+ silica/domains/codebase.yaml \
44
+ silica/ui/web/static/index.html \
45
+ silica/.env.example; do
46
+ unzip -l dist/*.whl | grep -q "$f" || { echo "MISSING from wheel: $f"; exit 1; }
47
+ done
48
+ echo "all runtime assets present in wheel"
49
+
50
+ - name: Publish to PyPI
51
+ # Trusted Publishing via OIDC — the PyPI project must have this repo +
52
+ # workflow registered as a trusted publisher. No API token in secrets.
53
+ uses: pypa/gh-action-pypi-publish@release/v1
54
+
55
+ - name: Generate release notes
56
+ uses: orhun/git-cliff-action@v4
57
+ id: notes
58
+ with:
59
+ config: cliff.toml
60
+ args: --latest --strip header
61
+
62
+ - name: Publish GitHub release
63
+ uses: softprops/action-gh-release@v2
64
+ with:
65
+ body: ${{ steps.notes.outputs.content }}
66
+ files: dist/*
67
+ fail_on_unmatched_files: true
@@ -0,0 +1,190 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ bin/
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # setuptools-scm generated version file
30
+ silica/_version.py
31
+
32
+ # PyInstaller
33
+ # Usually these files are written by a python script from a template
34
+ # before PyInstaller builds the exe, so they can be injected at build time.
35
+ *.manifest
36
+ *.spec
37
+
38
+ # Installer logs
39
+ pip-log.txt
40
+ pip-delete-this-directory.txt
41
+
42
+ # Unit test / coverage reports
43
+ htmlcov/
44
+ .tox/
45
+ .nosenvy/
46
+ .noscript/
47
+ .pytest_cache/
48
+ .mypy_cache/
49
+ .ruff_cache/
50
+ .hatch/
51
+ .coverage
52
+ .coverage.*
53
+ .cache
54
+ nosetests.xml
55
+ coverage.xml
56
+ *.cover
57
+ *.py,cover
58
+ .hypothesis/
59
+ .run/
60
+ tests/fixtures/synthetic_vault/*
61
+
62
+ # Translations
63
+ *.mo
64
+ *.pot
65
+
66
+ # Django stuff:
67
+ *.log
68
+ local_settings.py
69
+ db.sqlite3
70
+ db.sqlite3-journal
71
+
72
+ # Sphinx documentation
73
+ docs/_build/
74
+
75
+ # PyBuilder
76
+ .pybuilder/
77
+ target/
78
+
79
+ # Jupyter Notebook
80
+ .ipynb_checkpoints
81
+
82
+ # IPython
83
+ profile_default/
84
+ ipython_config.py
85
+
86
+ # pyenv
87
+ # For a library or package, you might want to share your python version with the team.
88
+ # In that case, comment out the following line.
89
+ #.python-version
90
+
91
+ # pipenv
92
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
93
+ # However, if you're executing a system command that installs a package, you might want to ignore it.
94
+ #Pipfile.lock
95
+
96
+ # poetry
97
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
98
+ #poetry.lock
99
+
100
+ # pdm
101
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
102
+ .pdm-plugins/
103
+ .pdm-python/
104
+ .pdm-build/
105
+
106
+ # PEP 582; used by e.g. github.com/lincolnloop/layman and github.com/pdm-project/pdm
107
+ __pypackages__/
108
+
109
+ # Celery stuff
110
+ celerybeat-schedule
111
+ celerybeat.pid
112
+
113
+ # SageMath parsed files
114
+ *.sage.py
115
+
116
+ # Environments
117
+ .env
118
+ .venv
119
+ env/
120
+ venv/
121
+ ENV/
122
+ env.bak/
123
+ venv.bak/
124
+
125
+ # Spyder project settings
126
+ .spyderproject
127
+ .spyproject
128
+
129
+ # Rope project settings
130
+ .ropeproject
131
+
132
+ # mkdocs documentation
133
+ /site
134
+
135
+ # mypy
136
+ .mypy_cache/
137
+ .nosetests/
138
+ .pytest_cache/
139
+ .tox/
140
+ .htmlcov/
141
+ .coverage
142
+
143
+ # Editors
144
+ .vscode/
145
+ .idea/
146
+ *.swp
147
+ *.swo
148
+
149
+ # Graphs
150
+ graph.html
151
+
152
+ # OS files
153
+ .DS_Store
154
+ Thumbs.db
155
+
156
+ # Documentation
157
+ /docs/*
158
+
159
+ # Agents
160
+ /.agents
161
+ CLAUDE.md
162
+ # Ignore local/session Claude state, but track shared harness config.
163
+ /.claude/*
164
+ !/.claude/settings.json
165
+ !/.claude/hooks/
166
+ /memory
167
+ .superpowers
168
+
169
+ # Vault data (personal)
170
+ .silica/
171
+ .import_linter_cache/
172
+
173
+ # DB
174
+ ruvector.db
175
+ agentdb.rvf
176
+
177
+ # Locks
178
+ *.rvf.lock
179
+ CONTEXT.md
180
+
181
+ # Generated report — line numbers drift; regenerate with /ponytail-debt
182
+ PONYTAIL-DEBT.md
183
+
184
+ # Golden harness per-run output (only baseline.json is committed)
185
+ evals/golden/metrics.json
186
+ # Stamped per-run benchmark outputs (evals/<bench>/metrics.<run_id>.json)
187
+ evals/*/metrics.*.json
188
+
189
+ # benchmark vaults + frozen corpora (never committed)
190
+ bench/