@openparachute/vault 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.claude/settings.local.json +31 -0
  2. package/.dockerignore +8 -0
  3. package/.env.example +9 -0
  4. package/.playwright-mcp/console-2026-04-14T04-17-25-395Z.log +2 -0
  5. package/.playwright-mcp/console-2026-04-14T04-18-11-767Z.log +1 -0
  6. package/.playwright-mcp/console-2026-04-14T04-19-07-733Z.log +2 -0
  7. package/.playwright-mcp/console-2026-04-14T04-20-45-440Z.log +2 -0
  8. package/.playwright-mcp/page-2026-04-14T04-17-25-536Z.yml +1 -0
  9. package/.playwright-mcp/page-2026-04-14T04-18-11-816Z.yml +1 -0
  10. package/.playwright-mcp/page-2026-04-14T04-18-31-674Z.yml +211 -0
  11. package/.playwright-mcp/page-2026-04-14T04-19-07-795Z.yml +59 -0
  12. package/.playwright-mcp/page-2026-04-14T04-19-36-239Z.yml +232 -0
  13. package/.playwright-mcp/page-2026-04-14T04-19-58-327Z.yml +182 -0
  14. package/.playwright-mcp/page-2026-04-14T04-20-10-517Z.yml +91 -0
  15. package/.playwright-mcp/page-2026-04-14T04-20-14-796Z.yml +70 -0
  16. package/.playwright-mcp/page-2026-04-14T04-20-45-509Z.yml +59 -0
  17. package/CLAUDE.md +115 -0
  18. package/Caddyfile +3 -0
  19. package/Dockerfile +22 -0
  20. package/LICENSE +661 -0
  21. package/README.md +356 -0
  22. package/bun.lock +219 -0
  23. package/bunfig.toml +2 -0
  24. package/core/package.json +7 -0
  25. package/core/src/core.test.ts +940 -0
  26. package/core/src/hooks.test.ts +361 -0
  27. package/core/src/hooks.ts +234 -0
  28. package/core/src/links.ts +352 -0
  29. package/core/src/mcp.ts +672 -0
  30. package/core/src/notes.ts +520 -0
  31. package/core/src/obsidian.test.ts +380 -0
  32. package/core/src/obsidian.ts +322 -0
  33. package/core/src/paths.test.ts +197 -0
  34. package/core/src/paths.ts +53 -0
  35. package/core/src/schema.ts +331 -0
  36. package/core/src/store.ts +303 -0
  37. package/core/src/tag-schemas.ts +104 -0
  38. package/core/src/test-preload.ts +8 -0
  39. package/core/src/types.ts +140 -0
  40. package/core/src/wikilinks.test.ts +277 -0
  41. package/core/src/wikilinks.ts +402 -0
  42. package/deploy/parachute-vault.service +20 -0
  43. package/docker-compose.yml +50 -0
  44. package/docs/HTTP_API.md +328 -0
  45. package/fly.toml +24 -0
  46. package/package.json +32 -0
  47. package/railway.json +14 -0
  48. package/religions-abrahamic-filter.png +0 -0
  49. package/religions-buddhism-v2.png +0 -0
  50. package/religions-buddhism.png +0 -0
  51. package/religions-final.png +0 -0
  52. package/religions-v1.png +0 -0
  53. package/religions-v2.png +0 -0
  54. package/religions-zen.png +0 -0
  55. package/scripts/migrate-audio-to-opus.test.ts +237 -0
  56. package/scripts/migrate-audio-to-opus.ts +499 -0
  57. package/src/auth.ts +170 -0
  58. package/src/cli.ts +1131 -0
  59. package/src/config-triggers.test.ts +83 -0
  60. package/src/config.test.ts +125 -0
  61. package/src/config.ts +716 -0
  62. package/src/db.ts +14 -0
  63. package/src/launchd.ts +109 -0
  64. package/src/mcp-http.ts +113 -0
  65. package/src/mcp-tools.ts +155 -0
  66. package/src/oauth.test.ts +1242 -0
  67. package/src/oauth.ts +729 -0
  68. package/src/owner-auth.ts +159 -0
  69. package/src/prompt.ts +141 -0
  70. package/src/published.test.ts +214 -0
  71. package/src/qrcode-terminal.d.ts +9 -0
  72. package/src/routes.ts +822 -0
  73. package/src/server.ts +450 -0
  74. package/src/systemd.ts +84 -0
  75. package/src/token-store.test.ts +174 -0
  76. package/src/token-store.ts +241 -0
  77. package/src/triggers.test.ts +397 -0
  78. package/src/triggers.ts +412 -0
  79. package/src/two-factor.test.ts +246 -0
  80. package/src/two-factor.ts +222 -0
  81. package/src/vault-store.ts +47 -0
  82. package/src/vault.test.ts +1309 -0
  83. package/tsconfig.json +29 -0
  84. package/web/README.md +73 -0
  85. package/web/bun.lock +827 -0
  86. package/web/eslint.config.js +23 -0
  87. package/web/index.html +15 -0
  88. package/web/package.json +36 -0
  89. package/web/public/favicon.svg +1 -0
  90. package/web/public/icons.svg +24 -0
  91. package/web/src/App.tsx +149 -0
  92. package/web/src/Graph.tsx +200 -0
  93. package/web/src/NoteView.tsx +155 -0
  94. package/web/src/Sidebar.tsx +186 -0
  95. package/web/src/api.ts +21 -0
  96. package/web/src/index.css +50 -0
  97. package/web/src/main.tsx +10 -0
  98. package/web/src/types.ts +37 -0
  99. package/web/src/utils.ts +107 -0
  100. package/web/tsconfig.app.json +25 -0
  101. package/web/tsconfig.json +7 -0
  102. package/web/tsconfig.node.json +24 -0
  103. package/web/vite.config.ts +15 -0
@@ -0,0 +1,182 @@
1
+ - generic [ref=e3]:
2
+ - generic [ref=e4]:
3
+ - generic [ref=e5]:
4
+ - heading "Religions of the World" [level=1] [ref=e6]
5
+ - paragraph [ref=e7]: Knowledge Graph
6
+ - textbox "Search notes..." [ref=e9]
7
+ - generic [ref=e10]:
8
+ - generic [ref=e11]:
9
+ - generic [ref=e12]: By Family
10
+ - button "Abrahamic 39" [ref=e13] [cursor=pointer]:
11
+ - generic [ref=e15]: Abrahamic
12
+ - generic [ref=e16]: "39"
13
+ - button "Dharmic 39" [ref=e17] [cursor=pointer]:
14
+ - generic [ref=e19]: Dharmic
15
+ - generic [ref=e20]: "39"
16
+ - button "East Asian 21" [ref=e21] [cursor=pointer]:
17
+ - generic [ref=e23]: East Asian
18
+ - generic [ref=e24]: "21"
19
+ - button "Iranian 6" [ref=e25] [cursor=pointer]:
20
+ - generic [ref=e27]: Iranian
21
+ - generic [ref=e28]: "6"
22
+ - button "Indigenous 6" [ref=e29] [cursor=pointer]:
23
+ - generic [ref=e31]: Indigenous
24
+ - generic [ref=e32]: "6"
25
+ - button "New Religious Movements 10" [ref=e33] [cursor=pointer]:
26
+ - generic [ref=e35]: New Religious Movements
27
+ - generic [ref=e36]: "10"
28
+ - generic [ref=e37]:
29
+ - generic [ref=e38]: By Type
30
+ - button "Traditions 24" [ref=e39] [cursor=pointer]:
31
+ - generic [ref=e41]: Traditions
32
+ - generic [ref=e42]: "24"
33
+ - button "Concepts 26" [ref=e43] [cursor=pointer]:
34
+ - generic [ref=e45]: Concepts
35
+ - generic [ref=e46]: "26"
36
+ - button "Figures 14" [ref=e47] [cursor=pointer]:
37
+ - generic [ref=e49]: Figures
38
+ - generic [ref=e50]: "14"
39
+ - button "Texts 13" [ref=e51] [cursor=pointer]:
40
+ - generic [ref=e53]: Texts
41
+ - generic [ref=e54]: "13"
42
+ - button "Practices 9" [ref=e55] [cursor=pointer]:
43
+ - generic [ref=e57]: Practices
44
+ - generic [ref=e58]: "9"
45
+ - button "Schools 18" [ref=e59] [cursor=pointer]:
46
+ - generic [ref=e61]: Schools
47
+ - generic [ref=e62]: "18"
48
+ - button "Themes 9" [ref=e63] [cursor=pointer]:
49
+ - generic [ref=e65]: Themes
50
+ - generic [ref=e66]: "9"
51
+ - button "Maps of Content 7" [ref=e67] [cursor=pointer]:
52
+ - generic [ref=e69]: Maps of Content
53
+ - generic [ref=e70]: "7"
54
+ - generic [ref=e71]: Powered by Parachute Vault
55
+ - generic [ref=e72]:
56
+ - img [ref=e73]:
57
+ - generic [ref=e908]:
58
+ - generic: Index
59
+ - generic: Abrahamic
60
+ - generic: Dharmic
61
+ - generic: East Asian
62
+ - generic: Iranian
63
+ - generic: Indigenous
64
+ - generic: New Religious Movements
65
+ - generic: Judaism
66
+ - generic: Christianity
67
+ - generic: Islam
68
+ - generic: Hinduism
69
+ - generic: Buddhism
70
+ - generic: Sikhism
71
+ - generic: Jainism
72
+ - generic: Bahá'í Faith
73
+ - generic: Shinto
74
+ - generic: Taoism
75
+ - generic: Confucianism
76
+ - generic: Zoroastrianism
77
+ - generic: African Traditional Religions
78
+ - generic: Native American Spiritualities
79
+ - generic: Australian Aboriginal Spirituality
80
+ - generic: Afro-Caribbean Diasporic Religions
81
+ - generic: Circumpolar Spiritualities
82
+ - generic: Mormonism
83
+ - generic: Rastafari
84
+ - generic: Cao Đài
85
+ - generic: Tenrikyo
86
+ - generic: Wicca and Modern Paganism
87
+ - generic: Unitarian Universalism
88
+ - generic: Falun Gong
89
+ - generic:
90
+ - generic: 119 notes
91
+ - generic: 711 connections
92
+ - generic [ref=e911]:
93
+ - generic [ref=e912]:
94
+ - generic [ref=e913]:
95
+ - generic [ref=e914]:
96
+ - generic [ref=e916]: School
97
+ - generic [ref=e917]: /
98
+ - generic [ref=e918]: Dharmic
99
+ - generic [ref=e919]: Schools/Zen
100
+ - button "×" [ref=e920] [cursor=pointer]
101
+ - generic [ref=e922]:
102
+ - heading "Zen" [level=1] [ref=e1015]
103
+ - paragraph [ref=e924]:
104
+ - text: The meditation tradition of
105
+ - link "Mahayana" [ref=e1016] [cursor=pointer]:
106
+ - /url: ""
107
+ - link "Buddhism" [ref=e1017] [cursor=pointer]:
108
+ - /url: ""
109
+ - text: that emerged in China as
110
+ - emphasis [ref=e926]: Chan
111
+ - text: (from the Sanskrit
112
+ - emphasis [ref=e1018]: dhyana
113
+ - text: ", meditation), then spread to Vietnam ("
114
+ - emphasis [ref=e1019]: Thien
115
+ - text: ), Korea (
116
+ - emphasis [ref=e1020]: Seon
117
+ - text: ), and Japan (
118
+ - emphasis [ref=e1021]: Zen
119
+ - text: ). Distinguished by its emphasis on direct experience over scriptural study, on sitting meditation as the heart of practice, and on the going-beyond of conceptual knowing.
120
+ - heading "Origin" [level=2] [ref=e1022]
121
+ - paragraph [ref=e938]: "Traditionally traced to the meeting of the Indian master Bodhidharma with Chinese students around 500 CE. Bodhidharma's famous summary captures the school's spirit:"
122
+ - blockquote [ref=e1023]:
123
+ - paragraph [ref=e1024]: A special transmission outside the scriptures, Not depending on words or letters; Direct pointing to the human mind; Seeing into one's own nature and attaining buddhahood.
124
+ - paragraph [ref=e974]: Whether the historical Bodhidharma actually said this is uncertain; the formulation became canonical in later Zen.
125
+ - heading "What Zen does differently" [level=2] [ref=e1025]
126
+ - list [ref=e939]:
127
+ - listitem [ref=e940]:
128
+ - strong [ref=e1026]: Sitting meditation
129
+ - text: (
130
+ - link "Zazen" [ref=e1027] [cursor=pointer]:
131
+ - /url: ""
132
+ - text: ) is central. Other Buddhist schools also meditate, but Zen makes sitting the heart of the path in a particularly concentrated way.
133
+ - listitem [ref=e942]:
134
+ - strong [ref=e1028]: Direct pointing
135
+ - text: — a master may try to bring the student to awakening through unexpected gestures, paradoxes, blows, or wordless transmission rather than through doctrinal exposition
136
+ - listitem [ref=e944]:
137
+ - strong [ref=e1029]: Suspicion of scripture
138
+ - text: — not because scriptures are wrong, but because they can become substitutes for direct experience. Zen sayings include
139
+ - emphasis [ref=e946]: if you meet the Buddha on the road, kill him
140
+ - text: — a warning against attaching to even the highest concepts
141
+ - listitem [ref=e1030]:
142
+ - strong [ref=e1031]: Koan practice
143
+ - text: — short paradoxical anecdotes or questions used as the focus of meditation, especially in the
144
+ - link "Rinzai" [ref=e1032] [cursor=pointer]:
145
+ - /url: ""
146
+ - text: line.
147
+ - emphasis [ref=e1033]: What is the sound of one hand clapping?
148
+ - text: The koan is not a riddle to be solved but a tool to drive the mind past discursive thought.
149
+ - listitem [ref=e1034]:
150
+ - strong [ref=e1035]: The teacher-student relationship
151
+ - text: as the carrier of the lineage; the dharma is transmitted
152
+ - emphasis [ref=e1036]: mind to mind
153
+ - text: rather than only through texts
154
+ - heading "Major Japanese schools" [level=2] [ref=e1037]
155
+ - list [ref=e950]:
156
+ - listitem [ref=e951]:
157
+ - strong [ref=e1038]: Soto Zen
158
+ - text: — emphasizes
159
+ - link "shikantaza" [ref=e1039] [cursor=pointer]:
160
+ - /url: ""
161
+ - text: ", \"just sitting,\" without specific objects of contemplation. Founded by Dogen (1200–1253), one of the great religious philosophers of any tradition."
162
+ - listitem [ref=e953]:
163
+ - strong [ref=e1040]: Rinzai Zen
164
+ - text: — emphasizes koan practice and intense, sudden breakthroughs. Associated historically with the samurai class.
165
+ - listitem [ref=e957]:
166
+ - strong [ref=e1041]: Obaku Zen
167
+ - text: — a smaller school combining Zen and
168
+ - link "Pure Land" [ref=e1042] [cursor=pointer]:
169
+ - /url: ""
170
+ - text: elements, brought from China in the 17th century.
171
+ - heading "Cultural reach" [level=2] [ref=e1043]
172
+ - paragraph [ref=e981]: "Zen profoundly shaped Japanese (and East Asian more broadly) aesthetics: the tea ceremony, ink painting, garden design, calligraphy, archery, swordsmanship, flower arrangement, haiku. The Zen sensibility — austere, attentive, present, suspicious of decoration and self-conscious display — permeates these arts."
173
+ - heading "In the modern West" [level=2] [ref=e1044]
174
+ - paragraph [ref=e1045]: Zen was the first form of Buddhism to enter Western awareness on a large scale, through the translations and writings of D.T. Suzuki in the early 20th century, the postwar interest of the Beat poets and writers, and the founding of Zen centers across Europe and North America from the 1960s onward.
175
+ - generic [ref=e982]:
176
+ - generic [ref=e983]: Connected (5)
177
+ - generic [ref=e984]:
178
+ - button "Mahayana" [ref=e999] [cursor=pointer]: Mahayana
179
+ - button "Buddhism" [ref=e1046] [cursor=pointer]: Buddhism
180
+ - button "Zazen" [ref=e1011] [cursor=pointer]: Zazen
181
+ - button "Zazen" [ref=e1048] [cursor=pointer]: Zazen
182
+ - button "Pure Land" [ref=e1007] [cursor=pointer]: Pure Land
@@ -0,0 +1,91 @@
1
+ - generic [ref=e3]:
2
+ - generic [ref=e4]:
3
+ - generic [ref=e5]:
4
+ - heading "Religions of the World" [level=1] [ref=e6]
5
+ - paragraph [ref=e7]: Knowledge Graph
6
+ - textbox "Search notes..." [ref=e9]
7
+ - generic [ref=e10]:
8
+ - generic [ref=e11]:
9
+ - generic [ref=e12]: By Family
10
+ - button "Abrahamic 39" [ref=e13] [cursor=pointer]:
11
+ - generic [ref=e15]: Abrahamic
12
+ - generic [ref=e16]: "39"
13
+ - button "Dharmic 39" [ref=e17] [cursor=pointer]:
14
+ - generic [ref=e19]: Dharmic
15
+ - generic [ref=e20]: "39"
16
+ - button "East Asian 21" [ref=e21] [cursor=pointer]:
17
+ - generic [ref=e23]: East Asian
18
+ - generic [ref=e24]: "21"
19
+ - button "Iranian 6" [ref=e25] [cursor=pointer]:
20
+ - generic [ref=e27]: Iranian
21
+ - generic [ref=e28]: "6"
22
+ - button "Indigenous 6" [ref=e29] [cursor=pointer]:
23
+ - generic [ref=e31]: Indigenous
24
+ - generic [ref=e32]: "6"
25
+ - button "New Religious Movements 10" [ref=e33] [cursor=pointer]:
26
+ - generic [ref=e35]: New Religious Movements
27
+ - generic [ref=e36]: "10"
28
+ - generic [ref=e37]:
29
+ - generic [ref=e38]: By Type
30
+ - button "Traditions 24" [ref=e39] [cursor=pointer]:
31
+ - generic [ref=e41]: Traditions
32
+ - generic [ref=e42]: "24"
33
+ - button "Concepts 26" [ref=e43] [cursor=pointer]:
34
+ - generic [ref=e45]: Concepts
35
+ - generic [ref=e46]: "26"
36
+ - button "Figures 14" [ref=e47] [cursor=pointer]:
37
+ - generic [ref=e49]: Figures
38
+ - generic [ref=e50]: "14"
39
+ - button "Texts 13" [ref=e51] [cursor=pointer]:
40
+ - generic [ref=e53]: Texts
41
+ - generic [ref=e54]: "13"
42
+ - button "Practices 9" [ref=e55] [cursor=pointer]:
43
+ - generic [ref=e57]: Practices
44
+ - generic [ref=e58]: "9"
45
+ - button "Schools 18" [ref=e59] [cursor=pointer]:
46
+ - generic [ref=e61]: Schools
47
+ - generic [ref=e62]: "18"
48
+ - button "Themes 9" [ref=e63] [cursor=pointer]:
49
+ - generic [ref=e65]: Themes
50
+ - generic [ref=e66]: "9"
51
+ - button "Maps of Content 7" [ref=e67] [cursor=pointer]:
52
+ - generic [ref=e69]: Maps of Content
53
+ - generic [ref=e70]: "7"
54
+ - generic [ref=e71]: Powered by Parachute Vault
55
+ - generic [ref=e72]:
56
+ - img [ref=e73]:
57
+ - generic [ref=e908]:
58
+ - generic: Index
59
+ - generic: Abrahamic
60
+ - generic: Dharmic
61
+ - generic: East Asian
62
+ - generic: Iranian
63
+ - generic: Indigenous
64
+ - generic: New Religious Movements
65
+ - generic: Judaism
66
+ - generic: Christianity
67
+ - generic: Islam
68
+ - generic: Hinduism
69
+ - generic: Buddhism
70
+ - generic: Sikhism
71
+ - generic: Jainism
72
+ - generic: Bahá'í Faith
73
+ - generic: Shinto
74
+ - generic: Taoism
75
+ - generic: Confucianism
76
+ - generic: Zoroastrianism
77
+ - generic: African Traditional Religions
78
+ - generic: Native American Spiritualities
79
+ - generic: Australian Aboriginal Spirituality
80
+ - generic: Afro-Caribbean Diasporic Religions
81
+ - generic: Circumpolar Spiritualities
82
+ - generic: Mormonism
83
+ - generic: Rastafari
84
+ - generic: Cao Đài
85
+ - generic: Tenrikyo
86
+ - generic: Wicca and Modern Paganism
87
+ - generic: Unitarian Universalism
88
+ - generic: Falun Gong
89
+ - generic:
90
+ - generic: 119 notes
91
+ - generic: 711 connections
@@ -0,0 +1,70 @@
1
+ - generic [ref=e3]:
2
+ - generic [ref=e4]:
3
+ - generic [ref=e5]:
4
+ - heading "Religions of the World" [level=1] [ref=e6]
5
+ - paragraph [ref=e7]: Knowledge Graph
6
+ - textbox "Search notes..." [ref=e9]
7
+ - generic [ref=e10]:
8
+ - button "× Clear filter" [ref=e1050] [cursor=pointer]
9
+ - generic [ref=e11]:
10
+ - generic [ref=e12]: By Family
11
+ - button "Abrahamic 39" [active] [ref=e13] [cursor=pointer]:
12
+ - generic [ref=e15]: Abrahamic
13
+ - generic [ref=e16]: "39"
14
+ - button "Dharmic 39" [ref=e17] [cursor=pointer]:
15
+ - generic [ref=e19]: Dharmic
16
+ - generic [ref=e20]: "39"
17
+ - button "East Asian 21" [ref=e21] [cursor=pointer]:
18
+ - generic [ref=e23]: East Asian
19
+ - generic [ref=e24]: "21"
20
+ - button "Iranian 6" [ref=e25] [cursor=pointer]:
21
+ - generic [ref=e27]: Iranian
22
+ - generic [ref=e28]: "6"
23
+ - button "Indigenous 6" [ref=e29] [cursor=pointer]:
24
+ - generic [ref=e31]: Indigenous
25
+ - generic [ref=e32]: "6"
26
+ - button "New Religious Movements 10" [ref=e33] [cursor=pointer]:
27
+ - generic [ref=e35]: New Religious Movements
28
+ - generic [ref=e36]: "10"
29
+ - generic [ref=e37]:
30
+ - generic [ref=e38]: By Type
31
+ - button "Traditions 24" [ref=e39] [cursor=pointer]:
32
+ - generic [ref=e41]: Traditions
33
+ - generic [ref=e42]: "24"
34
+ - button "Concepts 26" [ref=e43] [cursor=pointer]:
35
+ - generic [ref=e45]: Concepts
36
+ - generic [ref=e46]: "26"
37
+ - button "Figures 14" [ref=e47] [cursor=pointer]:
38
+ - generic [ref=e49]: Figures
39
+ - generic [ref=e50]: "14"
40
+ - button "Texts 13" [ref=e51] [cursor=pointer]:
41
+ - generic [ref=e53]: Texts
42
+ - generic [ref=e54]: "13"
43
+ - button "Practices 9" [ref=e55] [cursor=pointer]:
44
+ - generic [ref=e57]: Practices
45
+ - generic [ref=e58]: "9"
46
+ - button "Schools 18" [ref=e59] [cursor=pointer]:
47
+ - generic [ref=e61]: Schools
48
+ - generic [ref=e62]: "18"
49
+ - button "Themes 9" [ref=e63] [cursor=pointer]:
50
+ - generic [ref=e65]: Themes
51
+ - generic [ref=e66]: "9"
52
+ - button "Maps of Content 7" [ref=e67] [cursor=pointer]:
53
+ - generic [ref=e69]: Maps of Content
54
+ - generic [ref=e70]: "7"
55
+ - generic [ref=e71]: Powered by Parachute Vault
56
+ - generic [ref=e72]:
57
+ - img [ref=e73]:
58
+ - generic [ref=e1286]:
59
+ - generic: Abrahamic
60
+ - generic: Judaism
61
+ - generic: Christianity
62
+ - generic: Islam
63
+ - generic: Bahá'í Faith
64
+ - generic: Mormonism
65
+ - generic: Rastafari
66
+ - generic: Unitarian Universalism
67
+ - generic:
68
+ - generic: 119 notes
69
+ - generic: 711 connections
70
+ - generic: "filtered: family/abrahamic"
@@ -0,0 +1,59 @@
1
+ - generic [ref=e3]:
2
+ - generic [ref=e4]:
3
+ - generic [ref=e5]:
4
+ - heading "Religions of the World" [level=1] [ref=e6]
5
+ - paragraph [ref=e7]: Knowledge Graph
6
+ - textbox "Search notes..." [ref=e9]
7
+ - generic [ref=e10]:
8
+ - generic [ref=e11]:
9
+ - generic [ref=e12]: By Family
10
+ - button "Abrahamic 39" [ref=e13] [cursor=pointer]:
11
+ - generic [ref=e15]: Abrahamic
12
+ - generic [ref=e16]: "39"
13
+ - button "Dharmic 39" [ref=e17] [cursor=pointer]:
14
+ - generic [ref=e19]: Dharmic
15
+ - generic [ref=e20]: "39"
16
+ - button "East Asian 21" [ref=e21] [cursor=pointer]:
17
+ - generic [ref=e23]: East Asian
18
+ - generic [ref=e24]: "21"
19
+ - button "Iranian 6" [ref=e25] [cursor=pointer]:
20
+ - generic [ref=e27]: Iranian
21
+ - generic [ref=e28]: "6"
22
+ - button "Indigenous 6" [ref=e29] [cursor=pointer]:
23
+ - generic [ref=e31]: Indigenous
24
+ - generic [ref=e32]: "6"
25
+ - button "New Religious Movements 10" [ref=e33] [cursor=pointer]:
26
+ - generic [ref=e35]: New Religious Movements
27
+ - generic [ref=e36]: "10"
28
+ - generic [ref=e37]:
29
+ - generic [ref=e38]: By Type
30
+ - button "Traditions 24" [ref=e39] [cursor=pointer]:
31
+ - generic [ref=e41]: Traditions
32
+ - generic [ref=e42]: "24"
33
+ - button "Concepts 26" [ref=e43] [cursor=pointer]:
34
+ - generic [ref=e45]: Concepts
35
+ - generic [ref=e46]: "26"
36
+ - button "Figures 14" [ref=e47] [cursor=pointer]:
37
+ - generic [ref=e49]: Figures
38
+ - generic [ref=e50]: "14"
39
+ - button "Texts 13" [ref=e51] [cursor=pointer]:
40
+ - generic [ref=e53]: Texts
41
+ - generic [ref=e54]: "13"
42
+ - button "Practices 9" [ref=e55] [cursor=pointer]:
43
+ - generic [ref=e57]: Practices
44
+ - generic [ref=e58]: "9"
45
+ - button "Schools 18" [ref=e59] [cursor=pointer]:
46
+ - generic [ref=e61]: Schools
47
+ - generic [ref=e62]: "18"
48
+ - button "Themes 9" [ref=e63] [cursor=pointer]:
49
+ - generic [ref=e65]: Themes
50
+ - generic [ref=e66]: "9"
51
+ - button "Maps of Content 7" [ref=e67] [cursor=pointer]:
52
+ - generic [ref=e69]: Maps of Content
53
+ - generic [ref=e70]: "7"
54
+ - generic [ref=e71]: Powered by Parachute Vault
55
+ - generic [ref=e72]:
56
+ - img [ref=e73]
57
+ - generic:
58
+ - generic: 119 notes
59
+ - generic: 711 connections
package/CLAUDE.md ADDED
@@ -0,0 +1,115 @@
1
+ # Parachute Vault
2
+
3
+ Agent-native knowledge graph. Notes, tags, links over MCP. Self-hosted, one command setup.
4
+
5
+ ## Architecture
6
+
7
+ ```
8
+ parachute vault init → ~/.parachute/ (config, .env, daemon, MCP)
9
+ parachute vault create → new vault (SQLite DB + vault.yaml + API key)
10
+ parachute vault config → manage env vars (PORT, etc.)
11
+ parachute vault keys → list / create / revoke API keys
12
+
13
+ CLI → Bun server (port 1940) → multiple vaults (each its own SQLite DB)
14
+
15
+ Any AI → MCP (stdio or HTTP) ─────────┘
16
+ Phone → REST API ──────────────────┘
17
+ ```
18
+
19
+ ## Packages
20
+
21
+ ```
22
+ core/ — TypeScript library: schema, store, MCP tools, wikilinks, paths (bun:sqlite)
23
+ src/ — Bun CLI + server + MCP + webhook triggers
24
+ deploy/ — systemd unit, Dockerfile, docker-compose, fly.toml, railway.json
25
+ ```
26
+
27
+ ## Data Model
28
+
29
+ Five core tables per vault. Vaults start blank — no predefined tags or schema. Clients create the tags they need.
30
+
31
+ ```sql
32
+ notes (id, content, path, metadata, created_at, updated_at)
33
+ tags (name)
34
+ note_tags (note_id, tag_name)
35
+ attachments (id, note_id, path, mime_type, metadata, created_at)
36
+ links (source_id, target_id, relationship, metadata, created_at)
37
+ ```
38
+
39
+ Additional tables:
40
+ - `tag_schemas` — tag description + metadata field definitions (JSON)
41
+ - `unresolved_wikilinks` — pending wikilink resolution
42
+ - `schema_version` — migration tracking
43
+
44
+ Metadata is a JSON column on notes, links, and attachments. Queryable via `json_extract()`.
45
+
46
+ Path is unique (when set), normalized (no .md, no trailing slashes), and used for wikilink resolution.
47
+
48
+ ### MCP Tools (9)
49
+
50
+ Notes: `query-notes` (single by ID/path, filter, search, graph neighborhood), `create-note` (single or batch), `update-note` (single or batch — content, tags, links, metadata merge), `delete-note`
51
+
52
+ Tags: `list-tags` (with optional schema detail), `update-tag` (upsert schema), `delete-tag`
53
+
54
+ Graph: `find-path` (BFS shortest path)
55
+
56
+ Vault: `vault-info` (get/update description + stats)
57
+
58
+
59
+ ## Bun-native
60
+
61
+ Use Bun for everything. No Node.js.
62
+
63
+ - `Bun.serve()` for HTTP server
64
+ - `bun:sqlite` for SQLite
65
+ - `Bun.$` for shell commands
66
+ - `bun test` for tests
67
+
68
+ ## Key design decisions
69
+
70
+ - **Bare primitives**: Vault has no opinions about tags or conventions. It's the engine, not the schema. Clients (parachute-daily, etc.) bring their own tag schema.
71
+ - **Multi-vault**: One server hosts many vaults. Each vault = own SQLite DB + config + API keys.
72
+ - **Per-vault MCP descriptions**: vault.yaml is sent as MCP server instruction at session start. The vault teaches the AI how to use it.
73
+ - **Wikilink auto-linking**: `[[wikilinks]]` in note content are automatically parsed and maintained as links. Unresolved links auto-resolve when target notes are created.
74
+ - **Path normalization**: Paths are normalized on write (strip .md, collapse slashes, trim). UNIQUE constraint enforced. Rename cascading updates wikilinks in other notes.
75
+ - **Obsidian interop**: Import/export preserves frontmatter, tags, wikilinks, and file paths.
76
+ - **Unified config**: All env vars in `~/.parachute/.env` (or `$PARACHUTE_HOME/.env` in Docker).
77
+ - **Docker-friendly**: `PARACHUTE_HOME` env var overrides data directory. Server auto-creates default vault on first run.
78
+
79
+ ## Config
80
+
81
+ All configuration in `~/.parachute/.env`:
82
+
83
+ ```
84
+ PORT=1940
85
+ ```
86
+
87
+ ## Naming
88
+
89
+ - Domain: `parachute.computer`
90
+ - Package ID: `computer.parachute.vault`
91
+ - npm scope: `@openparachute/`
92
+ - Launchd label: `computer.parachute.vault`
93
+
94
+ ## Running
95
+
96
+ ```bash
97
+ bun src/cli.ts vault init # setup everything
98
+ bun src/cli.ts vault status # check status
99
+ bun src/cli.ts vault config # view/edit config
100
+ bun src/cli.ts vault import <path> # import Obsidian vault
101
+ bun src/cli.ts vault export <path> # export as Obsidian markdown
102
+ bun test src/ # run server tests
103
+ bun test core/src/ # run core tests
104
+ ```
105
+
106
+ ## Deployment
107
+
108
+ Self-hosted:
109
+ - **Mac**: `bun install && vault init` (launchd daemon, localhost)
110
+ - **VPS**: `docker compose up -d` (Hetzner, DigitalOcean, etc.)
111
+ - **Remote access**: Cloudflare Tunnel for HTTPS (`cloudflared tunnel --url http://localhost:1940`)
112
+
113
+ Hosted (future, issue #5):
114
+ - Cloudflare Workers + D1 + R2
115
+ - Requires async Store interface refactor
package/Caddyfile ADDED
@@ -0,0 +1,3 @@
1
+ {$VAULT_DOMAIN:localhost} {
2
+ reverse_proxy vault:1940
3
+ }
package/Dockerfile ADDED
@@ -0,0 +1,22 @@
1
+ FROM oven/bun:1.2-alpine AS base
2
+ WORKDIR /app
3
+
4
+ # Install deps
5
+ COPY package.json bun.lock ./
6
+ RUN bun install --frozen-lockfile --production
7
+
8
+ # Copy source
9
+ COPY core core
10
+ COPY src src
11
+ COPY bunfig.toml ./
12
+
13
+ # Data directory — mount a volume here for persistence
14
+ ENV PARACHUTE_HOME=/data
15
+ RUN mkdir -p /data
16
+
17
+ EXPOSE 1940
18
+
19
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \
20
+ CMD wget -qO- http://localhost:1940/health || exit 1
21
+
22
+ CMD ["bun", "src/server.ts"]