oh-my-wiki 2.7.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.
- oh_my_wiki-2.7.0/.claude-plugin/marketplace.json +10 -0
- oh_my_wiki-2.7.0/.claude-plugin/plugin.json +58 -0
- oh_my_wiki-2.7.0/LICENSE +21 -0
- oh_my_wiki-2.7.0/MANIFEST.in +21 -0
- oh_my_wiki-2.7.0/PKG-INFO +261 -0
- oh_my_wiki-2.7.0/README.md +238 -0
- oh_my_wiki-2.7.0/SKILL.md +181 -0
- oh_my_wiki-2.7.0/backends/claude.json +17 -0
- oh_my_wiki-2.7.0/backends/codex.json +17 -0
- oh_my_wiki-2.7.0/backends/gemini.json +12 -0
- oh_my_wiki-2.7.0/backends/opencode.json +17 -0
- oh_my_wiki-2.7.0/commands/autoresearch.md +154 -0
- oh_my_wiki-2.7.0/commands/connections.md +17 -0
- oh_my_wiki-2.7.0/commands/create.md +77 -0
- oh_my_wiki-2.7.0/commands/delete.md +38 -0
- oh_my_wiki-2.7.0/commands/edit.md +74 -0
- oh_my_wiki-2.7.0/commands/find.md +44 -0
- oh_my_wiki-2.7.0/commands/hot-cache.md +49 -0
- oh_my_wiki-2.7.0/commands/import.md +26 -0
- oh_my_wiki-2.7.0/commands/inbox.md +22 -0
- oh_my_wiki-2.7.0/commands/ingest.md +167 -0
- oh_my_wiki-2.7.0/commands/lint.md +96 -0
- oh_my_wiki-2.7.0/commands/menu.md +16 -0
- oh_my_wiki-2.7.0/commands/migrate.md +31 -0
- oh_my_wiki-2.7.0/commands/move.md +37 -0
- oh_my_wiki-2.7.0/commands/open.md +35 -0
- oh_my_wiki-2.7.0/commands/persona-consistency.md +66 -0
- oh_my_wiki-2.7.0/commands/persona-curate-index.md +38 -0
- oh_my_wiki-2.7.0/commands/persona-factcheck.md +72 -0
- oh_my_wiki-2.7.0/commands/persona-librarian.md +36 -0
- oh_my_wiki-2.7.0/commands/persona-terminology.md +86 -0
- oh_my_wiki-2.7.0/commands/query.md +87 -0
- oh_my_wiki-2.7.0/commands/recall-llm.md +30 -0
- oh_my_wiki-2.7.0/commands/review.md +23 -0
- oh_my_wiki-2.7.0/commands/vault-forget.md +31 -0
- oh_my_wiki-2.7.0/commands/vault-import-memo.md +79 -0
- oh_my_wiki-2.7.0/commands/vault-list.md +34 -0
- oh_my_wiki-2.7.0/commands/vault-setup.md +68 -0
- oh_my_wiki-2.7.0/commands/vault-use.md +25 -0
- oh_my_wiki-2.7.0/hooks/hooks.json +20 -0
- oh_my_wiki-2.7.0/oh_my_wiki.egg-info/PKG-INFO +261 -0
- oh_my_wiki-2.7.0/oh_my_wiki.egg-info/SOURCES.txt +221 -0
- oh_my_wiki-2.7.0/oh_my_wiki.egg-info/dependency_links.txt +1 -0
- oh_my_wiki-2.7.0/oh_my_wiki.egg-info/entry_points.txt +2 -0
- oh_my_wiki-2.7.0/oh_my_wiki.egg-info/requires.txt +14 -0
- oh_my_wiki-2.7.0/oh_my_wiki.egg-info/top_level.txt +1 -0
- oh_my_wiki-2.7.0/omw/SKILL.md +36 -0
- oh_my_wiki-2.7.0/personas/consistency-checker.md +72 -0
- oh_my_wiki-2.7.0/personas/curator.md +40 -0
- oh_my_wiki-2.7.0/personas/fact-checker.md +110 -0
- oh_my_wiki-2.7.0/personas/terminology-manager.md +123 -0
- oh_my_wiki-2.7.0/personas/wiki-librarian.md +46 -0
- oh_my_wiki-2.7.0/pyproject.toml +51 -0
- oh_my_wiki-2.7.0/references/adapter-spec.md +35 -0
- oh_my_wiki-2.7.0/references/architecture.md +36 -0
- oh_my_wiki-2.7.0/references/auto-recall-hook-design.md +202 -0
- oh_my_wiki-2.7.0/references/frontmatter.md +27 -0
- oh_my_wiki-2.7.0/references/messenger-api.md +101 -0
- oh_my_wiki-2.7.0/references/schema-sqlite.md +44 -0
- oh_my_wiki-2.7.0/references/socratic-dialog.md +39 -0
- oh_my_wiki-2.7.0/references/vault-modes.md +13 -0
- oh_my_wiki-2.7.0/references/wizard-flow.md +43 -0
- oh_my_wiki-2.7.0/schemas/article.yml +1 -0
- oh_my_wiki-2.7.0/schemas/base.yml +13 -0
- oh_my_wiki-2.7.0/schemas/book.yml +1 -0
- oh_my_wiki-2.7.0/schemas/comparison.yml +1 -0
- oh_my_wiki-2.7.0/schemas/concept.yml +1 -0
- oh_my_wiki-2.7.0/schemas/doc.yml +1 -0
- oh_my_wiki-2.7.0/schemas/entity.yml +3 -0
- oh_my_wiki-2.7.0/schemas/link.yml +1 -0
- oh_my_wiki-2.7.0/schemas/meta.yml +3 -0
- oh_my_wiki-2.7.0/schemas/note.yml +1 -0
- oh_my_wiki-2.7.0/schemas/paper.yml +1 -0
- oh_my_wiki-2.7.0/schemas/summary.yml +1 -0
- oh_my_wiki-2.7.0/schemas/synthesis.yml +1 -0
- oh_my_wiki-2.7.0/schemas/video.yml +1 -0
- oh_my_wiki-2.7.0/scripts/__init__.py +0 -0
- oh_my_wiki-2.7.0/scripts/adapters.py +268 -0
- oh_my_wiki-2.7.0/scripts/agent_skills.py +121 -0
- oh_my_wiki-2.7.0/scripts/autoresearch.py +322 -0
- oh_my_wiki-2.7.0/scripts/backends.py +244 -0
- oh_my_wiki-2.7.0/scripts/banner.py +109 -0
- oh_my_wiki-2.7.0/scripts/community.py +168 -0
- oh_my_wiki-2.7.0/scripts/config.py +74 -0
- oh_my_wiki-2.7.0/scripts/db/__init__.py +0 -0
- oh_my_wiki-2.7.0/scripts/db/schema.sql +79 -0
- oh_my_wiki-2.7.0/scripts/embed.py +68 -0
- oh_my_wiki-2.7.0/scripts/entity_link.py +105 -0
- oh_my_wiki-2.7.0/scripts/fetch.py +100 -0
- oh_my_wiki-2.7.0/scripts/fetch_chromium.py +36 -0
- oh_my_wiki-2.7.0/scripts/fetch_errors.py +18 -0
- oh_my_wiki-2.7.0/scripts/fetch_youtube.py +64 -0
- oh_my_wiki-2.7.0/scripts/frontmatter.py +45 -0
- oh_my_wiki-2.7.0/scripts/fts.py +118 -0
- oh_my_wiki-2.7.0/scripts/glossary.py +272 -0
- oh_my_wiki-2.7.0/scripts/hot_cache.py +202 -0
- oh_my_wiki-2.7.0/scripts/import_memo.py +110 -0
- oh_my_wiki-2.7.0/scripts/import_source.py +180 -0
- oh_my_wiki-2.7.0/scripts/inbox.py +128 -0
- oh_my_wiki-2.7.0/scripts/ingest.py +184 -0
- oh_my_wiki-2.7.0/scripts/inline_fields.py +36 -0
- oh_my_wiki-2.7.0/scripts/links.py +293 -0
- oh_my_wiki-2.7.0/scripts/lint.py +155 -0
- oh_my_wiki-2.7.0/scripts/maint.py +47 -0
- oh_my_wiki-2.7.0/scripts/memo_ops.py +177 -0
- oh_my_wiki-2.7.0/scripts/omw_cli.py +809 -0
- oh_my_wiki-2.7.0/scripts/paths.py +88 -0
- oh_my_wiki-2.7.0/scripts/persona_export.py +74 -0
- oh_my_wiki-2.7.0/scripts/personas.py +325 -0
- oh_my_wiki-2.7.0/scripts/query.py +42 -0
- oh_my_wiki-2.7.0/scripts/recall.py +464 -0
- oh_my_wiki-2.7.0/scripts/registry.py +304 -0
- oh_my_wiki-2.7.0/scripts/reindex.py +210 -0
- oh_my_wiki-2.7.0/scripts/review.py +239 -0
- oh_my_wiki-2.7.0/scripts/schema.py +151 -0
- oh_my_wiki-2.7.0/scripts/search/__init__.py +58 -0
- oh_my_wiki-2.7.0/scripts/search/base.py +43 -0
- oh_my_wiki-2.7.0/scripts/search/providers/__init__.py +0 -0
- oh_my_wiki-2.7.0/scripts/search/providers/brave.py +26 -0
- oh_my_wiki-2.7.0/scripts/search/providers/brightdata.py +45 -0
- oh_my_wiki-2.7.0/scripts/search/providers/exa.py +24 -0
- oh_my_wiki-2.7.0/scripts/search/providers/firecrawl.py +35 -0
- oh_my_wiki-2.7.0/scripts/search/providers/tavily.py +20 -0
- oh_my_wiki-2.7.0/scripts/search_index.py +197 -0
- oh_my_wiki-2.7.0/scripts/server.py +187 -0
- oh_my_wiki-2.7.0/scripts/setup_wizard.py +533 -0
- oh_my_wiki-2.7.0/scripts/slugify.py +22 -0
- oh_my_wiki-2.7.0/scripts/supersede.py +24 -0
- oh_my_wiki-2.7.0/scripts/text_match.py +36 -0
- oh_my_wiki-2.7.0/scripts/urls.py +72 -0
- oh_my_wiki-2.7.0/scripts/usage.py +52 -0
- oh_my_wiki-2.7.0/scripts/vector_index.py +77 -0
- oh_my_wiki-2.7.0/scripts/view.py +106 -0
- oh_my_wiki-2.7.0/scripts/viewers/__init__.py +21 -0
- oh_my_wiki-2.7.0/scripts/viewers/base.py +61 -0
- oh_my_wiki-2.7.0/scripts/viewers/logseq.py +42 -0
- oh_my_wiki-2.7.0/scripts/viewers/obsidian.py +136 -0
- oh_my_wiki-2.7.0/scripts/wiki_lint.py +354 -0
- oh_my_wiki-2.7.0/scripts/wizard.py +126 -0
- oh_my_wiki-2.7.0/setup.cfg +4 -0
- oh_my_wiki-2.7.0/setup.py +65 -0
- oh_my_wiki-2.7.0/tests/test_adapters.py +109 -0
- oh_my_wiki-2.7.0/tests/test_agent_skills.py +96 -0
- oh_my_wiki-2.7.0/tests/test_autoresearch.py +413 -0
- oh_my_wiki-2.7.0/tests/test_backends.py +370 -0
- oh_my_wiki-2.7.0/tests/test_banner.py +141 -0
- oh_my_wiki-2.7.0/tests/test_command_db_paths.py +27 -0
- oh_my_wiki-2.7.0/tests/test_community.py +171 -0
- oh_my_wiki-2.7.0/tests/test_confidence_freshness.py +199 -0
- oh_my_wiki-2.7.0/tests/test_config.py +38 -0
- oh_my_wiki-2.7.0/tests/test_db_default_resolution.py +43 -0
- oh_my_wiki-2.7.0/tests/test_doctor_fetch_deps.py +11 -0
- oh_my_wiki-2.7.0/tests/test_embed.py +15 -0
- oh_my_wiki-2.7.0/tests/test_entity_link.py +105 -0
- oh_my_wiki-2.7.0/tests/test_fetch.py +75 -0
- oh_my_wiki-2.7.0/tests/test_fetch_chromium.py +25 -0
- oh_my_wiki-2.7.0/tests/test_fetch_youtube.py +59 -0
- oh_my_wiki-2.7.0/tests/test_frontmatter.py +49 -0
- oh_my_wiki-2.7.0/tests/test_fts.py +63 -0
- oh_my_wiki-2.7.0/tests/test_fts_visibility.py +70 -0
- oh_my_wiki-2.7.0/tests/test_glossary.py +271 -0
- oh_my_wiki-2.7.0/tests/test_hot_cache.py +146 -0
- oh_my_wiki-2.7.0/tests/test_hybrid_fusion.py +44 -0
- oh_my_wiki-2.7.0/tests/test_import_memo.py +83 -0
- oh_my_wiki-2.7.0/tests/test_import_source.py +156 -0
- oh_my_wiki-2.7.0/tests/test_inbox_crud.py +40 -0
- oh_my_wiki-2.7.0/tests/test_inbox_run.py +39 -0
- oh_my_wiki-2.7.0/tests/test_inbox_schema.py +45 -0
- oh_my_wiki-2.7.0/tests/test_ingest.py +153 -0
- oh_my_wiki-2.7.0/tests/test_inline_fields.py +37 -0
- oh_my_wiki-2.7.0/tests/test_install_sh_pep668.py +4 -0
- oh_my_wiki-2.7.0/tests/test_integration_plan_b.py +94 -0
- oh_my_wiki-2.7.0/tests/test_integration_plan_c.py +119 -0
- oh_my_wiki-2.7.0/tests/test_integration_v2_0.py +64 -0
- oh_my_wiki-2.7.0/tests/test_integration_v2_2b.py +115 -0
- oh_my_wiki-2.7.0/tests/test_links.py +362 -0
- oh_my_wiki-2.7.0/tests/test_lint.py +241 -0
- oh_my_wiki-2.7.0/tests/test_maint.py +40 -0
- oh_my_wiki-2.7.0/tests/test_memo_ops.py +117 -0
- oh_my_wiki-2.7.0/tests/test_memo_ops_cli.py +48 -0
- oh_my_wiki-2.7.0/tests/test_migrate.py +90 -0
- oh_my_wiki-2.7.0/tests/test_omw_cli.py +517 -0
- oh_my_wiki-2.7.0/tests/test_omw_cli_inbox.py +79 -0
- oh_my_wiki-2.7.0/tests/test_omw_cli_setup_agents.py +13 -0
- oh_my_wiki-2.7.0/tests/test_omw_cli_visibility.py +59 -0
- oh_my_wiki-2.7.0/tests/test_omw_improvements.py +256 -0
- oh_my_wiki-2.7.0/tests/test_packaging.py +67 -0
- oh_my_wiki-2.7.0/tests/test_paths.py +75 -0
- oh_my_wiki-2.7.0/tests/test_persona_export.py +58 -0
- oh_my_wiki-2.7.0/tests/test_personas.py +448 -0
- oh_my_wiki-2.7.0/tests/test_personas_v2_2b.py +137 -0
- oh_my_wiki-2.7.0/tests/test_plugin_manifest.py +221 -0
- oh_my_wiki-2.7.0/tests/test_query.py +50 -0
- oh_my_wiki-2.7.0/tests/test_recall.py +8 -0
- oh_my_wiki-2.7.0/tests/test_recall_llm.py +96 -0
- oh_my_wiki-2.7.0/tests/test_recall_pretool.py +31 -0
- oh_my_wiki-2.7.0/tests/test_registry.py +204 -0
- oh_my_wiki-2.7.0/tests/test_registry_cli.py +46 -0
- oh_my_wiki-2.7.0/tests/test_registry_visibility.py +98 -0
- oh_my_wiki-2.7.0/tests/test_reindex.py +327 -0
- oh_my_wiki-2.7.0/tests/test_reindex_visibility.py +32 -0
- oh_my_wiki-2.7.0/tests/test_review.py +97 -0
- oh_my_wiki-2.7.0/tests/test_schema.py +233 -0
- oh_my_wiki-2.7.0/tests/test_schema_visibility.py +8 -0
- oh_my_wiki-2.7.0/tests/test_scrape_providers.py +28 -0
- oh_my_wiki-2.7.0/tests/test_search.py +45 -0
- oh_my_wiki-2.7.0/tests/test_search_index.py +217 -0
- oh_my_wiki-2.7.0/tests/test_search_index_visibility.py +37 -0
- oh_my_wiki-2.7.0/tests/test_search_providers.py +102 -0
- oh_my_wiki-2.7.0/tests/test_search_resolve.py +44 -0
- oh_my_wiki-2.7.0/tests/test_server.py +257 -0
- oh_my_wiki-2.7.0/tests/test_server_visibility.py +26 -0
- oh_my_wiki-2.7.0/tests/test_setup_wizard.py +301 -0
- oh_my_wiki-2.7.0/tests/test_slugify.py +26 -0
- oh_my_wiki-2.7.0/tests/test_supersede.py +48 -0
- oh_my_wiki-2.7.0/tests/test_text_match.py +49 -0
- oh_my_wiki-2.7.0/tests/test_urls.py +47 -0
- oh_my_wiki-2.7.0/tests/test_vault_mode_scaffolds.py +59 -0
- oh_my_wiki-2.7.0/tests/test_vector_index.py +26 -0
- oh_my_wiki-2.7.0/tests/test_viewers.py +245 -0
- oh_my_wiki-2.7.0/tests/test_wiki_lint.py +75 -0
- oh_my_wiki-2.7.0/tests/test_wiki_lint_v2.py +125 -0
- oh_my_wiki-2.7.0/tests/test_wizard.py +73 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oh-my-wiki-marketplace",
|
|
3
|
+
"description": "oh-my-wiki — the Karpathy LLM Wiki skill, distributed as its own marketplace. After `/plugin marketplace add dandacompany/oh-my-wiki`, install with `/plugin install oh-my-wiki@oh-my-wiki-marketplace`.",
|
|
4
|
+
"plugins": [
|
|
5
|
+
{
|
|
6
|
+
"name": "oh-my-wiki",
|
|
7
|
+
"manifest": "./.claude-plugin/plugin.json"
|
|
8
|
+
}
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oh-my-wiki",
|
|
3
|
+
"version": "2.7.0",
|
|
4
|
+
"description": "Karpathy-style LLM Wiki skill with multi-vault sqlite registry. Capture sources, build a structured wiki, query it with cited answers. Also addressable as 'omw'.",
|
|
5
|
+
"author": "dandacompany",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://github.com/dandacompany/oh-my-wiki",
|
|
8
|
+
"repository": "https://github.com/dandacompany/oh-my-wiki",
|
|
9
|
+
"trigger_keywords": [
|
|
10
|
+
"open my wiki",
|
|
11
|
+
"ingest this",
|
|
12
|
+
"find a note about X",
|
|
13
|
+
"what does my wiki say about X",
|
|
14
|
+
"omw",
|
|
15
|
+
"use omw",
|
|
16
|
+
"/omw",
|
|
17
|
+
"위키 열어줘",
|
|
18
|
+
"이거 정리해줘",
|
|
19
|
+
"X 관련 노트 찾아줘",
|
|
20
|
+
"위키에 물어봐",
|
|
21
|
+
"오엠더블유",
|
|
22
|
+
"autoresearch this",
|
|
23
|
+
"research this for me",
|
|
24
|
+
"이거 리서치해줘",
|
|
25
|
+
"이거 조사해줘",
|
|
26
|
+
"fact-check this",
|
|
27
|
+
"verify the claims",
|
|
28
|
+
"check this for contradictions",
|
|
29
|
+
"build a glossary",
|
|
30
|
+
"팩트체크해줘",
|
|
31
|
+
"모순 있는지 봐줘",
|
|
32
|
+
"용어집 만들어줘"
|
|
33
|
+
],
|
|
34
|
+
"ops": [
|
|
35
|
+
"vault-setup",
|
|
36
|
+
"vault-use",
|
|
37
|
+
"vault-list",
|
|
38
|
+
"vault-forget",
|
|
39
|
+
"vault-import-memo",
|
|
40
|
+
"create",
|
|
41
|
+
"find",
|
|
42
|
+
"open",
|
|
43
|
+
"edit",
|
|
44
|
+
"move",
|
|
45
|
+
"delete",
|
|
46
|
+
"ingest",
|
|
47
|
+
"query",
|
|
48
|
+
"autoresearch",
|
|
49
|
+
"persona-factcheck",
|
|
50
|
+
"persona-consistency",
|
|
51
|
+
"persona-terminology",
|
|
52
|
+
"lint",
|
|
53
|
+
"hot-cache"
|
|
54
|
+
],
|
|
55
|
+
"skill_path": "./SKILL.md",
|
|
56
|
+
"commands_path": "./commands",
|
|
57
|
+
"scripts_path": "./scripts"
|
|
58
|
+
}
|
oh_my_wiki-2.7.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dante (datapod.k@gmail.com)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Include the repo-root bundle dirs in the sdist so a wheel built FROM the sdist
|
|
2
|
+
# (e.g. `pip install --no-binary oh-my-wiki`) can still run setup.py's build_py
|
|
3
|
+
# bundle copy. A directly-built wheel doesn't need these (build_py reads them
|
|
4
|
+
# from the working tree), but an sdist must carry the source to stay buildable.
|
|
5
|
+
graft schemas
|
|
6
|
+
graft personas
|
|
7
|
+
graft backends
|
|
8
|
+
graft commands
|
|
9
|
+
graft omw
|
|
10
|
+
graft references
|
|
11
|
+
graft hooks
|
|
12
|
+
graft .claude-plugin
|
|
13
|
+
|
|
14
|
+
# Root files the build-time bundle copy needs in the sdist (README is also the
|
|
15
|
+
# PyPI long-description source; SKILL.md is the skill entry point).
|
|
16
|
+
include README.md
|
|
17
|
+
include SKILL.md
|
|
18
|
+
|
|
19
|
+
global-exclude __pycache__ *.pyc *.pyo
|
|
20
|
+
global-exclude *.egg-info
|
|
21
|
+
prune scripts/_bundle
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: oh-my-wiki
|
|
3
|
+
Version: 2.7.0
|
|
4
|
+
Summary: Karpathy-style LLM Wiki skill with multi-vault sqlite registry and Socratic wizard
|
|
5
|
+
Author: dandacompany
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Keywords: wiki,llm,rag,sqlite,knowledge-base,claude,agent
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: pyyaml>=6.0
|
|
12
|
+
Requires-Dist: pypdf>=4.0
|
|
13
|
+
Provides-Extra: dev
|
|
14
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
15
|
+
Requires-Dist: pytest-rerunfailures>=14; extra == "dev"
|
|
16
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
17
|
+
Provides-Extra: wizard
|
|
18
|
+
Requires-Dist: questionary>=2.0; extra == "wizard"
|
|
19
|
+
Provides-Extra: embedding
|
|
20
|
+
Requires-Dist: sqlite-vec>=0.1; extra == "embedding"
|
|
21
|
+
Requires-Dist: openai>=1.0; extra == "embedding"
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
# oh-my-wiki (OMW)
|
|
25
|
+
|
|
26
|
+
[](https://github.com/dandacompany/oh-my-wiki/actions/workflows/ci.yml)
|
|
27
|
+
[](https://opensource.org/licenses/MIT)
|
|
28
|
+
[](https://github.com/dandacompany/oh-my-wiki#install)
|
|
29
|
+
[](https://skills.sh/)
|
|
30
|
+
|
|
31
|
+
A host-universal LLM-wiki you drive from your AI coding agent (Claude Code / Codex / Gemini).
|
|
32
|
+
|
|
33
|
+
oh-my-wiki exposes exactly two surfaces. The **`omw` CLI** handles deterministic ops — `omw setup`, `omw vault create`, `omw lint`, `omw schema list`, `omw supersede`, `omw review`, `omw links`, `omw fields`, `omw view`, `omw doctor` — with no LLM required. The **`omw` skill** brings natural-language reasoning inside your AI session: ingest, query, autoresearch, and a small set of wiki-maintenance personas (librarian, curator, fact-checker, consistency-checker, terminology-manager). The model is _personas propose → you confirm → deterministic ops execute_, so every file change is auditable. omw stays focused on the wiki — multi-step orchestration is left to your host AI agent (Claude Code / Codex / Gemini), not reimplemented here.
|
|
34
|
+
|
|
35
|
+
**Short alias:** `OMW` (lowercase `omw`). Both `oh-my-wiki` and `omw` register as skills and respond to the same trigger phrases.
|
|
36
|
+
|
|
37
|
+
**Tutorial:** Walk through real dialogs and verified CLI examples in [TUTORIAL.md](./TUTORIAL.md) (English) or [TUTORIAL.ko.md](./TUTORIAL.ko.md) (한국어).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## What's new in v3
|
|
42
|
+
|
|
43
|
+
- **Schemas** — 13 built-in page types (`omw schema list/show`), with per-vault overrides in `<vault>/schemas/`
|
|
44
|
+
- **Confidence + supersede** — `confidence` frontmatter field; `omw supersede` retires old pages cleanly
|
|
45
|
+
- **Review queue (SR)** — spaced-repetition via `omw review due` / `omw review done`
|
|
46
|
+
- **Web search** — `omw search` queries an external provider (brave/tavily/exa/…); `omw serve` exposes vault FTS5 as a local retrieve-only HTTP API on port 8765
|
|
47
|
+
- **Entity-linking** — `omw links suggest` / `omw links link` auto-inserts `[[slug|Name]]` references
|
|
48
|
+
- **Inline fields** — `omw fields` reads `key::` inline syntax alongside frontmatter
|
|
49
|
+
- **Korean matching** — Korean entity names with josa (`카르파시가`) are suggested and linked correctly
|
|
50
|
+
- **Note viewers** — `omw view` opens the active vault, a page, or a search in Obsidian or Logseq (URI schemes, no plugin needed); `omw setup viewer` scaffolds the viewer config
|
|
51
|
+
- **Visibility (secure-by-default)** — `omw visibility get/set` marks pages `public`/`private`; `omw serve` exposes only public pages
|
|
52
|
+
- **URL inbox + fetch** — `omw fetch <url>` saves a web page or YouTube transcript to `raw/` (tiered urllib → chromium → cloud, SSRF-guarded); `omw inbox add/list/run/remove` queues URLs for batch fetch
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Install
|
|
57
|
+
|
|
58
|
+
Choose whichever path fits your environment. After any path, run `omw doctor` to confirm everything is wired correctly.
|
|
59
|
+
|
|
60
|
+
### Path A — Skills CLI (recommended for Claude Code users)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
skills add dandacompany/oh-my-wiki@oh-my-wiki -g -y --copy -a claude-code
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This installs the skill into `~/.claude/skills/` and registers both the `oh-my-wiki` and `omw` short-alias skill names.
|
|
67
|
+
|
|
68
|
+
### Path B — Claude Code plugin marketplace
|
|
69
|
+
|
|
70
|
+
In any Claude Code session:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
/plugin marketplace add dandacompany/oh-my-wiki
|
|
74
|
+
/plugin install oh-my-wiki@oh-my-wiki-marketplace
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Update later with `/plugin marketplace update oh-my-wiki-marketplace`.
|
|
78
|
+
|
|
79
|
+
### Path C — git clone + install script (developers, Codex CLI users)
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git clone https://github.com/dandacompany/oh-my-wiki
|
|
83
|
+
cd oh-my-wiki
|
|
84
|
+
bash bin/install.sh
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The installer checks for Python 3.10+, pip-installs the package editable, creates `~/.claude/skills/oh-my-wiki` and `~/.claude/skills/omw` symlinks (idempotent), runs `pytest -q` to verify, and prints next steps. Add `--dev` to include pytest/ruff extras. Use `--force` to replace existing symlinks without a prompt; `--no-test` to skip the test step. Run `bash bin/install.sh --help` for all flags.
|
|
88
|
+
|
|
89
|
+
### Verify the install
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
omw doctor
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
omw home: /Users/you/.omw ok
|
|
97
|
+
registry: /Users/you/.omw/registry.db ok
|
|
98
|
+
* demo (wiki/markdown) /Users/you/.omw/vaults/demo
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Quickstart (~60 seconds)
|
|
104
|
+
|
|
105
|
+
**Step 1 — Run the setup wizard**
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
omw setup
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Follow the prompts to configure your first vault, search provider, and persona preferences. Accept the defaults for a fast start.
|
|
112
|
+
|
|
113
|
+
**Step 2 — Check status**
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
omw status
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"vault_count": 0,
|
|
122
|
+
"active": null,
|
|
123
|
+
"needs": "setup",
|
|
124
|
+
"vaults": []
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Step 3 — Create your first vault**
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
omw vault create demo --mode wiki
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"created": "demo",
|
|
137
|
+
"path": "~/.omw/vaults/demo",
|
|
138
|
+
"mode": "wiki",
|
|
139
|
+
"type": "markdown"
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
omw vault list
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
[
|
|
149
|
+
{
|
|
150
|
+
"name": "demo",
|
|
151
|
+
"path": "~/.omw/vaults/demo",
|
|
152
|
+
"mode": "wiki",
|
|
153
|
+
"type": "markdown",
|
|
154
|
+
"is_active": true
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Step 4 — Add a note (in your AI session)**
|
|
160
|
+
|
|
161
|
+
Open Claude Code (or Codex / Gemini) and say:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
ingest this
|
|
165
|
+
|
|
166
|
+
Andrej Karpathy calls the LLM Wiki a "compounding knowledge artifact". Every
|
|
167
|
+
source gets saved verbatim to raw/, a summary lands at wiki/summaries/, and
|
|
168
|
+
the entities and concepts that appeared get their own pages. 10–15 page touches
|
|
169
|
+
per ingest is normal.
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Step 5 — Run a lint check**
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
omw lint
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"vault_id": 1,
|
|
181
|
+
"vault_path": "~/.omw/vaults/demo",
|
|
182
|
+
"frontmatter_issues": [],
|
|
183
|
+
"drift": { "missing_files": [], "mtime_drift": [] },
|
|
184
|
+
"links": {
|
|
185
|
+
"broken": [],
|
|
186
|
+
"orphans": [],
|
|
187
|
+
"index_drift": { "missing_from_index": [], "dangling_in_index": [] },
|
|
188
|
+
"contradictions": [],
|
|
189
|
+
"supersedes": [],
|
|
190
|
+
"superseded_unmarked": [],
|
|
191
|
+
"link_suggestions": []
|
|
192
|
+
},
|
|
193
|
+
"auto_fix_hints": []
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
→ Full tutorial: [TUTORIAL.md](TUTORIAL.md) · [한국어](TUTORIAL.ko.md)
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Architecture
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
SKILL.md dispatcher → commands/<op>.md (LLM procedure) → scripts/<op>.py (deterministic I/O)
|
|
205
|
+
└─ registry.py → ~/.omw/registry.db (sqlite)
|
|
206
|
+
└─ adapters.py → filesystem (markdown / obsidian)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
The 17 CLI subcommands:
|
|
210
|
+
|
|
211
|
+
| Subcommand | Purpose |
|
|
212
|
+
| ------------ | -------------------------------------------------------------------- |
|
|
213
|
+
| `status` | Show active vault and registry state |
|
|
214
|
+
| `vault` | Create, list, use, forget vaults |
|
|
215
|
+
| `lint` | Structural health check (frontmatter + links) |
|
|
216
|
+
| `search` | Web search via the configured external provider (brave/tavily/exa/…) |
|
|
217
|
+
| `serve` | Local retrieve-only HTTP query API (port 8765) — public pages only |
|
|
218
|
+
| `view` | Open the vault / a page / a search in Obsidian or Logseq |
|
|
219
|
+
| `visibility` | Get / set a page's public/private visibility (`get` / `set`) |
|
|
220
|
+
| `schema` | List / inspect page-type schemas |
|
|
221
|
+
| `supersede` | Mark a page superseded by a newer one |
|
|
222
|
+
| `review` | Spaced-repetition review queue (due / done) |
|
|
223
|
+
| `links` | Suggest and insert `[[slug]]` entity links |
|
|
224
|
+
| `fields` | Read frontmatter + inline `key::` fields |
|
|
225
|
+
| `import` | Import an existing folder as a vault |
|
|
226
|
+
| `fetch` | Fetch one URL (web page / YouTube transcript) into `raw/` |
|
|
227
|
+
| `inbox` | Queue URLs and batch-fetch them into `raw/` (add/list/run/remove) |
|
|
228
|
+
| `setup` | Interactive setup wizard |
|
|
229
|
+
| `doctor` | Verify install health |
|
|
230
|
+
|
|
231
|
+
> **Visibility (secure-by-default):** `omw serve` returns only pages with
|
|
232
|
+
> `visibility: public` in their frontmatter. Pages without the field are treated as
|
|
233
|
+
> private and never served. Publish pages explicitly with
|
|
234
|
+
> `omw visibility set <relpath...> public`.
|
|
235
|
+
|
|
236
|
+
The skill also exposes natural-language ops via your AI session: `ingest`, `query`, `autoresearch`, `find`, `edit`, `move`, `delete`, and wiki-maintenance persona invocations (`fact-check`, `consistency-check`, `build glossary`).
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Storage
|
|
241
|
+
|
|
242
|
+
- The vault registry lives at `~/.omw/registry.db` (override with `OMW_HOME`) as a per-user sqlite database.
|
|
243
|
+
- The note index is regenerated by `scripts/reindex.py` after every mutation.
|
|
244
|
+
- Your files stay in the vault path you chose. oh-my-wiki never touches them outside the op you explicitly invoked.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Development
|
|
249
|
+
|
|
250
|
+
- `pytest -v` runs all tests.
|
|
251
|
+
- `ruff check scripts/ tests/` runs the linter.
|
|
252
|
+
- `omw status` inspects the registry/vault state.
|
|
253
|
+
- `python3 -m scripts.lint --vault-id N` runs the health check on a specific vault.
|
|
254
|
+
|
|
255
|
+
Continuous integration runs on GitHub Actions, across a matrix of Python 3.10, 3.11, and 3.12 on both ubuntu-latest and macos-latest.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## License
|
|
260
|
+
|
|
261
|
+
Released under the MIT License. See [LICENSE](./LICENSE) for the full text.
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# oh-my-wiki (OMW)
|
|
2
|
+
|
|
3
|
+
[](https://github.com/dandacompany/oh-my-wiki/actions/workflows/ci.yml)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://github.com/dandacompany/oh-my-wiki#install)
|
|
6
|
+
[](https://skills.sh/)
|
|
7
|
+
|
|
8
|
+
A host-universal LLM-wiki you drive from your AI coding agent (Claude Code / Codex / Gemini).
|
|
9
|
+
|
|
10
|
+
oh-my-wiki exposes exactly two surfaces. The **`omw` CLI** handles deterministic ops — `omw setup`, `omw vault create`, `omw lint`, `omw schema list`, `omw supersede`, `omw review`, `omw links`, `omw fields`, `omw view`, `omw doctor` — with no LLM required. The **`omw` skill** brings natural-language reasoning inside your AI session: ingest, query, autoresearch, and a small set of wiki-maintenance personas (librarian, curator, fact-checker, consistency-checker, terminology-manager). The model is _personas propose → you confirm → deterministic ops execute_, so every file change is auditable. omw stays focused on the wiki — multi-step orchestration is left to your host AI agent (Claude Code / Codex / Gemini), not reimplemented here.
|
|
11
|
+
|
|
12
|
+
**Short alias:** `OMW` (lowercase `omw`). Both `oh-my-wiki` and `omw` register as skills and respond to the same trigger phrases.
|
|
13
|
+
|
|
14
|
+
**Tutorial:** Walk through real dialogs and verified CLI examples in [TUTORIAL.md](./TUTORIAL.md) (English) or [TUTORIAL.ko.md](./TUTORIAL.ko.md) (한국어).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## What's new in v3
|
|
19
|
+
|
|
20
|
+
- **Schemas** — 13 built-in page types (`omw schema list/show`), with per-vault overrides in `<vault>/schemas/`
|
|
21
|
+
- **Confidence + supersede** — `confidence` frontmatter field; `omw supersede` retires old pages cleanly
|
|
22
|
+
- **Review queue (SR)** — spaced-repetition via `omw review due` / `omw review done`
|
|
23
|
+
- **Web search** — `omw search` queries an external provider (brave/tavily/exa/…); `omw serve` exposes vault FTS5 as a local retrieve-only HTTP API on port 8765
|
|
24
|
+
- **Entity-linking** — `omw links suggest` / `omw links link` auto-inserts `[[slug|Name]]` references
|
|
25
|
+
- **Inline fields** — `omw fields` reads `key::` inline syntax alongside frontmatter
|
|
26
|
+
- **Korean matching** — Korean entity names with josa (`카르파시가`) are suggested and linked correctly
|
|
27
|
+
- **Note viewers** — `omw view` opens the active vault, a page, or a search in Obsidian or Logseq (URI schemes, no plugin needed); `omw setup viewer` scaffolds the viewer config
|
|
28
|
+
- **Visibility (secure-by-default)** — `omw visibility get/set` marks pages `public`/`private`; `omw serve` exposes only public pages
|
|
29
|
+
- **URL inbox + fetch** — `omw fetch <url>` saves a web page or YouTube transcript to `raw/` (tiered urllib → chromium → cloud, SSRF-guarded); `omw inbox add/list/run/remove` queues URLs for batch fetch
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Install
|
|
34
|
+
|
|
35
|
+
Choose whichever path fits your environment. After any path, run `omw doctor` to confirm everything is wired correctly.
|
|
36
|
+
|
|
37
|
+
### Path A — Skills CLI (recommended for Claude Code users)
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
skills add dandacompany/oh-my-wiki@oh-my-wiki -g -y --copy -a claude-code
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This installs the skill into `~/.claude/skills/` and registers both the `oh-my-wiki` and `omw` short-alias skill names.
|
|
44
|
+
|
|
45
|
+
### Path B — Claude Code plugin marketplace
|
|
46
|
+
|
|
47
|
+
In any Claude Code session:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/plugin marketplace add dandacompany/oh-my-wiki
|
|
51
|
+
/plugin install oh-my-wiki@oh-my-wiki-marketplace
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Update later with `/plugin marketplace update oh-my-wiki-marketplace`.
|
|
55
|
+
|
|
56
|
+
### Path C — git clone + install script (developers, Codex CLI users)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git clone https://github.com/dandacompany/oh-my-wiki
|
|
60
|
+
cd oh-my-wiki
|
|
61
|
+
bash bin/install.sh
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The installer checks for Python 3.10+, pip-installs the package editable, creates `~/.claude/skills/oh-my-wiki` and `~/.claude/skills/omw` symlinks (idempotent), runs `pytest -q` to verify, and prints next steps. Add `--dev` to include pytest/ruff extras. Use `--force` to replace existing symlinks without a prompt; `--no-test` to skip the test step. Run `bash bin/install.sh --help` for all flags.
|
|
65
|
+
|
|
66
|
+
### Verify the install
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
omw doctor
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
omw home: /Users/you/.omw ok
|
|
74
|
+
registry: /Users/you/.omw/registry.db ok
|
|
75
|
+
* demo (wiki/markdown) /Users/you/.omw/vaults/demo
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Quickstart (~60 seconds)
|
|
81
|
+
|
|
82
|
+
**Step 1 — Run the setup wizard**
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
omw setup
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Follow the prompts to configure your first vault, search provider, and persona preferences. Accept the defaults for a fast start.
|
|
89
|
+
|
|
90
|
+
**Step 2 — Check status**
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
omw status
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"vault_count": 0,
|
|
99
|
+
"active": null,
|
|
100
|
+
"needs": "setup",
|
|
101
|
+
"vaults": []
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Step 3 — Create your first vault**
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
omw vault create demo --mode wiki
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"created": "demo",
|
|
114
|
+
"path": "~/.omw/vaults/demo",
|
|
115
|
+
"mode": "wiki",
|
|
116
|
+
"type": "markdown"
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
omw vault list
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
[
|
|
126
|
+
{
|
|
127
|
+
"name": "demo",
|
|
128
|
+
"path": "~/.omw/vaults/demo",
|
|
129
|
+
"mode": "wiki",
|
|
130
|
+
"type": "markdown",
|
|
131
|
+
"is_active": true
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Step 4 — Add a note (in your AI session)**
|
|
137
|
+
|
|
138
|
+
Open Claude Code (or Codex / Gemini) and say:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
ingest this
|
|
142
|
+
|
|
143
|
+
Andrej Karpathy calls the LLM Wiki a "compounding knowledge artifact". Every
|
|
144
|
+
source gets saved verbatim to raw/, a summary lands at wiki/summaries/, and
|
|
145
|
+
the entities and concepts that appeared get their own pages. 10–15 page touches
|
|
146
|
+
per ingest is normal.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Step 5 — Run a lint check**
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
omw lint
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"vault_id": 1,
|
|
158
|
+
"vault_path": "~/.omw/vaults/demo",
|
|
159
|
+
"frontmatter_issues": [],
|
|
160
|
+
"drift": { "missing_files": [], "mtime_drift": [] },
|
|
161
|
+
"links": {
|
|
162
|
+
"broken": [],
|
|
163
|
+
"orphans": [],
|
|
164
|
+
"index_drift": { "missing_from_index": [], "dangling_in_index": [] },
|
|
165
|
+
"contradictions": [],
|
|
166
|
+
"supersedes": [],
|
|
167
|
+
"superseded_unmarked": [],
|
|
168
|
+
"link_suggestions": []
|
|
169
|
+
},
|
|
170
|
+
"auto_fix_hints": []
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
→ Full tutorial: [TUTORIAL.md](TUTORIAL.md) · [한국어](TUTORIAL.ko.md)
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Architecture
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
SKILL.md dispatcher → commands/<op>.md (LLM procedure) → scripts/<op>.py (deterministic I/O)
|
|
182
|
+
└─ registry.py → ~/.omw/registry.db (sqlite)
|
|
183
|
+
└─ adapters.py → filesystem (markdown / obsidian)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
The 17 CLI subcommands:
|
|
187
|
+
|
|
188
|
+
| Subcommand | Purpose |
|
|
189
|
+
| ------------ | -------------------------------------------------------------------- |
|
|
190
|
+
| `status` | Show active vault and registry state |
|
|
191
|
+
| `vault` | Create, list, use, forget vaults |
|
|
192
|
+
| `lint` | Structural health check (frontmatter + links) |
|
|
193
|
+
| `search` | Web search via the configured external provider (brave/tavily/exa/…) |
|
|
194
|
+
| `serve` | Local retrieve-only HTTP query API (port 8765) — public pages only |
|
|
195
|
+
| `view` | Open the vault / a page / a search in Obsidian or Logseq |
|
|
196
|
+
| `visibility` | Get / set a page's public/private visibility (`get` / `set`) |
|
|
197
|
+
| `schema` | List / inspect page-type schemas |
|
|
198
|
+
| `supersede` | Mark a page superseded by a newer one |
|
|
199
|
+
| `review` | Spaced-repetition review queue (due / done) |
|
|
200
|
+
| `links` | Suggest and insert `[[slug]]` entity links |
|
|
201
|
+
| `fields` | Read frontmatter + inline `key::` fields |
|
|
202
|
+
| `import` | Import an existing folder as a vault |
|
|
203
|
+
| `fetch` | Fetch one URL (web page / YouTube transcript) into `raw/` |
|
|
204
|
+
| `inbox` | Queue URLs and batch-fetch them into `raw/` (add/list/run/remove) |
|
|
205
|
+
| `setup` | Interactive setup wizard |
|
|
206
|
+
| `doctor` | Verify install health |
|
|
207
|
+
|
|
208
|
+
> **Visibility (secure-by-default):** `omw serve` returns only pages with
|
|
209
|
+
> `visibility: public` in their frontmatter. Pages without the field are treated as
|
|
210
|
+
> private and never served. Publish pages explicitly with
|
|
211
|
+
> `omw visibility set <relpath...> public`.
|
|
212
|
+
|
|
213
|
+
The skill also exposes natural-language ops via your AI session: `ingest`, `query`, `autoresearch`, `find`, `edit`, `move`, `delete`, and wiki-maintenance persona invocations (`fact-check`, `consistency-check`, `build glossary`).
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Storage
|
|
218
|
+
|
|
219
|
+
- The vault registry lives at `~/.omw/registry.db` (override with `OMW_HOME`) as a per-user sqlite database.
|
|
220
|
+
- The note index is regenerated by `scripts/reindex.py` after every mutation.
|
|
221
|
+
- Your files stay in the vault path you chose. oh-my-wiki never touches them outside the op you explicitly invoked.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Development
|
|
226
|
+
|
|
227
|
+
- `pytest -v` runs all tests.
|
|
228
|
+
- `ruff check scripts/ tests/` runs the linter.
|
|
229
|
+
- `omw status` inspects the registry/vault state.
|
|
230
|
+
- `python3 -m scripts.lint --vault-id N` runs the health check on a specific vault.
|
|
231
|
+
|
|
232
|
+
Continuous integration runs on GitHub Actions, across a matrix of Python 3.10, 3.11, and 3.12 on both ubuntu-latest and macos-latest.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
Released under the MIT License. See [LICENSE](./LICENSE) for the full text.
|