@velvetmonkey/flywheel-memory 2.6.2 → 2.7.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.
- package/dist/index.js +595 -548
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5125,8 +5125,8 @@ var init_tool_embeddings_generated = __esm({
|
|
|
5125
5125
|
model: "Xenova/all-MiniLM-L6-v2",
|
|
5126
5126
|
dims: 384,
|
|
5127
5127
|
version: 1,
|
|
5128
|
-
generatedAt: "2026-04-
|
|
5129
|
-
sourceHash: "
|
|
5128
|
+
generatedAt: "2026-04-08T23:41:14.518Z",
|
|
5129
|
+
sourceHash: "a5f933182323dbd0",
|
|
5130
5130
|
tools: [
|
|
5131
5131
|
{ name: "absorb_as_alias", category: "corrections", tier: 2, descriptionHash: "27554e8b6b3bb1a4", embedding: [-0.087313, -0.015109, 0.022541, 8661e-6, -0.024621, -0.027376, -9959e-6, -4143e-6, 0.020362, -0.025815, 0.03722, -0.017272, 0.010364, -0.082973, 0.063234, 0.105669, 0.030314, 0.109193, -0.024833, -0.022116, 0.020565, 0.067968, -0.013485, -4453e-6, 0.023703, -0.012531, -0.110704, 0.046425, 0.037009, -0.100492, 0.057064, 0.106952, -0.064645, 0.032072, 0.011054, 0.113279, 6113e-6, 2155e-6, 0.052647, -0.037832, 0.032187, -6735e-6, -0.027158, -0.033756, -0.071285, -0.025865, -0.040482, 0.02512, -0.037086, 4166e-6, -0.012929, -0.07895, -0.101903, 0.085107, -0.014636, 0.091582, -0.052795, 0.05756, -0.057044, -2231e-6, -0.013445, 2289e-6, -77e-5, -0.049304, -0.013433, -0.01156, 0.039263, 0.055036, -228e-5, -0.021411, 0.025402, -0.015392, -0.016927, -0.01263, 0.016506, 5128e-6, -0.045499, 0.041929, -0.098371, -0.102299, -0.05505, -0.021133, -0.011038, -0.045412, 0.051449, 0.043985, -0.026773, -0.061248, -0.013004, 0.020089, 0.020349, -0.049656, 0.14248, -0.023849, 1326e-6, 0.038924, 0.015142, -0.027207, 0.137747, 0.086333, -0.051942, 0.125201, -0.015227, 0.035816, -0.016593, -3143e-6, 0.016584, 0.057709, 3425e-6, -0.086785, 0.077055, 0.012249, 0.054973, -0.041238, 0.036758, -0.018482, 0.017911, -0.025632, 0.070721, -0.025979, 0.090299, 0.013505, -0.015338, 0.035118, -0.062938, -55e-6, -0.031485, 0, 0.048271, 0.118939, -7432e-6, -0.027482, -0.017351, -2898e-6, -0.036961, -3044e-6, -0.032485, -0.039268, 8085e-6, -0.01109, 0.025195, 273e-6, -0.081679, -0.043759, -1642e-6, 0.133163, 0.054599, 0.052329, -0.014879, 0.066345, -0.063461, 0.046176, -6885e-6, 0.050879, -0.032148, -0.03098, -0.01647, 2323e-6, -0.012937, 0.020916, 0.05669, 0.050599, -0.012922, 0.029857, -0.023119, -0.056459, -0.052397, -0.063056, 0.032488, 0.063419, 5355e-6, -0.081225, -2636e-6, -0.051448, -0.01502, 0.046703, 0.158323, -0.016006, 0.054453, -5225e-6, 0.055346, 3194e-6, -0.055126, -0.047608, -0.027439, -6931e-6, 0.015054, 0.070964, 0.016329, -7436e-6, -0.087056, 0.0326, -8886e-6, 0.069308, 1744e-6, -0.031456, 0.05816, -0.024318, -0.084045, 0.034875, -0.052924, 0.060689, -0.020979, -0.137039, -0.069438, 4228e-6, 0.103073, 0.026546, -0.043743, 0.015869, -1255e-6, -0.020976, -0.036293, 0.019493, 0.019183, -0.167767, -0.047504, -0.043037, -0.05305, -0.011494, 0.020628, -0.029303, 0.066295, -0, 0.06668, 6677e-6, -0.027402, 0.074721, -0.071961, 0.022582, 0.074355, 0.042852, -0.025373, 0.034536, 0.017667, -0.010542, -4169e-6, -0.083182, -2746e-6, -0.053237, 0.041962, -0.041424, -0.037738, 0.075779, 7597e-6, -0.035105, 0.089325, 0.059282, 0.087981, 0.014721, -6421e-6, -0.050171, 0.022545, -0.066806, 0.053691, -0.046373, -0.066624, -0.05594, -2923e-6, -0.072017, -0.035938, -0.031965, -0.078192, -0.01764, 0.047027, 0.05296, -0.039368, 0.060137, -0.014895, 2928e-6, -0.053409, 0.059899, -0.071938, -0.084993, 0.014731, -9255e-6, -0.012538, -0.057773, -0.01937, 0.011484, 0.118908, -4683e-6, -0.101681, -0.030016, 0.04375, 0.078497, -0.024205, -4214e-6, 0.041916, -0.032365, -0.03231, -8687e-6, -0.054573, 9854e-6, 3192e-6, -0.041575, 0.030278, -0.063586, 0.050707, -0.033235, 0.028844, -0.078475, -0.046236, 0.019996, -0.103771, -0.031058, 0.036113, 0.053975, -0.013333, -0.037514, -0.05237, 0.069865, -0.022002, 0.043238, -0.058168, -0.01832, 0.065564, 0.052553, -0.016286, -0, -0.060219, 0.015225, -0.044145, 0.023352, -0.052523, -0.013584, -0.073037, -0.033518, -0.01456, -7575e-6, 2766e-6, -0.030461, -0.045765, -0.042223, -0.032423, -0.03025, 0.020423, 0.066116, -0.085401, -0.038306, -0.12109, 0.040213, 131e-6, -0.04345, 0.070947, 0.014882, 7721e-6, 0.088877, 0.047515, -0.074231, 0.048281, -648e-6, 0.016151, 0.047549, -1148e-6, 0.028044, 0.088863, 0.014517, 0.022091, 0.123896, 0.05443, 0.032042, -0.05105, 0.069732, 0.057286, -0.060648, 108e-5, -0.050034, 0.03852, -0.017144, 0.024196, -0.032345, -0.031836, -0.030237, -0.01748, -1953e-6, 0.045463, 0.059662, 0.020283, -603e-5, 0.145025, -0.031073, 0.069219, 0.012386] },
|
|
5132
5132
|
{ name: "brief", category: "memory", tier: 1, descriptionHash: "cd54c8b5f8962c0c", embedding: [-0.03413, 0.038967, -0.058868, 5065e-6, 0.013581, -9201e-6, 0.12418, 0.084974, 0.0466, -0.027719, -0.03003, 2981e-6, -0.019524, 6126e-6, 0.121445, 0.030564, 0.113974, -0.019305, 0.010584, 0.022772, 0.040912, 0.049654, 0.012009, 0.014554, -317e-6, 0.010126, -0.084735, -1667e-6, 0.083471, -7537e-6, 0.013307, 0.106008, 0.040402, 0.065893, -0.017905, 0.099291, 0.017319, 0.015036, -6372e-6, -0.066617, -0.060547, -0.011005, -0.057781, 0.076661, 9708e-6, -0.045502, -0.044302, -9454e-6, -0.045664, 9896e-6, -0.053175, 0.012171, -0.021067, 0.071767, -8367e-6, 0.128232, -5307e-6, 0.069086, -0.038624, 0.028583, -0.068574, -0.100884, -0.052176, 0.044373, -0.012476, 0.041925, 0.032421, 9466e-6, 0.055237, -0.135804, -0.045271, -0.032277, -0.034088, 0.044972, -0.037657, 0.01615, 0.023087, -0.047546, 5856e-6, -0.118672, -0.013503, 0.027683, 0.021988, 623e-5, -9077e-6, -0.021581, 0.013314, -0.037775, -9507e-6, 0.037748, 85e-5, -0.052845, -7436e-6, 0.03521, 1699e-6, 0.028288, -0.035951, -0.049538, 3357e-6, 0.065678, 0.059998, 0.099599, 0.012784, 0.041595, -0.076292, -0.037029, -0.037229, 0.013993, -0.035633, 4893e-6, -0.057584, 0.047254, -0.010266, -0.037457, 0.077024, -0.074891, -0.038335, -0.034745, 0.026768, 0.120412, 0.06315, -0.034399, -0.048602, -0.025597, -0.086307, -0.035078, 0.03381, 0, 0.074016, -5576e-6, -0.035261, 0.135218, 8885e-6, 0.058899, -0.020769, -0.018972, -0.036681, -0.017513, 0.022473, 0.099641, -0.01237, 0.02122, 0.020966, -0.011241, -0.106938, 0.129492, 0.066344, -0.036365, -0.033113, -6609e-6, -6963e-6, -335e-5, 0.113098, 0.012043, 0.013074, -0.05108, -0.02582, 0.038526, -0.04915, -0.044315, -0.060091, -8148e-6, 0.053718, 0.02143, -5476e-6, -0.021335, -0.010914, -0.106699, -0.040708, 0.013624, 0.031717, -0.058864, -0.091039, -0.10624, -0.040266, 0.024783, 0.036104, 0.013351, 5674e-6, 0.013377, -0.014192, 0.012503, 6394e-6, -0.02841, -4971e-6, -0.022927, -2823e-6, 0.087578, 0.041583, 7853e-6, -0.083155, 0.025704, 0.033491, 0.011361, -0.04942, -0.044508, 0.0311, -0.046498, -0.027239, 3602e-6, 0.040659, 0.050427, -0.025982, 0.014929, 0.015421, 0.031525, -0.062248, 0.03429, 0.052807, -0.044957, -0.023206, 0.055626, -0.038784, 0.022958, 0.043242, -0.128127, -0.054922, 3364e-6, -0.076564, -0.037719, 0.03462, 0.055063, -0.070653, -0, 0.06233, -0.030029, -0.032604, 0.014582, 0.045522, 0.028487, 0.060517, -2969e-6, -0.114903, 0.015776, -0.035656, 5943e-6, 0.029417, 1415e-6, 0.010575, 6686e-6, 0.033255, -0.076697, -0.018056, 0.07942, 0.059409, -0.03671, -0.127963, 0.026159, 0.014287, -0.024613, -0.05576, -0.032465, -0.023479, -0.030419, 9631e-6, -9214e-6, -0.016757, 0.013094, -0.050212, -0.035049, 0.049743, -0.065495, -0.075293, -9875e-6, 0.129848, 0.020889, -0.079259, -0.026347, -0.02803, 2228e-6, -0.065164, 0.043506, -0.033239, -295e-6, -6674e-6, -0.011676, 0.014787, -0.070129, -0.065786, -0.041317, -3707e-6, -0.025125, -0.027828, -0.086907, 0.07926, 7317e-6, -0.053674, -0.034213, 0.054837, -0.062371, 0.036652, 0.070297, -0.090998, 0.015399, 0.052273, -0.051188, 0.039306, -0.066122, 0.040192, 0.02005, -0.022352, -0.17157, -0.039433, -7233e-6, -0.039524, 15e-4, -0.027335, 0.059864, 0.062908, 0.051305, -0.020745, 0.089525, -0.011786, -0.020093, -0.070926, -0.055612, -0.052107, 0.110824, -385e-5, -0, -0.070805, -0.035939, 0.03615, 0.036301, 0.044026, 2509e-6, -5092e-6, 0.068686, 0.037356, 0.02202, 0.025483, -0.032118, -0.107202, -0.04086, 0.048949, 0.038155, -5906e-6, 0.013435, -0.031491, -0.055225, 0.067576, 0.035719, -0.022875, 0.016182, 0.043324, 0.011605, 0.061764, 0.143727, 0.050779, -0.052731, -0.015323, 0.062416, -0.018611, -0.07632, -0.047169, 0.100932, 0.033838, -0.021418, 0.046654, 0.014842, 0.036839, -0.024439, 0.035967, 0.067279, -5978e-6, 0.097739, -0.058634, 0.020037, 1243e-6, -0.081814, -0.06543, 8175e-6, 5117e-6, 0.080321, 57e-6, 0.063212, 0.053892, -0.021493, 0.052762, 0.018396, 0.067694, 0.088151, -0.031927, -0.019349] },
|
|
@@ -5134,6 +5134,7 @@ var init_tool_embeddings_generated = __esm({
|
|
|
5134
5134
|
{ name: "discover_stub_candidates", category: "wikilinks", tier: 2, descriptionHash: "628a3a335208b973", embedding: [-0.09812, -0.054312, -0.070512, 0.038192, 0.040619, -0.02555, -0.045477, -7475e-6, -0.043087, -0.030165, 0.07167, -0.024169, 0.05651, -0.038204, 4547e-6, 0.071702, -0.034343, 0.03125, 0.069571, -0.042322, 0.058442, 0.061128, 0.016965, 0.028509, 0.056729, -0.100309, -0.085489, 5444e-6, 0.073183, -0.029471, -0.013408, 0.122638, -0.07385, -0.042652, 0.0734, 0.077877, -9952e-6, 0.021991, 0.064361, -0.046096, 0.015481, -0.015881, -0.072412, 0.040116, -0.0193, -0.019022, -6218e-6, -0.012166, -0.058847, 8224e-6, -0.085754, -0.067661, -0.06106, 0.097056, 0.014844, 0.018418, -0.037604, 0.02275, -0.092703, -0.020994, 0.076397, 0.011054, -9451e-6, -0.066844, -0.045907, 0.062067, 0.02645, 0.065642, 0.089695, -0.068186, 8696e-6, 4075e-6, -0.021654, 0.110846, 3627e-6, 0.022499, -0.018147, 3616e-6, -0.066842, -0.06413, -0.057406, 4232e-6, -0.022044, 0.013012, 0.018437, 0.023711, -5281e-6, -0.041589, 0.027109, 0.033755, 0.099272, -0.073114, 0.084383, -0.041708, 0.032248, 0.015366, 0.058361, -0.060982, 0.045222, 0.042198, -0.044668, 0.08128, 0.048299, 7356e-6, -7058e-6, 0.07388, -0.029053, 514e-5, 0.041048, -0.026808, -1128e-6, -7521e-6, -869e-6, -0.047604, 0.010703, -0.041048, -0.043116, -0.016924, 0.021475, 0.026152, 0.081737, 0.073888, 0.06545, -3544e-6, -0.102327, -0.023483, -0.078185, 0, 0.114319, 0.059155, -0.040434, 0.026472, -7258e-6, -0.016645, 0.013714, 0.018014, -0.080143, -0.025731, -2337e-6, 1422e-6, -0.011199, 96e-5, -0.033162, 0.025166, 0.015319, 0.090921, 9138e-6, -9153e-6, 0.047919, 0.038053, 8123e-6, -0.049632, 0.056052, 0.032819, 0.011161, -0.027653, -0.055768, 0.013019, -0.010643, -0.0242, 0.069609, -8569e-6, 0.072752, 0.045046, -0.023765, -0.052473, -0.022721, -0.048521, -2762e-6, -385e-6, 0.016149, -0.024197, 0.054593, -0.073401, 2681e-6, -4515e-6, 0.053246, 0.020055, -0.027397, 0.023012, -0.068882, 0.019692, -0.028706, -0.049111, -0.018949, 0.015266, 0.012892, -6506e-6, 0.064779, -0.045837, -0.10525, 0.014282, -0.070262, 0.03773, -0.084832, -0.065563, 0.041743, 0.046385, 0.03398, 0.028765, -0.066671, 5787e-6, -0.035158, -0.102997, -0.071684, -0.042156, 0.014444, -0.042034, -2899e-6, -0.085914, -0.06675, 0.060724, -8182e-6, 0.052107, 0.061411, -0.126724, -0.035529, -0.065319, -0.066988, 0.026359, -0.022644, -0.048853, -0.024038, -0, 0.066753, -7007e-6, 0.056518, 0.058147, -7411e-6, 0.013532, -0.018453, -2727e-6, -0.023, 0.024324, 0.017495, -836e-6, -0.048399, -0.036151, 0.087168, 0.020536, -0.021205, -0.063403, -4844e-6, 0.106625, 0.031667, -0.010364, -0.033602, 0.073029, 0.046497, -0.028953, 0.014094, -0.034929, 0.017145, -0.047879, 0.018415, 0.028482, -0.055397, -0.082315, -0.012961, -0.014784, 0.041326, -0.017604, -0.0839, -557e-6, 0.118787, 0.027865, -0.057361, -0.03688, -0.069903, -0.057791, -0.033227, 0.05893, 0.023178, -0.058755, 0.119526, -0.064226, 3872e-6, -0.033899, 6443e-6, 0.081038, -0.015076, 0.096252, -0.019275, -0.037939, 0.012553, 0.04091, -0.048494, 0.049517, 0.049625, -0.08832, -0.063701, 0.06941, -0.11221, 0.012454, -667e-5, 0.074362, 0.022811, -0.127722, 609e-6, -956e-5, -0.075246, -0.055536, -0.023915, -0.037288, -0.023337, 0.015951, 0.070605, 0.022966, 0.013506, -0.015915, 0.021164, 0.075737, -0.020556, -5194e-6, -0.025267, -0.064481, -1682e-6, 0.104099, 0.035939, -0, -0.035684, 0.095118, -0.074946, 3192e-6, 0.035481, -0.019473, 3924e-6, 0.057021, -0.069225, 0.019619, 7536e-6, -0.078764, -0.092326, 0.03546, 0.038842, 0.011172, -0.02379, 0.026074, -0.043805, -0.064525, -0.016496, 0.029589, 0.049802, 0.014292, -0.031217, 0.062596, 0.038086, 0.123189, 0.072721, -0.037612, 0.027056, -0.0134, 9026e-6, -0.076066, 0.046425, 0.132013, -0.025846, -0.030815, -0.020059, 0.078835, -0.021838, 0.010186, 4886e-6, 0.072303, 0.061746, -0.052082, -0.011914, 8662e-6, 0.013704, -0.071969, -0.010006, -0.030773, -4264e-6, 719e-5, -0.020988, 0.064165, 0.078525, 0.047512, 4862e-6, -0.059698, 0.184291, -0.062535, 0.070518, 0.050647] },
|
|
5135
5135
|
{ name: "discover_tools", category: "search", tier: 1, descriptionHash: "aa8995ef7f47401b", embedding: [-0.075188, -0.021086, -0.070189, 0.027863, -0.011663, -0.111824, -0.030346, -0.055104, -0.028948, -964e-5, 0.048634, -0.057464, 0.033817, 7175e-6, 0.011836, 0.053405, -0.013156, -0.036403, 0.089025, -0.065241, 5382e-6, 0.037918, -5621e-6, -0.040135, 0.019724, -0.022742, -0.055146, -0.04527, 0.02007, -9524e-6, -0.016252, 0.057074, -4075e-6, 505e-6, 0.084357, 0.105241, 0.05814, 0.016512, -0.02048, -0.089392, -0.017279, -0.059956, -0.042557, -0.020422, -0.013626, -0.053287, -0.116333, -0.027996, -0.010748, 3943e-6, -0.046903, -0.094901, -0.06335, 0.072725, 0.058132, 0.109191, 7471e-6, -0.012742, -0.025956, -0.022849, 0.067187, -983e-6, -0.048119, 0.016697, -0.041044, 0.044199, 0.021653, -0.044895, 0.081919, -0.116255, 0.015069, -9135e-6, -0.039679, 0.027543, 0.106306, 0.056589, 0.032697, 0.038454, -0.035896, -0.151718, -0.069043, 0.051894, -0.029377, 0.069531, -0.023954, 0.071038, -0.014322, -0.028599, 0.076246, 0.016156, 0.020133, -0.134726, -0.073939, -0.071862, -0.018366, 0.013815, 7942e-6, -0.03676, 0.034956, -0.010209, -0.077494, -9537e-6, 0.029254, -0.084394, -0.044125, 0.099604, -0.063872, -0.014194, 0.061705, 0.017144, -0.021457, 1541e-6, 0.076249, -0.033957, 0.053548, 0.035583, -0.067036, -0.020214, -0.05177, 0.071649, 0.052922, 0.109373, 0.044848, -0.055537, -0.018694, 0.098885, -0.056785, -0, 0.105679, -0.019862, 2447e-6, 0.062664, -3153e-6, 0.03486, 0.047175, 0.018801, -0.059901, 0.02577, -0.057711, 0.059793, -0.061608, -7361e-6, 0.028895, 0.046272, 0.042275, 0.057409, 0.035205, -0.040239, -5299e-6, -0.014404, -0.029234, 0.043057, 0.101209, 0.053609, -0.0104, -3749e-6, 5548e-6, 0.025031, -0.06258, -0.024213, 0.034139, 0.067818, -0.018895, 0.079705, -0.010918, -0.026168, -0.028529, -0.01576, 0.023614, -0.019583, -0.054301, -0.089354, 0.020601, -0.080503, -0.067058, 0.028848, 0.072858, -0.012721, -0.016256, 7214e-6, 0.073557, 6098e-6, -0.011199, -213e-5, -0.01642, 0.033319, 0.053211, 0.038781, 0.033251, 0.018787, -0.070695, 0.089868, 0.011783, 3361e-6, 0.016143, -0.046838, 8084e-6, 0.089449, -0.043313, 0.061697, -0.040691, 0.012123, 0.024459, -0.148406, -0.037517, -0.057303, 0.024418, -7207e-6, -0.019377, -0.05232, -0.046205, 0.058728, 5983e-6, 0.013952, 0.021432, -0.042616, -0.043659, -0.068847, -0.091945, 9479e-6, -0.061069, 0.032148, 9958e-6, -0, 0.040652, -0.068116, 0.072305, 0.035184, -0.020632, -0.057712, -0.02841, -0.082632, -0.01321, 0.019844, 0.090441, 0.035095, -0.044615, -0.129175, 0.114251, 0.070678, -0.063627, -0.100181, 0.025629, 0.109847, -0.035361, 1383e-6, -0.115486, 0.04072, 0.041929, -0.067248, 8969e-6, -2463e-6, 0.018072, 135e-6, 9092e-6, 0.080653, -0.035027, 495e-5, -0.045352, 0.017452, 0.09904, -0.027698, -527e-6, -0.025174, 3514e-6, 0.049152, -0.099115, 7461e-6, -7823e-6, 0.040005, -0.014621, 0.05924, -0.024107, -0.047808, 0.085614, 0.017335, -0.010463, -0.049807, 2247e-6, 0.064009, 0.042356, 0.018684, -0.040498, -0.020599, 0.036185, -0.010663, -0.043319, 0.083483, -7926e-6, -6604e-6, -0.023185, 0.024318, -0.090426, -0.045626, 0.0199, 0.02269, 0.040662, -0.096964, 0.028033, -0.036186, -0.087325, -0.038926, -0.023116, 0.02771, 0.019014, -1276e-6, 0.118484, 0.010463, -0.033128, 7546e-6, -0.015151, 0.083676, -0.035601, -3541e-6, -0.089467, -0.032535, -0.070525, 0.024172, 0.02375, -0, -0.021465, 0.044607, 0.014306, -0.047116, 0.075083, 0.085343, -0.012816, 0.157587, -0.034197, 1913e-6, -0.029213, -0.019289, -0.014942, 0.041905, 0.029948, -0.013572, 0.025128, 9812e-6, -0.059942, -0.056379, 5458e-6, -252e-5, 0.057553, 3015e-6, 7678e-6, -0.072857, -0.057614, 0.030144, 0.038096, 3422e-6, -992e-5, -0.052856, 0.067301, -7253e-6, 0.093171, 0.057181, 0.024557, 3957e-6, 0.015116, 0.049431, 7994e-6, 0.033472, -5896e-6, -0.035395, -0.084564, -0.018945, 0.027141, 0.028566, 0.020801, -0.028642, -258e-5, -0.023189, -7276e-6, 1472e-6, 377e-6, 0.105597, 0.040329, -0.052133, 0.055025, -0.054046, 0.021824, -0.046932, 0.064667, -2851e-6] },
|
|
5136
5136
|
{ name: "dismiss_merge_suggestion", category: "diagnostics", tier: 3, descriptionHash: "47c8962ceccd5f9f", embedding: [-0.023338, 0.010102, 0.026973, 0.021975, 0.012625, -0.01557, 0.024025, 0.029926, -2278e-6, -0.044144, 0.066171, -0.034416, -7655e-6, -0.03796, -0.017915, 0.051656, -0.019761, 0.079459, 9618e-6, -0.022086, -0.02136, 0.053317, -0.057838, 0.060728, 0.022116, -0.078515, -0.056672, 0.038406, -0.036895, -0.045087, -0.031794, 0.137034, -0.087158, 0.077284, 4641e-6, 6706e-6, 2016e-6, 0.017908, 0.058914, -0.048758, -0.039906, -0.067589, -0.065378, -0.056846, -0.069696, 5921e-6, -0.075663, -0.028967, -0.06909, 9803e-6, -0.014472, -0.013229, 0.012225, 0.072078, -0.02576, 0.047402, -648e-5, 0.029322, -0.055128, 4513e-6, -0.054598, 0.02621, -0.09197, 0.016005, 0.036129, 0.056139, 0.051789, -0.039567, 0.049997, 0.015482, 0.034336, -1203e-6, -0.11082, -951e-5, 986e-6, 0.039252, 0.021629, 0.011346, -0.053917, -253e-6, -0.122692, 0.070293, -0.017298, -0.04309, -3774e-6, -2177e-6, -0.051237, -8416e-6, 0.01135, -0.011549, 0.012118, -131e-5, 0.038397, 0.036026, 0.03373, 0.037221, -0.023417, -0.085477, 0.072866, 0.053443, -0.031276, -0.018876, -0.076879, -0.066235, -0.049817, -0.061068, 0.010319, 0.017291, 0.038569, -0.028451, -0.026476, -0.031772, 0.030444, -0.041508, -3815e-6, 0.129385, 0.028289, 8561e-6, -0.015227, -0.065514, 0.018789, 0.056586, 0.024662, -0.049864, -0.051504, 0.012343, 0.010254, 0, -0.021038, 0.013067, -0.018878, 0.034128, 0.023509, 13e-6, -0.068364, -9804e-6, 0.019666, -0.034067, 3416e-6, 0.089971, -6039e-6, -0.098099, -0.036155, -0.024301, 0.107554, 0.157059, -0.017958, 0.042889, 0.092164, 0.114729, -0.011073, 0.075016, -6312e-6, 0.038185, -0.04678, 0.035415, 0.026009, 0.021646, -0.035313, -2852e-6, -0.033595, 0.025245, -0.012326, 0.039675, -0.051797, -0.041973, -0.020778, -0.01339, -8217e-6, 0.028444, -0.062665, -0.064806, 0.091182, -0.12945, 0.012972, 0.025205, 0.036578, 0.027768, 0.120512, 0.049914, 0.03658, 0.048002, -0.042842, 0.025885, -0.029025, -0.013991, -0.016964, 0.032863, 0.070305, -0.043384, -0.125158, -0.052908, 0.011694, 0.023573, -1938e-6, -0.030328, 4977e-6, -0.121584, -0.03052, 0.024666, 0.040523, 0.028344, 0.018709, -0.118279, -1861e-6, -1832e-6, 0.106899, -1889e-6, 4167e-6, 6483e-6, -0.079434, -0.022239, 0.03911, -0.029387, 0.037888, -0.044168, -0.121824, 0.039255, -0.034519, 7084e-6, 0.027034, 0.065434, 0.11698, -0, 0.052356, -0.025346, -0.042795, 0.044749, -0.055771, -0.029546, 0.047858, 0.060602, -0.116607, -0.113969, 0.037096, -0.059944, 0.023424, 5212e-6, -0.076302, -6226e-6, 679e-6, -0.062111, -0.017949, 0.114986, 0.077338, -0.014452, 0.035626, 0.037469, -0.014161, -1063e-6, -0.01635, -0.02834, 0.0662, -0.08534, 0.076199, -0.010862, -0.023617, -3712e-6, 0.087191, -0.110645, 0.022647, -0.069529, -0.039472, -3544e-6, 0.070237, 0.074861, -0.018418, -3723e-6, -6324e-6, 0.039383, 6141e-6, -3431e-6, 0.019424, -0.084254, -0.031347, -5664e-6, -0.031156, 0.017204, -0.012568, 0.03012, 0.053939, -2583e-6, -0.06997, 544e-6, 0.0343, 0.01457, 0.022844, 0.075876, 0.067643, -0.066646, 0.044489, 0.068098, 0.035603, 0.031257, -0.034684, 0.062827, 9264e-6, -0.092746, 0.051431, -0.018152, -0.014581, -0.0873, -6521e-6, -0.03984, -0.02417, -0.060173, 7445e-6, 2155e-6, -0.040278, -0.088263, -0.014137, 0.097284, 0.063571, 0.038699, -5072e-6, -0.107762, 0.051688, 9922e-6, -0.107443, -0, -941e-6, 0.030223, 0.049534, -0.01526, 0.051383, -0.019278, 0.023621, 0.021995, -6229e-6, -0.09886, -0.028362, -0.024151, -0.10791, -0.062359, 0.071131, -0.069536, 0.018568, 0.018079, -0.026545, -0.026233, -0.131491, -0.021555, -0.059991, 0.041647, -0.019936, 0.061779, 0.018582, 0.092756, 0.038395, -0.042621, 8054e-6, 0.053584, 0.076751, 9861e-6, -0.034958, 0.06178, 0.072284, 0.063442, 0.040528, 0.018288, 0.070335, 0.064542, -0.051424, 0.029742, 0.046415, -0.013781, 0.018313, -0.039586, -0.014698, -0.04923, -0.046853, 0.04647, -0.042948, 0.056406, -0.017556, 0.071641, 0.04108, 0.011913, -0.041331, -0.03064, 0.106641, -0.05111, 9969e-6, 0.036123] },
|
|
5137
|
+
{ name: "find_notes", category: "read", tier: 1, descriptionHash: "e43ef3fc29d690a1", embedding: [-0.050921, 0.033866, -0.050669, 0.023253, 0.01284, 0.022152, 9658e-6, 0.062628, 6993e-6, -0.020305, 0.034385, 0.02259, 0.026413, -0.014329, 0.045008, 0.065487, 0.040583, 0.010209, 0.061016, -0.016235, 0.070874, 0.082061, 0.044304, 0.014699, 6012e-6, 0.060414, -0.137907, -0.02245, 3054e-6, -563e-6, 0.014378, 0.104392, 0.089175, 0.069092, 0.011279, 0.064329, 3164e-6, 8318e-6, 8947e-6, -0.025506, -0.058761, 0.035582, -0.035264, -6461e-6, 0.013353, -0.053461, -0.04462, -0.063291, 73e-6, 0.033024, -0.106174, 0.011366, -0.102458, 0.04031, 0.059224, 0.068853, -8624e-6, -0.03419, -0.068872, -0.064738, 0.07582, -0.066601, -2672e-6, -0.046117, 0.016853, -0.025091, 0.05571, -0.014453, 0.059823, -0.116259, 0.086318, 0.01817, 0.032054, 0.042707, 0.010277, 2311e-6, 0.016759, -0.043385, -0.087182, -0.100671, -0.100746, 0.036531, 0.032576, 0.027673, 0.020499, -0.046257, 0.029386, -0.058214, 0.011119, 0.045226, 0.088051, -0.10296, -0.029063, -0.036288, -0.013474, 0.032753, 0.013059, -0.023867, 0.077958, 0.015161, 0.073875, 0.091007, 0.023323, 1474e-6, -0.034735, 0.055481, 3883e-6, 0.02814, -0.023306, -0.102492, -0.028505, 5991e-6, 0.022106, -0.048866, -0.011639, -0.117443, 0.021725, -0.03563, 0.036692, 0.097862, 0.068455, 984e-5, -953e-5, -6348e-6, -0.075273, 0.033312, -0.090439, 0, 0.0461, 8496e-6, 0.020671, -0.012299, -0.026415, -0.01484, 0.033925, 0.074388, -0.07732, -0.033925, 0.043464, 0.061831, -0.02651, 0.028108, 0.012551, 0.018105, -0.030899, 0.070236, 0.022298, -0.019907, 0.023648, -0.014626, 0.044686, -0.035992, 0.042653, 0.015801, -0.04811, -0.062062, -0.030236, 5664e-6, -0.041299, -0.043364, 0.025286, -0.044235, 0.010412, 0.069949, -0.042898, 0.029065, -605e-6, -0.127485, -0.029685, 5025e-6, 0.011484, -0.068491, -0.043121, 0.010125, -0.115426, 0.064869, 0.082784, 0.011876, 0.016062, -0.015353, -0.04806, 0.04241, 0.051229, 0.031612, 0.054409, 0.053707, -0.035612, -6425e-6, 0.027804, -1824e-6, -9632e-6, 0.035209, -0.040579, 9307e-6, 6698e-6, -0.024194, 0.082658, 0.049284, -0.010679, 0.054456, 0.04506, 0.045918, 0.012386, -0.076681, -0.049914, -0.107904, 0.021174, -0.042836, -0.055827, -0.020313, 8788e-6, 0.083435, -0.038939, 0.037131, 0.038079, -0.154678, -9965e-6, -0.056421, -0.102567, 0.031431, -0.064961, -0.038573, -0.056715, -0, 0.033899, -0.04128, -0.019875, -0.015476, -2999e-6, 0.018783, -0.042818, -0.012992, 0.034608, 0.065322, -929e-6, -4701e-6, -0.046644, -0.040136, 0.019661, 0.029907, -0.019495, -0.044035, 0.021241, 0.029773, -0.092879, 0.023687, -0.064376, 0.08183, 0.032339, -0.013273, -0.041886, -0.070739, 0.015752, -0.04446, 0.011121, -0.053487, -0.03573, -0.02987, -0.088857, -0.010453, 0.014469, -0.074013, -0.068549, 0.11693, 0.021643, 0.10626, 0.026009, -0.05103, -0.035228, -0.02893, -0.051412, 0.083298, -0.010362, -0.029992, 0.128837, -0.05107, -0.032349, -0.023682, -0.020528, 0.05007, -1726e-6, 0.010952, -0.096699, -0.037013, -0.011377, 0.067207, -0.08891, 0.064519, 0.012385, -0.087177, -7447e-6, -0.047874, -0.098774, -246e-6, -416e-5, 0.011791, 0.060179, -0.026436, 0.068111, 0.063281, -0.048777, -0.037344, -0.035185, -0.045112, 228e-6, -0.018255, 0.070926, 0.074643, -0.027101, -312e-5, -845e-5, 0.081348, -0.039755, 8152e-6, -0.016487, -0.091404, 0.040585, 0.037761, 0.02901, -0, -0.120004, -0.055032, -0.069617, 487e-6, -8177e-6, 0.036238, 0.039131, 0.062128, -0.018051, 0.042875, 0.055566, -0.061826, -0.116484, -9875e-6, -0.02863, -47e-5, 0.088031, 0.01298, -0.047375, -0.025218, 0.024148, 0.056965, -0.029903, -549e-5, 0.038806, 0.010441, -0.035619, 0.091213, 862e-5, 0.015857, 0.052622, 0.051885, 0.013662, -1946e-6, 0.074094, 0.043884, 0.051566, -2604e-6, -0.056746, 0.123298, 0.065248, 0.036508, -0.077422, 0.035024, 0.04275, -0.032052, -0.034041, 0.022069, 0.023385, -0.037159, -0.035373, -0.026625, -0.05051, -3366e-6, -0.059454, 0.068932, 0.059632, 0.04633, 0.050775, -0.096208, 0.130304, 0.024892, 0.038686, 0.052013] },
|
|
5137
5138
|
{ name: "find_sections", category: "read", tier: 1, descriptionHash: "74fce13d9549092a", embedding: [-0.030342, 0.060491, -8021e-6, 0.030402, 0.034086, -0.013811, -0.022587, 2462e-6, -6596e-6, -0.035757, 0.035343, 0.023975, 0.077693, 166e-5, 0.043858, -0.04943, -0.037704, 0.04429, 0.031027, -0.042792, 0.050432, 0.125346, 0.044412, -0.013126, -0.074755, 0.078361, -0.172116, -0.032701, -9936e-6, -0.033019, 0.051858, 0.036448, 0.033224, 0.044886, 0.076273, 0.035524, 0.040202, -0.038431, 0.04404, -0.02343, -0.040035, -6552e-6, -0.060473, 0.038516, 0.098157, -0.01963, -0.088086, -0.028825, 0.020767, -0.022852, -9884e-6, -0.054031, -0.014701, 0.119373, 0.016606, 0.121151, 2686e-6, -0.025376, -0.046604, 2842e-6, 0.013019, -0.051516, -0.018006, -0.100164, -0.070766, 0.027865, 0.012944, 0.038408, 0.029641, -0.046822, 5892e-6, 0.013051, 0.04439, 0.074209, 0.021195, -0.018881, -0.055523, -0.074547, -0.064752, -0.106993, -0.118603, -1004e-6, -801e-6, 0.041407, 125e-5, 0.010371, -0.027279, -0.031324, -0.02001, 0.018597, 0.06416, -0.122144, -0.01943, -0.05743, -0.043722, 0.055421, -0.027671, -0.082106, 0.079829, 0.010421, -333e-6, 0.022296, 0.062389, -0.021314, -0.041691, 0.044795, 645e-6, 0.055435, -0.030719, -0.016922, 0.013671, 0.034044, 0.026491, -0.02071, 0.018967, -0.083833, 0.062119, -0.018039, -0.012321, 0.099432, 0.144742, 0.018988, 0.053663, 0.044619, -0.060006, -6485e-6, -0.044755, 0, 0.035052, 0.044903, 1367e-6, 0.032266, -0.063523, 9057e-6, 0.020671, 0.057216, 0.015045, 0.017387, -2526e-6, 0.018101, -0.037724, 0.01519, 5507e-6, 5813e-6, 0.014992, 0.097315, -0.064403, -3476e-6, -0.018069, -0.010961, 0.043404, -0.055552, 0.092179, 0.051136, -0.059276, -0.03281, -0.077371, -151e-5, 0.019082, -2963e-6, 0.029374, -0.06949, 0.046722, 0.041333, 0.011468, -1057e-6, -0.065248, -0.06657, -0.03827, -9144e-6, 0.055153, -0.064718, -0.07142, 0.014686, -0.05091, 0.046639, 0.034655, -565e-5, 0.049196, 0.05952, -0.054855, -0.046913, 0.027814, -0.04429, 0.020653, 0.041598, 0.016844, 0.048645, 0.138039, -0.010986, -0.034857, -2978e-6, -0.066292, -0.012499, -0.029318, -5318e-6, -0.014034, 0.054936, -0.047506, 0.077189, 0.022127, 8318e-6, 0.02407, -0.065667, -0.053178, -9303e-6, 0.018794, -0.049391, 0.029523, -0.027976, 0.01309, 0.066818, 0.048189, 0.060897, 0.067205, -0.092296, -0.049442, -0.095381, -0.067763, -0.015862, -0.045536, -0.088901, -0.012892, -0, 0.06293, -0.027381, -0.049882, -0.048805, -0.040283, -0.030062, -0.042061, -1262e-6, 0.022472, 0.038149, 0.01421, 0.023102, -0.031929, -1802e-6, 0.031493, 0.017294, -0.070261, -0.063565, 0.02926, 0.071348, -0.0842, -0.022464, -0.039841, 0.011849, -0.019604, 6205e-6, -0.038337, -0.03128, 0.051053, -0.020233, 0.031751, -0.035619, -8247e-6, 0.018168, -0.063469, -0.038976, -0.030614, -0.022961, -0.018559, 0.033551, 0.102696, 0.048456, 0.046256, -0.044813, -0.104627, -0.012166, 0.053182, 0.109896, -0.059642, -0.025584, 0.030218, -0.042642, -0.029755, -1656e-6, 0.033667, 0.086346, -0.049577, 0.019686, -0.108302, -0.082827, -2325e-6, 0.120747, -0.082826, 0.070632, 0.013544, -0.022901, 6495e-6, -0.071099, -0.109079, 5218e-6, 52e-6, -0.051579, 0.033843, -0.062399, 0.01686, 0.080653, -0.071492, -0.036951, -0.060971, 0.072182, -0.055218, -0.056946, -0.023398, 0.032859, 0.040577, -0.015512, -0.051021, 0.020128, -0.017036, -0.033358, -0.013442, -0.046306, 0.024523, 0.018636, 0.010252, -0, -0.050717, -0.05461, -0.069374, -0.049875, 0.023406, 0.046457, -47e-4, 0.02569, -0.06107, 0.040394, 0.057239, -0.084391, -0.084038, -0.082716, -0.029216, 0.038919, 0.052614, 0.04497, -0.059518, -0.034201, -0.042673, 0.077154, 0.021424, -0.031853, 0.030679, 0.0561, 0.011141, 0.090402, 0.059016, -0.025758, 0.116848, -0.020964, -0.019209, -9979e-6, 0.083416, 0.055124, 0.05086, 7032e-6, 0.046567, 0.095063, 0.064772, -0.038473, -0.01881, 0.092623, 0.037774, 1626e-6, -0.016401, -0.022132, 0.075897, -0.079739, -0.02768, -0.047942, -0.02779, 0.044502, -0.080474, 0.057093, 0.107004, -0.032895, 0.021104, -1022e-6, 0.095842, 0.010161, 0.07081, 0.046133] },
|
|
5138
5139
|
{ name: "find_similar", category: "search", tier: 1, descriptionHash: "8cda597ae957fa69", embedding: [-0.094141, -0.026872, -0.051473, 8406e-6, 4879e-6, 0.028182, 0.021725, 0.010543, 8429e-6, -0.061859, 0.065353, 0.042707, 0.054181, 0.031539, 0.035489, 0.025777, 0.034052, 4791e-6, -4614e-6, -0.0495, 0.025962, 0.038247, 0.02881, 0.019474, 6965e-6, 0.057814, -0.057077, 0.033033, -8063e-6, 0.011362, -4713e-6, 0.107639, 3432e-6, 0.014527, -0.043751, 0.03795, -0.0576, 0.018394, 9482e-6, -0.033041, -0.109223, -0.011194, -0.01176, 0.010569, -0.033724, -621e-5, -0.164359, 0.020514, 7049e-6, 0.026199, -0.118738, -0.035005, -0.102665, 0.030981, 0.062009, 0.051492, 0.025596, 6098e-6, -0.039834, -0.08611, 0.019703, -0.086627, -3085e-6, -0.024176, -0.025844, 0.019065, 0.041205, 8939e-6, 0.032626, -0.09224, 0.046784, 0.047413, 408e-6, 0.102938, 9671e-6, 0.037256, 9072e-6, -0.044819, -0.114125, -0.068626, -0.126186, -0.011813, 0.010629, 0.033487, 0.037436, -0.046876, 0.023274, -0.094556, 8138e-6, -1103e-6, 0.031519, -0.046237, -0.030294, -0.077778, 418e-5, 0.028652, -0.012221, -0.035589, 0.058638, 0.013855, 0.037924, 0.096432, 0.018567, -3815e-6, -7484e-6, 0.099955, -9518e-6, 0.03222, 0.072002, -0.165446, -0.015524, 1516e-6, 0.012182, -1787e-6, 0.025657, -0.073875, 0.068555, -0.013638, 0.044791, 0.110233, 0.05589, 0.034098, -0.05571, -8652e-6, -0.069751, 9473e-6, -0.046323, 0, 0.068089, 0.017094, -0.010404, -0.049216, 0.037503, -0.046226, -0.06398, 0.099955, -0.100539, -0.039221, -0.025712, 0.069855, -0.012657, 0.015057, -0.019749, -9544e-6, -0.036379, 0.067854, 836e-5, -0.025023, 8449e-6, -0.024203, 0.065956, -0.023905, 0.018832, -0.015392, -0.021127, -0.106481, 0.040378, -0.014955, -0.033607, -0.018732, 5369e-6, -0.033313, 0.025851, 0.069627, 0.012584, -0.016932, -0.034115, -0.075881, -0.043004, 6472e-6, -9157e-6, -0.092885, 0.019821, 0.024779, -0.089432, -2026e-6, 0.097244, -0.030914, 0.097445, 0.011088, -0.024596, 0.029414, 0.036112, -2591e-6, 0.035593, 0.047957, 0.029907, 0.058452, 0.094622, -0.04105, -0.018428, -6139e-6, -0.014532, 0.015191, 4471e-6, -0.023236, 0.080583, 0.072196, 0.036433, 0.015748, 0.029485, 0.020959, -0.018196, -0.03831, -0.078082, -0.060661, 0.066796, -0.034888, -0.1118, -0.062528, -8542e-6, -0.029103, -0.083378, 0.02097, 0.045763, -0.181843, 249e-6, -0.02501, -0.029242, 0.072502, -0.05568, -0.028341, 0.023941, -0, -0.027676, -0.079719, 0.033727, 0.020996, -0.019086, 0.017852, -0.017499, -0.06956, 0.013767, 0.043706, 0.010487, 3267e-6, -0.053302, -0.114997, -9262e-6, 0.037132, 0.021852, 0.047356, -0.033911, 0.094265, -2693e-6, -0.021708, -0.057341, 0.087859, 0.040723, 7354e-6, -0.037821, -0.065079, 2135e-6, -0.042653, -4211e-6, -0.041464, -0.033376, -0.130361, -0.03679, 3491e-6, -9471e-6, -5148e-6, -0.053835, 0.076699, -52e-5, 0.089281, -4586e-6, -0.0209, -0.03969, -0.012799, -0.102358, 0.045132, 0.020613, -0.038671, 0.10325, -0.018206, -0.02984, -0.045073, 4038e-6, 0.013697, -9424e-6, 0.051947, -0.111718, 0.010472, 0.050608, 0.043262, -0.014612, 0.064848, 0.067347, -0.026147, -1447e-6, 0.050739, -0.074301, 0.070453, -0.03206, 0.013224, 0.055497, -0.053912, 0.021404, 0.023032, 0.028694, 2299e-6, -0.032156, 2147e-6, 7647e-6, 0.012129, 0.018955, 0.047428, -0.082253, 0.050008, 0.011912, 0.053605, 0.013073, 4688e-6, -0.023318, -0.058419, 5351e-6, -0.022951, 0.016429, -0, -0.077997, -0.061891, -0.0763, 0.025395, -0.017781, 0.026831, 4535e-6, 0.04084, -0.061828, 0.036038, 0.070335, -0.074864, -0.022289, 0.04118, -0.023543, -0.016278, 0.051415, 0.021452, -0.013157, -0.01459, -0.013034, 0.085701, -2454e-6, 0.022924, 0.016946, 0.013259, -0.035887, 0.092101, 0.076497, 5185e-6, 1595e-6, 0.01819, -1842e-6, -0.095265, 0.114004, 0.028544, 0.01932, -0.017615, -0.093973, 0.110444, 0.08395, 0.031228, -0.010528, 0.041938, 0.109389, -0.025987, 0.089501, -0.041303, 0.022583, -0.029139, -3053e-6, -0.034541, -0.042497, 2068e-6, -7127e-6, 0.050123, 0.035239, 0.084588, 0.05259, -0.068666, 0.107741, -0.023708, 0.092277, 0.081288] },
|
|
5139
5140
|
{ name: "flywheel_benchmark", category: "diagnostics", tier: 3, descriptionHash: "56721fed4745fc27", embedding: [-0.04365, 0.053745, -0.080101, -0.020468, 41e-4, -0.071844, -0.014597, 0.039602, -0.057688, -0.032493, 0.02721, 0.027434, -1232e-6, -0.071034, -9741e-6, 0.017432, 0.044899, 0.033619, -0.019859, -0.081457, 0.038045, -0.047776, -0.016937, 0.093227, -0.012251, 6639e-6, -0.142268, 0.091764, -596e-5, -0.071224, -0.041194, 0.094839, -0.063519, 0.048893, -0.036977, 1905e-6, 0.035103, -3948e-6, -0.04204, -0.087716, 9535e-6, -0.047045, 1877e-6, 0.046271, -0.017675, 0.022272, -0.020737, -0.052453, -0.068041, 0.054904, -0.05304, -0.063392, 0.078724, 0.057657, 0.010875, 0.080467, 0.021188, 7713e-6, -0.040589, -0.062114, -0.014318, 0.032352, -0.060223, 0.041492, 0.048343, -0.021006, 0.036333, -0.042289, 0.090578, -0.052568, -0.018007, -0.043338, 207e-6, 0.024773, -0.022658, -8188e-6, -0.01045, -0.041531, 2065e-6, -0.101004, -0.022877, -3643e-6, -0.057342, 0.022842, 0.068413, -903e-6, 0.018945, -0.014389, -0.021446, 0.014971, 0.028212, 0.046377, -0.0166, -0.043639, 8777e-6, 0.07534, 7516e-6, -0.115462, 0.036956, 0.02147, -1413e-6, 0.030796, 0.040783, 0.029947, -0.044735, 0.031626, 0.067743, 0.040307, 1228e-6, 0.022479, 0.014051, 0.056204, 0.016062, -0.089096, -0.033638, -691e-6, -0.166019, 0.013482, -0.024181, 0.054256, 0.087382, -0.018882, 0.08546, -0.05341, 0.039749, -0.029252, -0.069433, 0, -0.019965, -0.025994, -0.041942, 189e-6, -0.023418, -0.052726, 4916e-6, -0.032936, -0.035307, 0.068607, 0.02538, 0.026342, -0.018516, -0.016972, 0.103301, -0.020803, -0.019436, 0.028745, 0.063606, -0.047515, 0.065771, -0.043997, -0.044109, -0.025005, 0.114346, 0.026468, -0.013202, -72e-6, -0.036441, 0.062539, 0.071677, -0.02798, -0.125495, -0.032103, 0.075729, 0.012534, -0.017578, -0.110185, -0.028367, -0.021696, -0.059134, -0.081614, -0.057397, -0.072086, -0.051733, -0.037076, -3297e-6, 0.03198, 0.051196, 0.046069, 0.013468, -0.010795, 0.018565, -0.037664, 0.058778, 0.011331, 0.034417, -0.027966, -3204e-6, 0.127036, -9781e-6, -0.066617, -0.097769, -0.046174, -0.01024, -0.01622, -0.031528, -7982e-6, 0.017703, 0.077218, -0.010175, -0.032308, 0.011168, 0.079917, 0.031421, -0.038859, -0.020781, 0.02392, -0.028019, -0.053932, -0.014146, -0.023359, -0.076479, 0.021815, -0.024817, 3055e-6, 0.013892, -0.03042, -0.049725, -0.057612, -0.090459, -0.019789, 0.038523, 0.022425, -0.066127, -0, -0.039352, -4022e-6, 4992e-6, 0.12333, 0.053293, 0.026893, 0.020728, -0.047962, -0.061876, 0.024865, -0.022473, 0.037633, -0.060217, -0.041814, 0.099062, -934e-6, -0.074002, -0.16178, 0.042439, 0.048014, 0.086151, 0.039259, -0.073105, 0.053776, -0.019328, -0.01958, -0.083169, 0.035834, 0.030011, -0.027086, 0.046629, -9909e-6, 0.055377, 0.017008, -0.018639, -0.030354, 0.064751, -0.091396, -0.04218, 0.020884, 0.054987, -0.016101, 0.014709, -0.071076, -0.015568, 0.013611, -0.038476, 0.027947, 0.071343, -0.024167, 0.061186, -1323e-6, 0.010021, 0.027888, 0.051437, 0.028682, 0.031871, -0.032682, 0.033443, -0.037071, 0.063809, -0.020001, -0.011495, 0.042264, -4154e-6, -0.045715, 0.066044, -0.011105, -0.078325, 0.086135, -0.036171, -4962e-6, 0.075979, -0.013807, -0.052723, -0.045832, 0.047068, -8927e-6, 0.022032, -0.035514, 6778e-6, -0.028906, 0.032308, 0.039424, -0.065938, 0.032055, -2201e-6, -3721e-6, 0.036053, -0.084289, 0.010297, -0.032589, -0.07423, 0.082545, 0.036635, -0, -2202e-6, 0.021356, 0.034685, 0.010865, 4789e-6, 517e-5, 0.050824, 0.085682, -536e-5, -0.048317, 0.121824, -0.077293, -0.029684, -0.024096, 0.126766, 3726e-6, -0.043705, 0.100922, -0.06178, -0.032917, -0.023144, 0.078051, -0.015477, -0.038242, -0.044214, 0.061835, 0.0414, 0.061225, 0.075318, -0.058286, -0.043735, 0.094909, 0.129674, -0.066863, -0.037152, 0.086565, -0.055083, 0.065645, 0.068465, 0.123136, 0.01407, 0.078232, -0.024692, 0.021577, -0.012116, -3694e-6, -0.040438, 912e-5, -0.022967, -0.025163, 0.028509, -0.018848, 4872e-6, 0.118593, -2199e-6, 0.085965, 0.030356, -0.075044, 0.037217, -0.0251, 0.110592, -0.028015, 0.031877, 8176e-6] },
|
|
@@ -6394,7 +6395,7 @@ __export(schema_exports, {
|
|
|
6394
6395
|
validatePolicySchema: () => validatePolicySchema,
|
|
6395
6396
|
validateVariables: () => validateVariables
|
|
6396
6397
|
});
|
|
6397
|
-
import { z as
|
|
6398
|
+
import { z as z20 } from "zod";
|
|
6398
6399
|
function validatePolicySchema(policy) {
|
|
6399
6400
|
const errors = [];
|
|
6400
6401
|
const warnings = [];
|
|
@@ -6589,13 +6590,13 @@ var PolicyVariableTypeSchema, PolicyVariableSchema, ConditionCheckTypeSchema, Po
|
|
|
6589
6590
|
var init_schema = __esm({
|
|
6590
6591
|
"src/core/write/policy/schema.ts"() {
|
|
6591
6592
|
"use strict";
|
|
6592
|
-
PolicyVariableTypeSchema =
|
|
6593
|
-
PolicyVariableSchema =
|
|
6593
|
+
PolicyVariableTypeSchema = z20.enum(["string", "number", "boolean", "array", "enum"]);
|
|
6594
|
+
PolicyVariableSchema = z20.object({
|
|
6594
6595
|
type: PolicyVariableTypeSchema,
|
|
6595
|
-
required:
|
|
6596
|
-
default:
|
|
6597
|
-
enum:
|
|
6598
|
-
description:
|
|
6596
|
+
required: z20.boolean().optional(),
|
|
6597
|
+
default: z20.union([z20.string(), z20.number(), z20.boolean(), z20.array(z20.string())]).optional(),
|
|
6598
|
+
enum: z20.array(z20.string()).optional(),
|
|
6599
|
+
description: z20.string().optional()
|
|
6599
6600
|
}).refine(
|
|
6600
6601
|
(data) => {
|
|
6601
6602
|
if (data.type === "enum" && (!data.enum || data.enum.length === 0)) {
|
|
@@ -6605,7 +6606,7 @@ var init_schema = __esm({
|
|
|
6605
6606
|
},
|
|
6606
6607
|
{ message: "Enum type requires a non-empty enum array" }
|
|
6607
6608
|
);
|
|
6608
|
-
ConditionCheckTypeSchema =
|
|
6609
|
+
ConditionCheckTypeSchema = z20.enum([
|
|
6609
6610
|
"file_exists",
|
|
6610
6611
|
"file_not_exists",
|
|
6611
6612
|
"section_exists",
|
|
@@ -6614,13 +6615,13 @@ var init_schema = __esm({
|
|
|
6614
6615
|
"frontmatter_exists",
|
|
6615
6616
|
"frontmatter_not_exists"
|
|
6616
6617
|
]);
|
|
6617
|
-
PolicyConditionSchema =
|
|
6618
|
-
id:
|
|
6618
|
+
PolicyConditionSchema = z20.object({
|
|
6619
|
+
id: z20.string().min(1, "Condition id is required"),
|
|
6619
6620
|
check: ConditionCheckTypeSchema,
|
|
6620
|
-
path:
|
|
6621
|
-
section:
|
|
6622
|
-
field:
|
|
6623
|
-
value:
|
|
6621
|
+
path: z20.string().optional(),
|
|
6622
|
+
section: z20.string().optional(),
|
|
6623
|
+
field: z20.string().optional(),
|
|
6624
|
+
value: z20.union([z20.string(), z20.number(), z20.boolean()]).optional()
|
|
6624
6625
|
}).refine(
|
|
6625
6626
|
(data) => {
|
|
6626
6627
|
if (["file_exists", "file_not_exists"].includes(data.check) && !data.path) {
|
|
@@ -6639,7 +6640,7 @@ var init_schema = __esm({
|
|
|
6639
6640
|
},
|
|
6640
6641
|
{ message: "Condition is missing required fields for its check type" }
|
|
6641
6642
|
);
|
|
6642
|
-
PolicyToolNameSchema =
|
|
6643
|
+
PolicyToolNameSchema = z20.enum([
|
|
6643
6644
|
"vault_add_to_section",
|
|
6644
6645
|
"vault_remove_from_section",
|
|
6645
6646
|
"vault_replace_in_section",
|
|
@@ -6651,18 +6652,18 @@ var init_schema = __esm({
|
|
|
6651
6652
|
"vault_add_frontmatter_field",
|
|
6652
6653
|
"vault_search"
|
|
6653
6654
|
]);
|
|
6654
|
-
PolicyStepSchema =
|
|
6655
|
-
id:
|
|
6655
|
+
PolicyStepSchema = z20.object({
|
|
6656
|
+
id: z20.string().min(1, "Step id is required"),
|
|
6656
6657
|
tool: PolicyToolNameSchema,
|
|
6657
|
-
when:
|
|
6658
|
-
params:
|
|
6659
|
-
description:
|
|
6658
|
+
when: z20.string().optional(),
|
|
6659
|
+
params: z20.record(z20.unknown()),
|
|
6660
|
+
description: z20.string().optional()
|
|
6660
6661
|
});
|
|
6661
|
-
PolicyOutputSchema =
|
|
6662
|
-
summary:
|
|
6663
|
-
files:
|
|
6662
|
+
PolicyOutputSchema = z20.object({
|
|
6663
|
+
summary: z20.string().optional(),
|
|
6664
|
+
files: z20.array(z20.string()).optional()
|
|
6664
6665
|
});
|
|
6665
|
-
ConditionsSchema =
|
|
6666
|
+
ConditionsSchema = z20.preprocess((val) => {
|
|
6666
6667
|
if (Array.isArray(val)) return val;
|
|
6667
6668
|
if (val && typeof val === "object" && !Array.isArray(val)) {
|
|
6668
6669
|
return Object.entries(val).map(([id, def]) => ({
|
|
@@ -6671,14 +6672,14 @@ var init_schema = __esm({
|
|
|
6671
6672
|
}));
|
|
6672
6673
|
}
|
|
6673
6674
|
return val;
|
|
6674
|
-
},
|
|
6675
|
-
PolicyDefinitionSchema =
|
|
6676
|
-
version:
|
|
6677
|
-
name:
|
|
6678
|
-
description:
|
|
6679
|
-
variables:
|
|
6675
|
+
}, z20.array(PolicyConditionSchema));
|
|
6676
|
+
PolicyDefinitionSchema = z20.object({
|
|
6677
|
+
version: z20.union([z20.literal("1.0"), z20.literal("1")]).transform(() => "1.0"),
|
|
6678
|
+
name: z20.string().min(1, "Policy name is required"),
|
|
6679
|
+
description: z20.string().min(1, "Policy description is required"),
|
|
6680
|
+
variables: z20.record(PolicyVariableSchema).optional(),
|
|
6680
6681
|
conditions: ConditionsSchema.optional(),
|
|
6681
|
-
steps:
|
|
6682
|
+
steps: z20.array(PolicyStepSchema).min(1, "At least one step is required"),
|
|
6682
6683
|
output: PolicyOutputSchema.optional()
|
|
6683
6684
|
});
|
|
6684
6685
|
}
|
|
@@ -12513,10 +12514,11 @@ var TOOL_CATEGORY = {
|
|
|
12513
12514
|
init_semantic: "search",
|
|
12514
12515
|
find_similar: "search",
|
|
12515
12516
|
discover_tools: "search",
|
|
12516
|
-
// read (
|
|
12517
|
+
// read (4 tools) -- note reading + structural enumeration
|
|
12517
12518
|
get_note_structure: "read",
|
|
12518
12519
|
get_section_content: "read",
|
|
12519
12520
|
find_sections: "read",
|
|
12521
|
+
find_notes: "read",
|
|
12520
12522
|
// write (7 tools) -- content mutations + frontmatter + note creation + undo + policy
|
|
12521
12523
|
vault_add_to_section: "write",
|
|
12522
12524
|
vault_remove_from_section: "write",
|
|
@@ -12600,6 +12602,7 @@ var TOOL_TIER = {
|
|
|
12600
12602
|
get_note_structure: 1,
|
|
12601
12603
|
get_section_content: 1,
|
|
12602
12604
|
find_sections: 1,
|
|
12605
|
+
find_notes: 1,
|
|
12603
12606
|
vault_add_to_section: 1,
|
|
12604
12607
|
vault_remove_from_section: 1,
|
|
12605
12608
|
vault_replace_in_section: 1,
|
|
@@ -12701,8 +12704,8 @@ Tool routing:
|
|
|
12701
12704
|
tools in those categories \u2014 they return targeted contracts, not broad results.
|
|
12702
12705
|
3. Escalate to "get_note_structure" for full markdown content or word count.
|
|
12703
12706
|
Use "get_section_content" for a single section by heading name.
|
|
12704
|
-
4. Start with a broad search: just query text, no filters.
|
|
12705
|
-
tag, or frontmatter
|
|
12707
|
+
4. Start with a broad search: just query text, no filters. Use find_notes for
|
|
12708
|
+
structural enumeration by folder, tag, or frontmatter \u2014 not search.`);
|
|
12706
12709
|
if (!hasEmbeddingsIndex()) {
|
|
12707
12710
|
parts.push(`
|
|
12708
12711
|
**Setup:** Run \`init_semantic\` once to build embeddings. This unlocks hybrid search (BM25 + semantic),
|
|
@@ -12713,7 +12716,7 @@ improves search results, and enables similarity-based tools. Without it, search
|
|
|
12713
12716
|
## Multi-Vault
|
|
12714
12717
|
|
|
12715
12718
|
This server manages multiple vaults. Every tool has an optional "vault" parameter.
|
|
12716
|
-
- "search" without vault
|
|
12719
|
+
- "search" and "find_notes" without vault search ALL vaults and merge results (each result has a "vault" field).
|
|
12717
12720
|
- All other tools default to the primary vault when "vault" is omitted.
|
|
12718
12721
|
- Available vaults: ${registry.getVaultNames().join(", ")}`);
|
|
12719
12722
|
}
|
|
@@ -12879,7 +12882,7 @@ import * as path39 from "path";
|
|
|
12879
12882
|
import { dirname as dirname6, join as join19 } from "path";
|
|
12880
12883
|
import { statSync as statSync6, readFileSync as readFileSync5 } from "fs";
|
|
12881
12884
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
12882
|
-
import { z as
|
|
12885
|
+
import { z as z40 } from "zod";
|
|
12883
12886
|
import { CallToolRequestSchema, ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
12884
12887
|
import { getSessionId } from "@velvetmonkey/vault-core";
|
|
12885
12888
|
|
|
@@ -13613,6 +13616,76 @@ async function findSections(index, headingPattern, vaultPath2, folder) {
|
|
|
13613
13616
|
return results;
|
|
13614
13617
|
}
|
|
13615
13618
|
|
|
13619
|
+
// src/tools/read/filters.ts
|
|
13620
|
+
function matchesFrontmatter(note, where) {
|
|
13621
|
+
for (const [key, value] of Object.entries(where)) {
|
|
13622
|
+
const noteValue = note.frontmatter[key];
|
|
13623
|
+
if (value === null || value === void 0) {
|
|
13624
|
+
if (noteValue !== null && noteValue !== void 0) {
|
|
13625
|
+
return false;
|
|
13626
|
+
}
|
|
13627
|
+
continue;
|
|
13628
|
+
}
|
|
13629
|
+
if (Array.isArray(noteValue)) {
|
|
13630
|
+
if (!noteValue.some((v) => String(v).toLowerCase() === String(value).toLowerCase())) {
|
|
13631
|
+
return false;
|
|
13632
|
+
}
|
|
13633
|
+
continue;
|
|
13634
|
+
}
|
|
13635
|
+
if (typeof value === "string" && typeof noteValue === "string") {
|
|
13636
|
+
if (noteValue.toLowerCase() !== value.toLowerCase()) {
|
|
13637
|
+
return false;
|
|
13638
|
+
}
|
|
13639
|
+
continue;
|
|
13640
|
+
}
|
|
13641
|
+
if (noteValue !== value) {
|
|
13642
|
+
return false;
|
|
13643
|
+
}
|
|
13644
|
+
}
|
|
13645
|
+
return true;
|
|
13646
|
+
}
|
|
13647
|
+
function hasTag(note, tag, includeChildren = false) {
|
|
13648
|
+
const normalizedTag = tag.replace(/^#/, "").toLowerCase();
|
|
13649
|
+
return note.tags.some((t) => {
|
|
13650
|
+
const normalizedNoteTag = t.toLowerCase();
|
|
13651
|
+
if (normalizedNoteTag === normalizedTag) return true;
|
|
13652
|
+
if (includeChildren && normalizedNoteTag.startsWith(normalizedTag + "/")) return true;
|
|
13653
|
+
return false;
|
|
13654
|
+
});
|
|
13655
|
+
}
|
|
13656
|
+
function hasAnyTag(note, tags, includeChildren = false) {
|
|
13657
|
+
return tags.some((tag) => hasTag(note, tag, includeChildren));
|
|
13658
|
+
}
|
|
13659
|
+
function hasAllTags(note, tags, includeChildren = false) {
|
|
13660
|
+
return tags.every((tag) => hasTag(note, tag, includeChildren));
|
|
13661
|
+
}
|
|
13662
|
+
function inFolder(note, folder) {
|
|
13663
|
+
const normalizedFolder = folder.endsWith("/") ? folder : folder + "/";
|
|
13664
|
+
return note.path.startsWith(normalizedFolder) || note.path.split("/")[0] === folder.replace("/", "");
|
|
13665
|
+
}
|
|
13666
|
+
function sortNotes(notes, sortBy, order) {
|
|
13667
|
+
const sorted = [...notes];
|
|
13668
|
+
sorted.sort((a, b) => {
|
|
13669
|
+
let comparison = 0;
|
|
13670
|
+
switch (sortBy) {
|
|
13671
|
+
case "modified":
|
|
13672
|
+
comparison = a.modified.getTime() - b.modified.getTime();
|
|
13673
|
+
break;
|
|
13674
|
+
case "created": {
|
|
13675
|
+
const aCreated = a.created || a.modified;
|
|
13676
|
+
const bCreated = b.created || b.modified;
|
|
13677
|
+
comparison = aCreated.getTime() - bCreated.getTime();
|
|
13678
|
+
break;
|
|
13679
|
+
}
|
|
13680
|
+
case "title":
|
|
13681
|
+
comparison = a.title.localeCompare(b.title);
|
|
13682
|
+
break;
|
|
13683
|
+
}
|
|
13684
|
+
return order === "desc" ? -comparison : comparison;
|
|
13685
|
+
});
|
|
13686
|
+
return sorted;
|
|
13687
|
+
}
|
|
13688
|
+
|
|
13616
13689
|
// src/tools/read/query.ts
|
|
13617
13690
|
function shouldRunMultiHop(query, results, index) {
|
|
13618
13691
|
if (results.length < 3) return true;
|
|
@@ -13862,87 +13935,12 @@ ${content}`;
|
|
|
13862
13935
|
}
|
|
13863
13936
|
}
|
|
13864
13937
|
}
|
|
13865
|
-
function matchesFrontmatter(note, where) {
|
|
13866
|
-
for (const [key, value] of Object.entries(where)) {
|
|
13867
|
-
const noteValue = note.frontmatter[key];
|
|
13868
|
-
if (value === null || value === void 0) {
|
|
13869
|
-
if (noteValue !== null && noteValue !== void 0) {
|
|
13870
|
-
return false;
|
|
13871
|
-
}
|
|
13872
|
-
continue;
|
|
13873
|
-
}
|
|
13874
|
-
if (Array.isArray(noteValue)) {
|
|
13875
|
-
if (!noteValue.some((v) => String(v).toLowerCase() === String(value).toLowerCase())) {
|
|
13876
|
-
return false;
|
|
13877
|
-
}
|
|
13878
|
-
continue;
|
|
13879
|
-
}
|
|
13880
|
-
if (typeof value === "string" && typeof noteValue === "string") {
|
|
13881
|
-
if (noteValue.toLowerCase() !== value.toLowerCase()) {
|
|
13882
|
-
return false;
|
|
13883
|
-
}
|
|
13884
|
-
continue;
|
|
13885
|
-
}
|
|
13886
|
-
if (noteValue !== value) {
|
|
13887
|
-
return false;
|
|
13888
|
-
}
|
|
13889
|
-
}
|
|
13890
|
-
return true;
|
|
13891
|
-
}
|
|
13892
|
-
function hasTag(note, tag, includeChildren = false) {
|
|
13893
|
-
const normalizedTag = tag.replace(/^#/, "").toLowerCase();
|
|
13894
|
-
return note.tags.some((t) => {
|
|
13895
|
-
const normalizedNoteTag = t.toLowerCase();
|
|
13896
|
-
if (normalizedNoteTag === normalizedTag) return true;
|
|
13897
|
-
if (includeChildren && normalizedNoteTag.startsWith(normalizedTag + "/")) return true;
|
|
13898
|
-
return false;
|
|
13899
|
-
});
|
|
13900
|
-
}
|
|
13901
|
-
function hasAnyTag(note, tags, includeChildren = false) {
|
|
13902
|
-
return tags.some((tag) => hasTag(note, tag, includeChildren));
|
|
13903
|
-
}
|
|
13904
|
-
function hasAllTags(note, tags, includeChildren = false) {
|
|
13905
|
-
return tags.every((tag) => hasTag(note, tag, includeChildren));
|
|
13906
|
-
}
|
|
13907
|
-
function inFolder(note, folder) {
|
|
13908
|
-
const normalizedFolder = folder.endsWith("/") ? folder : folder + "/";
|
|
13909
|
-
return note.path.startsWith(normalizedFolder) || note.path.split("/")[0] === folder.replace("/", "");
|
|
13910
|
-
}
|
|
13911
|
-
function sortNotes(notes, sortBy, order) {
|
|
13912
|
-
const sorted = [...notes];
|
|
13913
|
-
sorted.sort((a, b) => {
|
|
13914
|
-
let comparison = 0;
|
|
13915
|
-
switch (sortBy) {
|
|
13916
|
-
case "modified":
|
|
13917
|
-
comparison = a.modified.getTime() - b.modified.getTime();
|
|
13918
|
-
break;
|
|
13919
|
-
case "created":
|
|
13920
|
-
const aCreated = a.created || a.modified;
|
|
13921
|
-
const bCreated = b.created || b.modified;
|
|
13922
|
-
comparison = aCreated.getTime() - bCreated.getTime();
|
|
13923
|
-
break;
|
|
13924
|
-
case "title":
|
|
13925
|
-
comparison = a.title.localeCompare(b.title);
|
|
13926
|
-
break;
|
|
13927
|
-
}
|
|
13928
|
-
return order === "desc" ? -comparison : comparison;
|
|
13929
|
-
});
|
|
13930
|
-
return sorted;
|
|
13931
|
-
}
|
|
13932
13938
|
function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
13933
13939
|
server2.tool(
|
|
13934
13940
|
"search",
|
|
13935
13941
|
"Use when looking up vault content by keyword, entity, or concept. Produces ranked results with frontmatter, backlinks, outlinks, section provenance, dates, and confidence scores. Returns a decision surface of notes, entities, and memories in one call. Does not read full note bodies \u2014 use get_note_structure or get_section_content for full text.",
|
|
13936
13942
|
{
|
|
13937
|
-
query: z.string().optional().describe("Search query text. Required unless using
|
|
13938
|
-
// Metadata filters
|
|
13939
|
-
where: z.record(z.unknown()).optional().describe('Frontmatter filters as key-value pairs. Example: { "type": "project", "status": "active" }'),
|
|
13940
|
-
has_tag: z.string().optional().describe("Filter to notes with this tag"),
|
|
13941
|
-
has_any_tag: z.array(z.string()).optional().describe("Filter to notes with any of these tags"),
|
|
13942
|
-
has_all_tags: z.array(z.string()).optional().describe("Filter to notes with all of these tags"),
|
|
13943
|
-
include_children: z.boolean().default(false).describe('When true, tag filters also match child tags (e.g., has_tag: "project" also matches "project/active")'),
|
|
13944
|
-
folder: z.string().optional().describe("Filter results to a folder. Prefer searching without folder first, then add folder to narrow."),
|
|
13945
|
-
title_contains: z.string().optional().describe("Filter to notes whose title contains this text (case-insensitive)"),
|
|
13943
|
+
query: z.string().optional().describe("Search query text. Required unless using date filters. For folder/tags/frontmatter enumeration, use find_notes."),
|
|
13946
13944
|
// Date filters (find notes by modification date — for pattern analysis use temporal tools)
|
|
13947
13945
|
modified_after: z.string().optional().describe("Only notes modified after this date (YYYY-MM-DD)"),
|
|
13948
13946
|
modified_before: z.string().optional().describe("Only notes modified before this date (YYYY-MM-DD)"),
|
|
@@ -13959,7 +13957,7 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
13959
13957
|
// Consumer format
|
|
13960
13958
|
consumer: z.enum(["llm", "human"]).default("llm").describe('Output format: "llm" applies sandwich ordering and strips scoring fields for context efficiency. "human" preserves score order and all scoring metadata for UI display.')
|
|
13961
13959
|
},
|
|
13962
|
-
async ({ query,
|
|
13960
|
+
async ({ query, modified_after, modified_before, sort_by, order, prefix, limit: requestedLimit, detail_count: requestedDetailCount, context_note, consumer }) => {
|
|
13963
13961
|
requireIndex();
|
|
13964
13962
|
const limit = Math.min(requestedLimit ?? 10, MAX_LIMIT);
|
|
13965
13963
|
const enrichN = Math.min(requestedDetailCount ?? 5, limit);
|
|
@@ -13978,30 +13976,8 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
13978
13976
|
return { content: [{ type: "text", text: JSON.stringify({ query, count: 0, entities: [], error: err instanceof Error ? err.message : String(err) }, null, 2) }] };
|
|
13979
13977
|
}
|
|
13980
13978
|
}
|
|
13981
|
-
|
|
13982
|
-
if (!query && (hasMetadataFilters || folder)) {
|
|
13979
|
+
if (!query && (modified_after || modified_before)) {
|
|
13983
13980
|
let matchingNotes = Array.from(index.notes.values());
|
|
13984
|
-
if (where && Object.keys(where).length > 0) {
|
|
13985
|
-
matchingNotes = matchingNotes.filter((note) => matchesFrontmatter(note, where));
|
|
13986
|
-
}
|
|
13987
|
-
if (has_tag) {
|
|
13988
|
-
matchingNotes = matchingNotes.filter((note) => hasTag(note, has_tag, include_children));
|
|
13989
|
-
}
|
|
13990
|
-
if (has_any_tag && has_any_tag.length > 0) {
|
|
13991
|
-
matchingNotes = matchingNotes.filter((note) => hasAnyTag(note, has_any_tag, include_children));
|
|
13992
|
-
}
|
|
13993
|
-
if (has_all_tags && has_all_tags.length > 0) {
|
|
13994
|
-
matchingNotes = matchingNotes.filter((note) => hasAllTags(note, has_all_tags, include_children));
|
|
13995
|
-
}
|
|
13996
|
-
if (folder) {
|
|
13997
|
-
matchingNotes = matchingNotes.filter((note) => inFolder(note, folder));
|
|
13998
|
-
}
|
|
13999
|
-
if (title_contains) {
|
|
14000
|
-
const searchTerm = title_contains.toLowerCase();
|
|
14001
|
-
matchingNotes = matchingNotes.filter(
|
|
14002
|
-
(note) => note.title.toLowerCase().includes(searchTerm)
|
|
14003
|
-
);
|
|
14004
|
-
}
|
|
14005
13981
|
if (modified_after) {
|
|
14006
13982
|
const afterDate = new Date(modified_after);
|
|
14007
13983
|
afterDate.setHours(0, 0, 0, 0);
|
|
@@ -14088,13 +14064,6 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
14088
14064
|
}
|
|
14089
14065
|
}
|
|
14090
14066
|
}
|
|
14091
|
-
const applyFolderFilter = (items) => {
|
|
14092
|
-
if (!folder) return items;
|
|
14093
|
-
return items.filter((item) => {
|
|
14094
|
-
const normalizedFolder = folder.endsWith("/") ? folder : folder + "/";
|
|
14095
|
-
return item.path.startsWith(normalizedFolder) || item.path.split("/")[0] === folder.replace("/", "");
|
|
14096
|
-
});
|
|
14097
|
-
};
|
|
14098
14067
|
if (hasEmbeddingsIndex()) {
|
|
14099
14068
|
try {
|
|
14100
14069
|
const semanticResults = await semanticSearch(query, limit);
|
|
@@ -14132,7 +14101,7 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
14132
14101
|
};
|
|
14133
14102
|
});
|
|
14134
14103
|
scored.sort((a, b) => b.rrf_score - a.rrf_score);
|
|
14135
|
-
const filtered =
|
|
14104
|
+
const filtered = scored;
|
|
14136
14105
|
const stateDb2 = getStateDb4();
|
|
14137
14106
|
const results2 = filtered.slice(0, limit).map((item) => ({
|
|
14138
14107
|
...enrichResultCompact({ path: item.path, title: item.title, snippet: item.snippet }, index, stateDb2),
|
|
@@ -14182,7 +14151,7 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
14182
14151
|
const bExact = b.title.toLowerCase() === queryLower ? 2 : b.title.toLowerCase().startsWith(queryLower) ? 1 : 0;
|
|
14183
14152
|
return bExact - aExact;
|
|
14184
14153
|
});
|
|
14185
|
-
const filtered =
|
|
14154
|
+
const filtered = mergedItems;
|
|
14186
14155
|
const stateDb2 = getStateDb4();
|
|
14187
14156
|
const sliced = filtered.slice(0, limit);
|
|
14188
14157
|
const results2 = sliced.map((item) => ({
|
|
@@ -14214,7 +14183,7 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
14214
14183
|
}, null, 2) }] };
|
|
14215
14184
|
}
|
|
14216
14185
|
const stateDbFts = getStateDb4();
|
|
14217
|
-
const fts5Filtered =
|
|
14186
|
+
const fts5Filtered = fts5Results;
|
|
14218
14187
|
const results = fts5Filtered.map((r) => ({ ...enrichResultCompact({ path: r.path, title: r.title, snippet: r.snippet }, index, stateDbFts), in_fts5: true }));
|
|
14219
14188
|
if (shouldRunMultiHop(query, results, index)) {
|
|
14220
14189
|
const hopResults = multiHopBackfill(results, index, stateDbFts, { maxBackfill: limit });
|
|
@@ -14240,7 +14209,7 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
14240
14209
|
...memoryResults.length > 0 ? { memories: memoryResults } : {}
|
|
14241
14210
|
}, null, 2) }] };
|
|
14242
14211
|
}
|
|
14243
|
-
return { content: [{ type: "text", text: JSON.stringify({ error: "Provide a query or
|
|
14212
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: "Provide a query or date filters (modified_after, modified_before). For structural enumeration use find_notes." }, null, 2) }] };
|
|
14244
14213
|
}
|
|
14245
14214
|
);
|
|
14246
14215
|
}
|
|
@@ -16826,8 +16795,85 @@ function registerHealthTools(server2, getIndex, getVaultPath, getConfig2 = () =>
|
|
|
16826
16795
|
);
|
|
16827
16796
|
}
|
|
16828
16797
|
|
|
16829
|
-
// src/tools/read/
|
|
16798
|
+
// src/tools/read/find_notes.ts
|
|
16830
16799
|
import { z as z5 } from "zod";
|
|
16800
|
+
function registerFindNotesTools(server2, getIndex, getStateDb4) {
|
|
16801
|
+
server2.tool(
|
|
16802
|
+
"find_notes",
|
|
16803
|
+
"Enumerate notes by metadata \u2014 folder, tags, or frontmatter values. Use when you need a structural list, not relevance-ranked search. Returns lightweight note summaries (path, title, modified, frontmatter, tags). Does not perform full-text or semantic search \u2014 for concept search, use search instead.",
|
|
16804
|
+
{
|
|
16805
|
+
folder: z5.string().optional().describe("Filter to notes inside this folder (and its subfolders)"),
|
|
16806
|
+
where: z5.record(z5.unknown()).optional().describe('Frontmatter filters as key-value pairs. Example: { "type": "project", "status": "active" }'),
|
|
16807
|
+
has_tag: z5.string().optional().describe("Filter to notes with this tag"),
|
|
16808
|
+
has_any_tag: z5.array(z5.string()).optional().describe("Filter to notes with any of these tags"),
|
|
16809
|
+
has_all_tags: z5.array(z5.string()).optional().describe("Filter to notes with all of these tags"),
|
|
16810
|
+
include_children: z5.boolean().default(false).describe('When true, tag filters also match child tags (e.g., has_tag: "project" also matches "project/active")'),
|
|
16811
|
+
title_contains: z5.string().optional().describe("Filter to notes whose title contains this text (case-insensitive)"),
|
|
16812
|
+
modified_after: z5.string().optional().describe("Only notes modified after this date (YYYY-MM-DD)"),
|
|
16813
|
+
modified_before: z5.string().optional().describe("Only notes modified before this date (YYYY-MM-DD)"),
|
|
16814
|
+
sort_by: z5.enum(["modified", "created", "title"]).default("modified").describe("Field to sort by"),
|
|
16815
|
+
order: z5.enum(["asc", "desc"]).default("desc").describe("Sort order"),
|
|
16816
|
+
limit: z5.number().default(50).describe("Maximum number of results to return"),
|
|
16817
|
+
detail_count: z5.number().optional().describe("Number of top results with full metadata. Remaining get lightweight summaries. Default: 5.")
|
|
16818
|
+
},
|
|
16819
|
+
async ({ folder, where, has_tag, has_any_tag, has_all_tags, include_children, title_contains, modified_after, modified_before, sort_by, order, limit: requestedLimit, detail_count: requestedDetailCount }) => {
|
|
16820
|
+
requireIndex();
|
|
16821
|
+
const limit = Math.min(requestedLimit ?? 50, MAX_LIMIT);
|
|
16822
|
+
const enrichN = Math.min(requestedDetailCount ?? 5, limit);
|
|
16823
|
+
const index = getIndex();
|
|
16824
|
+
let notes = Array.from(index.notes.values());
|
|
16825
|
+
if (folder) {
|
|
16826
|
+
notes = notes.filter((note) => inFolder(note, folder));
|
|
16827
|
+
}
|
|
16828
|
+
if (where && Object.keys(where).length > 0) {
|
|
16829
|
+
notes = notes.filter((note) => matchesFrontmatter(note, where));
|
|
16830
|
+
}
|
|
16831
|
+
if (has_tag) {
|
|
16832
|
+
notes = notes.filter((note) => hasTag(note, has_tag, include_children));
|
|
16833
|
+
}
|
|
16834
|
+
if (has_any_tag && has_any_tag.length > 0) {
|
|
16835
|
+
notes = notes.filter((note) => hasAnyTag(note, has_any_tag, include_children));
|
|
16836
|
+
}
|
|
16837
|
+
if (has_all_tags && has_all_tags.length > 0) {
|
|
16838
|
+
notes = notes.filter((note) => hasAllTags(note, has_all_tags, include_children));
|
|
16839
|
+
}
|
|
16840
|
+
if (title_contains) {
|
|
16841
|
+
const term = title_contains.toLowerCase();
|
|
16842
|
+
notes = notes.filter((note) => note.title.toLowerCase().includes(term));
|
|
16843
|
+
}
|
|
16844
|
+
if (modified_after) {
|
|
16845
|
+
const afterDate = new Date(modified_after);
|
|
16846
|
+
afterDate.setHours(0, 0, 0, 0);
|
|
16847
|
+
notes = notes.filter((note) => note.modified >= afterDate);
|
|
16848
|
+
}
|
|
16849
|
+
if (modified_before) {
|
|
16850
|
+
const beforeDate = new Date(modified_before);
|
|
16851
|
+
beforeDate.setHours(23, 59, 59, 999);
|
|
16852
|
+
notes = notes.filter((note) => note.modified <= beforeDate);
|
|
16853
|
+
}
|
|
16854
|
+
notes = sortNotes(notes, sort_by ?? "modified", order ?? "desc");
|
|
16855
|
+
const totalMatches = notes.length;
|
|
16856
|
+
const limited = notes.slice(0, limit);
|
|
16857
|
+
const stateDb2 = getStateDb4();
|
|
16858
|
+
const enriched = limited.map(
|
|
16859
|
+
(note, i) => (i < enrichN ? enrichResult : enrichResultLight)({ path: note.path, title: note.title }, index, stateDb2)
|
|
16860
|
+
);
|
|
16861
|
+
return {
|
|
16862
|
+
content: [{
|
|
16863
|
+
type: "text",
|
|
16864
|
+
text: JSON.stringify({
|
|
16865
|
+
total_matches: totalMatches,
|
|
16866
|
+
returned: enriched.length,
|
|
16867
|
+
notes: enriched
|
|
16868
|
+
}, null, 2)
|
|
16869
|
+
}]
|
|
16870
|
+
};
|
|
16871
|
+
}
|
|
16872
|
+
);
|
|
16873
|
+
}
|
|
16874
|
+
|
|
16875
|
+
// src/tools/read/system.ts
|
|
16876
|
+
import { z as z6 } from "zod";
|
|
16831
16877
|
import { scanVaultEntities as scanVaultEntities3, getEntityIndexFromDb as getEntityIndexFromDb2, getAllEntitiesFromDb as getAllEntitiesFromDb3 } from "@velvetmonkey/vault-core";
|
|
16832
16878
|
|
|
16833
16879
|
// src/core/read/aliasSuggestions.ts
|
|
@@ -16904,22 +16950,22 @@ init_recency();
|
|
|
16904
16950
|
init_cooccurrence();
|
|
16905
16951
|
function registerSystemTools(server2, getIndex, setIndex, getVaultPath, setConfig, getStateDb4) {
|
|
16906
16952
|
const RefreshIndexOutputSchema = {
|
|
16907
|
-
success:
|
|
16908
|
-
notes_count:
|
|
16909
|
-
entities_count:
|
|
16910
|
-
fts5_notes:
|
|
16911
|
-
edges_recomputed:
|
|
16912
|
-
note_links_synced:
|
|
16913
|
-
hub_scores:
|
|
16914
|
-
graph_snapshot:
|
|
16915
|
-
suppression_list:
|
|
16916
|
-
task_cache:
|
|
16917
|
-
embeddings_refreshed:
|
|
16918
|
-
entity_embeddings_refreshed:
|
|
16919
|
-
recency_rebuilt:
|
|
16920
|
-
cooccurrence_associations:
|
|
16921
|
-
index_cached:
|
|
16922
|
-
duration_ms:
|
|
16953
|
+
success: z6.boolean().describe("Whether the refresh succeeded"),
|
|
16954
|
+
notes_count: z6.number().describe("Number of notes indexed"),
|
|
16955
|
+
entities_count: z6.number().describe("Number of entities (titles + aliases)"),
|
|
16956
|
+
fts5_notes: z6.number().describe("Number of notes in FTS5 search index"),
|
|
16957
|
+
edges_recomputed: z6.number().optional().describe("Number of edges with recomputed weights"),
|
|
16958
|
+
note_links_synced: z6.number().optional().describe("Number of notes whose note_links were synced"),
|
|
16959
|
+
hub_scores: z6.number().optional().describe("Number of hub scores exported"),
|
|
16960
|
+
graph_snapshot: z6.boolean().optional().describe("Whether graph topology snapshot was recorded"),
|
|
16961
|
+
suppression_list: z6.boolean().optional().describe("Whether wikilink suppression list was updated"),
|
|
16962
|
+
task_cache: z6.boolean().optional().describe("Whether task cache was refreshed"),
|
|
16963
|
+
embeddings_refreshed: z6.number().optional().describe("Number of note embeddings updated"),
|
|
16964
|
+
entity_embeddings_refreshed: z6.number().optional().describe("Number of entity embeddings updated"),
|
|
16965
|
+
recency_rebuilt: z6.boolean().optional().describe("Whether recency index was rebuilt"),
|
|
16966
|
+
cooccurrence_associations: z6.number().optional().describe("Number of co-occurrence associations rebuilt"),
|
|
16967
|
+
index_cached: z6.boolean().optional().describe("Whether vault index cache was saved"),
|
|
16968
|
+
duration_ms: z6.number().describe("Time taken to rebuild index")
|
|
16923
16969
|
};
|
|
16924
16970
|
server2.registerTool(
|
|
16925
16971
|
"refresh_index",
|
|
@@ -17253,8 +17299,8 @@ function registerSystemTools(server2, getIndex, setIndex, getVaultPath, setConfi
|
|
|
17253
17299
|
title: "List Entities",
|
|
17254
17300
|
description: "Use when listing all linkable entities grouped by category. Produces the full entity index from the state database with names, aliases, hub scores, and categories. Returns an array of entity profiles. Does not search note content \u2014 only returns entity metadata from the index.",
|
|
17255
17301
|
inputSchema: {
|
|
17256
|
-
category:
|
|
17257
|
-
limit:
|
|
17302
|
+
category: z6.string().optional().describe('Filter to a specific category (e.g. "people", "technologies")'),
|
|
17303
|
+
limit: z6.coerce.number().default(200).describe("Maximum entities per category (default 200; pass higher for full hydration)")
|
|
17258
17304
|
}
|
|
17259
17305
|
},
|
|
17260
17306
|
async ({
|
|
@@ -17318,8 +17364,8 @@ function registerSystemTools(server2, getIndex, setIndex, getVaultPath, setConfi
|
|
|
17318
17364
|
title: "Suggest Entity Aliases",
|
|
17319
17365
|
description: "Use when generating alias suggestions for entities based on acronyms and short forms. Produces alias candidates validated against vault content. Returns suggested aliases per entity with evidence. Does not apply aliases \u2014 use vault_update_frontmatter to add them.",
|
|
17320
17366
|
inputSchema: {
|
|
17321
|
-
folder:
|
|
17322
|
-
limit:
|
|
17367
|
+
folder: z6.string().optional().describe("Folder path to scope suggestions to"),
|
|
17368
|
+
limit: z6.number().default(20).describe("Max suggestions to return")
|
|
17323
17369
|
}
|
|
17324
17370
|
},
|
|
17325
17371
|
async ({
|
|
@@ -17347,7 +17393,7 @@ function registerSystemTools(server2, getIndex, setIndex, getVaultPath, setConfi
|
|
|
17347
17393
|
title: "Unlinked Mentions Report",
|
|
17348
17394
|
description: "Use when finding the highest-ROI linking opportunities across the vault. Produces a ranked report of entities with the most unlinked text mentions. Returns entity names with unlinked mention counts and sample locations. Does not apply links \u2014 use suggest_wikilinks on individual notes.",
|
|
17349
17395
|
inputSchema: {
|
|
17350
|
-
limit:
|
|
17396
|
+
limit: z6.coerce.number().default(20).describe("Maximum entities to return (default 20)")
|
|
17351
17397
|
}
|
|
17352
17398
|
},
|
|
17353
17399
|
async ({ limit: requestedLimit }) => {
|
|
@@ -17399,7 +17445,7 @@ function registerSystemTools(server2, getIndex, setIndex, getVaultPath, setConfi
|
|
|
17399
17445
|
}
|
|
17400
17446
|
|
|
17401
17447
|
// src/tools/read/primitives.ts
|
|
17402
|
-
import { z as
|
|
17448
|
+
import { z as z7 } from "zod";
|
|
17403
17449
|
import { getEntityByName as getEntityByName4 } from "@velvetmonkey/vault-core";
|
|
17404
17450
|
function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = () => ({}), getStateDb4 = () => null) {
|
|
17405
17451
|
server2.registerTool(
|
|
@@ -17408,9 +17454,9 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17408
17454
|
title: "Get Note Structure",
|
|
17409
17455
|
description: "Use after search identifies a note you need detail on. Produces heading tree, frontmatter, tags, word count, backlink and outlink counts, and optionally full section content. Returns enriched note structure with entity metadata when available. Does not search \u2014 requires an exact path from a prior search result.",
|
|
17410
17456
|
inputSchema: {
|
|
17411
|
-
path:
|
|
17412
|
-
include_content:
|
|
17413
|
-
max_content_chars:
|
|
17457
|
+
path: z7.string().describe("Path to the note"),
|
|
17458
|
+
include_content: z7.boolean().default(false).describe("Include the text content under each top-level section. Default false for structure only."),
|
|
17459
|
+
max_content_chars: z7.number().default(2e4).describe("Max total chars of section content to include. Sections are truncated at paragraph boundaries.")
|
|
17414
17460
|
}
|
|
17415
17461
|
},
|
|
17416
17462
|
async ({ path: path41, include_content, max_content_chars }) => {
|
|
@@ -17483,10 +17529,10 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17483
17529
|
title: "Get Section Content",
|
|
17484
17530
|
description: "Use when you need the text under one heading in a known note. Produces the markdown body of a single section with optional subheadings. Returns section content, heading level, and line range. Does not return other sections \u2014 use get_note_structure for full outline.",
|
|
17485
17531
|
inputSchema: {
|
|
17486
|
-
path:
|
|
17487
|
-
heading:
|
|
17488
|
-
include_subheadings:
|
|
17489
|
-
max_content_chars:
|
|
17532
|
+
path: z7.string().describe("Path to the note"),
|
|
17533
|
+
heading: z7.string().describe("Heading text to find"),
|
|
17534
|
+
include_subheadings: z7.boolean().default(true).describe("Include content under subheadings"),
|
|
17535
|
+
max_content_chars: z7.number().default(1e4).describe("Max chars of section content. Truncated at paragraph boundaries.")
|
|
17490
17536
|
}
|
|
17491
17537
|
},
|
|
17492
17538
|
async ({ path: path41, heading, include_subheadings, max_content_chars }) => {
|
|
@@ -17520,10 +17566,10 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17520
17566
|
title: "Find Sections",
|
|
17521
17567
|
description: 'Use when scanning for headings across the entire vault. Produces a list of sections matching a regex pattern with note path, heading text, and level. Returns total count and paginated results. Answers: "Which notes have a Status section?" or "Find all ## TODO headings." Does not return section body text \u2014 follow up with get_section_content for content.',
|
|
17522
17568
|
inputSchema: {
|
|
17523
|
-
pattern:
|
|
17524
|
-
folder:
|
|
17525
|
-
limit:
|
|
17526
|
-
offset:
|
|
17569
|
+
pattern: z7.string().describe("Regex pattern to match heading text"),
|
|
17570
|
+
folder: z7.string().optional().describe("Limit to notes in this folder"),
|
|
17571
|
+
limit: z7.coerce.number().default(50).describe("Maximum number of results to return"),
|
|
17572
|
+
offset: z7.coerce.number().default(0).describe("Number of results to skip (for pagination)")
|
|
17527
17573
|
}
|
|
17528
17574
|
},
|
|
17529
17575
|
async ({ pattern, folder, limit: requestedLimit, offset }) => {
|
|
@@ -17549,13 +17595,13 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17549
17595
|
title: "Tasks",
|
|
17550
17596
|
description: "Use when listing, filtering, or counting tasks across the vault. Produces task items with status, text, due date, path, and line number. Returns total and per-status counts with paginated results. Does not toggle or create tasks \u2014 use vault_toggle_task or vault_add_task to mutate.",
|
|
17551
17597
|
inputSchema: {
|
|
17552
|
-
path:
|
|
17553
|
-
status:
|
|
17554
|
-
has_due_date:
|
|
17555
|
-
folder:
|
|
17556
|
-
tag:
|
|
17557
|
-
limit:
|
|
17558
|
-
offset:
|
|
17598
|
+
path: z7.string().optional().describe("Scope to tasks from this specific note path"),
|
|
17599
|
+
status: z7.enum(["open", "completed", "cancelled"]).default("open").describe("Filter by task status"),
|
|
17600
|
+
has_due_date: z7.boolean().optional().describe("If true, only return tasks with due dates (sorted by date)"),
|
|
17601
|
+
folder: z7.string().optional().describe("Limit to tasks in notes within this folder"),
|
|
17602
|
+
tag: z7.string().optional().describe("Filter to tasks with this tag"),
|
|
17603
|
+
limit: z7.coerce.number().default(25).describe("Maximum tasks to return"),
|
|
17604
|
+
offset: z7.coerce.number().default(0).describe("Number of results to skip (for pagination)")
|
|
17559
17605
|
}
|
|
17560
17606
|
},
|
|
17561
17607
|
async ({ path: path41, status, has_due_date, folder, tag, limit: requestedLimit, offset }) => {
|
|
@@ -17665,10 +17711,10 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17665
17711
|
title: "Get Link Path",
|
|
17666
17712
|
description: `Use when tracing how two notes connect. Produces the shortest chain of wikilinks from source to target, showing each intermediate note. Returns an ordered path array. Answers: "What's the connection chain between A and B?" Does not consider semantic similarity \u2014 only follows explicit wikilinks.`,
|
|
17667
17713
|
inputSchema: {
|
|
17668
|
-
from:
|
|
17669
|
-
to:
|
|
17670
|
-
max_depth:
|
|
17671
|
-
weighted:
|
|
17714
|
+
from: z7.string().describe("Starting note path"),
|
|
17715
|
+
to: z7.string().describe("Target note path"),
|
|
17716
|
+
max_depth: z7.coerce.number().default(10).describe("Maximum path length to search"),
|
|
17717
|
+
weighted: z7.boolean().default(false).describe("Use weighted path-finding that penalizes hub nodes for more meaningful paths")
|
|
17672
17718
|
}
|
|
17673
17719
|
},
|
|
17674
17720
|
async ({ from, to, max_depth, weighted }) => {
|
|
@@ -17689,8 +17735,8 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17689
17735
|
title: "Get Common Neighbors",
|
|
17690
17736
|
description: 'Use when finding what two notes have in common. Produces shared backlinks and forward links between two specified notes \u2014 the notes they both link to or are both linked from. Returns common neighbor paths with link directions. Answers: "How are these two notes related through shared connections?"',
|
|
17691
17737
|
inputSchema: {
|
|
17692
|
-
note_a:
|
|
17693
|
-
note_b:
|
|
17738
|
+
note_a: z7.string().describe("First note path"),
|
|
17739
|
+
note_b: z7.string().describe("Second note path")
|
|
17694
17740
|
}
|
|
17695
17741
|
},
|
|
17696
17742
|
async ({ note_a, note_b }) => {
|
|
@@ -17712,8 +17758,8 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17712
17758
|
title: "Get Connection Strength",
|
|
17713
17759
|
description: "Use when measuring how strongly two notes relate. Produces a composite score from direct links, shared neighbors, co-occurrence, and path distance. Returns a numeric strength value with factor breakdown. Does not list individual connections \u2014 use get_common_neighbors for detail.",
|
|
17714
17760
|
inputSchema: {
|
|
17715
|
-
note_a:
|
|
17716
|
-
note_b:
|
|
17761
|
+
note_a: z7.string().describe("First note path"),
|
|
17762
|
+
note_b: z7.string().describe("Second note path")
|
|
17717
17763
|
}
|
|
17718
17764
|
},
|
|
17719
17765
|
async ({ note_a, note_b }) => {
|
|
@@ -17731,7 +17777,7 @@ function registerPrimitiveTools(server2, getIndex, getVaultPath, getConfig2 = ()
|
|
|
17731
17777
|
}
|
|
17732
17778
|
|
|
17733
17779
|
// src/tools/read/migrations.ts
|
|
17734
|
-
import { z as
|
|
17780
|
+
import { z as z8 } from "zod";
|
|
17735
17781
|
import * as fs15 from "fs/promises";
|
|
17736
17782
|
import * as path19 from "path";
|
|
17737
17783
|
import matter2 from "gray-matter";
|
|
@@ -17879,10 +17925,10 @@ function registerMigrationTools(server2, getIndex, getVaultPath) {
|
|
|
17879
17925
|
title: "Rename Field",
|
|
17880
17926
|
description: "Use when bulk-renaming a frontmatter field across notes. Produces a dry-run preview by default showing affected notes and conflict detection. Returns rename results with before/after field names per note. Does not write changes unless dry_run is false.",
|
|
17881
17927
|
inputSchema: {
|
|
17882
|
-
old_name:
|
|
17883
|
-
new_name:
|
|
17884
|
-
folder:
|
|
17885
|
-
dry_run:
|
|
17928
|
+
old_name: z8.string().describe("Current field name to rename"),
|
|
17929
|
+
new_name: z8.string().describe("New field name"),
|
|
17930
|
+
folder: z8.string().optional().describe("Limit to notes in this folder"),
|
|
17931
|
+
dry_run: z8.boolean().optional().describe("Preview only, no changes (default: true)")
|
|
17886
17932
|
}
|
|
17887
17933
|
},
|
|
17888
17934
|
async ({ old_name, new_name, folder, dry_run }) => {
|
|
@@ -17908,10 +17954,10 @@ function registerMigrationTools(server2, getIndex, getVaultPath) {
|
|
|
17908
17954
|
title: "Migrate Field Values",
|
|
17909
17955
|
description: "Use when transforming frontmatter field values in bulk using a mapping. Produces a dry-run preview by default showing value transformations. Returns migration results with before/after values per note. Does not write changes unless dry_run is false.",
|
|
17910
17956
|
inputSchema: {
|
|
17911
|
-
field:
|
|
17912
|
-
mapping:
|
|
17913
|
-
folder:
|
|
17914
|
-
dry_run:
|
|
17957
|
+
field: z8.string().describe("Field to migrate values for"),
|
|
17958
|
+
mapping: z8.record(z8.unknown()).describe('Mapping of old values to new values (e.g., {"high": 1, "medium": 2, "low": 3})'),
|
|
17959
|
+
folder: z8.string().optional().describe("Limit to notes in this folder"),
|
|
17960
|
+
dry_run: z8.boolean().optional().describe("Preview only, no changes (default: true)")
|
|
17915
17961
|
}
|
|
17916
17962
|
},
|
|
17917
17963
|
async ({ field, mapping, folder, dry_run }) => {
|
|
@@ -17936,7 +17982,7 @@ function registerMigrationTools(server2, getIndex, getVaultPath) {
|
|
|
17936
17982
|
// src/tools/read/graphAnalysis.ts
|
|
17937
17983
|
import fs16 from "node:fs";
|
|
17938
17984
|
import path20 from "node:path";
|
|
17939
|
-
import { z as
|
|
17985
|
+
import { z as z9 } from "zod";
|
|
17940
17986
|
|
|
17941
17987
|
// src/tools/read/schema.ts
|
|
17942
17988
|
function getValueType(value) {
|
|
@@ -18347,14 +18393,14 @@ function registerGraphAnalysisTools(server2, getIndex, getVaultPath, getStateDb4
|
|
|
18347
18393
|
title: "Graph Analysis",
|
|
18348
18394
|
description: "Use when analyzing vault link structure for orphans, hubs, dead ends, clusters, or bridges. Produces structural graph metrics for the selected analysis mode. Returns mode-specific arrays with note paths, scores, and counts. Does not read note content \u2014 only analyzes link topology.",
|
|
18349
18395
|
inputSchema: {
|
|
18350
|
-
analysis:
|
|
18351
|
-
folder:
|
|
18352
|
-
min_links:
|
|
18353
|
-
min_backlinks:
|
|
18354
|
-
min_outlinks:
|
|
18355
|
-
days:
|
|
18356
|
-
limit:
|
|
18357
|
-
offset:
|
|
18396
|
+
analysis: z9.enum(["orphans", "dead_ends", "sources", "hubs", "stale", "immature", "emerging_hubs", "centrality", "cycles"]).describe("Type of graph analysis to perform"),
|
|
18397
|
+
folder: z9.string().optional().describe("Limit to notes in this folder (orphans, dead_ends, sources, immature)"),
|
|
18398
|
+
min_links: z9.coerce.number().default(5).describe("Minimum total connections for hubs"),
|
|
18399
|
+
min_backlinks: z9.coerce.number().default(1).describe("Minimum backlinks (dead_ends, stale)"),
|
|
18400
|
+
min_outlinks: z9.coerce.number().default(1).describe("Minimum outlinks (sources)"),
|
|
18401
|
+
days: z9.coerce.number().optional().describe("Days threshold (stale: required; emerging_hubs: default 30)"),
|
|
18402
|
+
limit: z9.coerce.number().default(50).describe("Maximum number of results to return"),
|
|
18403
|
+
offset: z9.coerce.number().default(0).describe("Number of results to skip (for pagination)")
|
|
18358
18404
|
}
|
|
18359
18405
|
},
|
|
18360
18406
|
async ({ analysis, folder, min_links, min_backlinks, min_outlinks, days, limit: requestedLimit, offset }) => {
|
|
@@ -18574,7 +18620,7 @@ function registerGraphAnalysisTools(server2, getIndex, getVaultPath, getStateDb4
|
|
|
18574
18620
|
}
|
|
18575
18621
|
|
|
18576
18622
|
// src/tools/read/vaultSchema.ts
|
|
18577
|
-
import { z as
|
|
18623
|
+
import { z as z10 } from "zod";
|
|
18578
18624
|
|
|
18579
18625
|
// src/tools/read/frontmatter.ts
|
|
18580
18626
|
function getValueType2(value) {
|
|
@@ -18765,11 +18811,11 @@ function registerVaultSchemaTools(server2, getIndex, getVaultPath) {
|
|
|
18765
18811
|
title: "Vault Schema",
|
|
18766
18812
|
description: "Use when inspecting vault frontmatter field usage. Produces schema overviews, field value distributions, or per-type field analysis. Returns structured metadata about frontmatter usage patterns across notes. Does not modify any frontmatter \u2014 read-only schema inspection.",
|
|
18767
18813
|
inputSchema: {
|
|
18768
|
-
analysis:
|
|
18769
|
-
field:
|
|
18770
|
-
entity:
|
|
18771
|
-
limit:
|
|
18772
|
-
offset:
|
|
18814
|
+
analysis: z10.enum(["overview", "field_values", "inconsistencies", "contradictions"]).describe("Type of schema inspection"),
|
|
18815
|
+
field: z10.string().optional().describe("Field name (required for field_values)"),
|
|
18816
|
+
entity: z10.string().optional().describe("Entity name to scope contradiction detection to (contradictions)"),
|
|
18817
|
+
limit: z10.coerce.number().default(50).describe("Maximum results to return"),
|
|
18818
|
+
offset: z10.coerce.number().default(0).describe("Number of results to skip")
|
|
18773
18819
|
}
|
|
18774
18820
|
},
|
|
18775
18821
|
async (params) => {
|
|
@@ -18827,14 +18873,14 @@ function registerVaultSchemaTools(server2, getIndex, getVaultPath) {
|
|
|
18827
18873
|
title: "Schema Conventions",
|
|
18828
18874
|
description: "Use when inferring or checking frontmatter conventions from actual vault usage. Produces convention rules from folder patterns, finds notes with incomplete metadata, or suggests field values. Returns convention objects with evidence and compliance data. Does not enforce conventions \u2014 use schema_validate for compliance checking.",
|
|
18829
18875
|
inputSchema: {
|
|
18830
|
-
analysis:
|
|
18831
|
-
folder:
|
|
18832
|
-
field:
|
|
18833
|
-
min_confidence:
|
|
18834
|
-
min_frequency:
|
|
18835
|
-
existing_frontmatter:
|
|
18836
|
-
limit:
|
|
18837
|
-
offset:
|
|
18876
|
+
analysis: z10.enum(["conventions", "incomplete", "suggest_values"]).describe("Type of convention analysis"),
|
|
18877
|
+
folder: z10.string().optional().describe("Folder to scope analysis to"),
|
|
18878
|
+
field: z10.string().optional().describe("Field name (required for suggest_values)"),
|
|
18879
|
+
min_confidence: z10.coerce.number().min(0).max(1).optional().describe("Minimum confidence threshold (conventions)"),
|
|
18880
|
+
min_frequency: z10.coerce.number().min(0).max(1).optional().describe("Minimum field frequency (incomplete)"),
|
|
18881
|
+
existing_frontmatter: z10.record(z10.unknown()).optional().describe("Existing frontmatter for context (suggest_values)"),
|
|
18882
|
+
limit: z10.coerce.number().default(50).describe("Maximum results to return"),
|
|
18883
|
+
offset: z10.coerce.number().default(0).describe("Number of results to skip")
|
|
18838
18884
|
}
|
|
18839
18885
|
},
|
|
18840
18886
|
async (params) => {
|
|
@@ -18889,14 +18935,14 @@ function registerVaultSchemaTools(server2, getIndex, getVaultPath) {
|
|
|
18889
18935
|
title: "Schema Validate",
|
|
18890
18936
|
description: "Use when checking frontmatter compliance against explicit rules or folder expectations. Produces validation results per note with pass/fail, missing fields, and type mismatches. Returns a compliance report with fixable issues highlighted. Does not fix issues \u2014 use vault_update_frontmatter to remediate.",
|
|
18891
18937
|
inputSchema: {
|
|
18892
|
-
analysis:
|
|
18893
|
-
schema:
|
|
18894
|
-
required:
|
|
18895
|
-
type:
|
|
18896
|
-
values:
|
|
18938
|
+
analysis: z10.enum(["validate", "missing"]).describe("Type of validation"),
|
|
18939
|
+
schema: z10.record(z10.object({
|
|
18940
|
+
required: z10.boolean().optional().describe("Whether field is required"),
|
|
18941
|
+
type: z10.union([z10.string(), z10.array(z10.string())]).optional().describe("Expected type(s)"),
|
|
18942
|
+
values: z10.array(z10.unknown()).optional().describe("Allowed values")
|
|
18897
18943
|
})).optional().describe("Schema to validate against (validate mode)"),
|
|
18898
|
-
folder_schemas:
|
|
18899
|
-
folder:
|
|
18944
|
+
folder_schemas: z10.record(z10.array(z10.string())).optional().describe("Map of folder paths to required fields (missing mode)"),
|
|
18945
|
+
folder: z10.string().optional().describe("Folder to scope validation to (validate mode)")
|
|
18900
18946
|
}
|
|
18901
18947
|
},
|
|
18902
18948
|
async (params) => {
|
|
@@ -18948,7 +18994,7 @@ function registerVaultSchemaTools(server2, getIndex, getVaultPath) {
|
|
|
18948
18994
|
}
|
|
18949
18995
|
|
|
18950
18996
|
// src/tools/read/semanticAnalysis.ts
|
|
18951
|
-
import { z as
|
|
18997
|
+
import { z as z11 } from "zod";
|
|
18952
18998
|
init_embeddings();
|
|
18953
18999
|
function registerSemanticAnalysisTools(server2, getIndex, getVaultPath) {
|
|
18954
19000
|
server2.registerTool(
|
|
@@ -18957,9 +19003,9 @@ function registerSemanticAnalysisTools(server2, getIndex, getVaultPath) {
|
|
|
18957
19003
|
title: "Semantic Analysis",
|
|
18958
19004
|
description: "Use when grouping notes by meaning or finding semantically similar but unlinked notes. Produces embedding-based clusters or bridge suggestions. Returns cluster assignments or bridge pairs with similarity scores. Does not work without init_semantic \u2014 embeddings must be built first.",
|
|
18959
19005
|
inputSchema: {
|
|
18960
|
-
type:
|
|
18961
|
-
limit:
|
|
18962
|
-
offset:
|
|
19006
|
+
type: z11.enum(["clusters", "bridges"]).describe("Type of semantic analysis"),
|
|
19007
|
+
limit: z11.coerce.number().default(50).describe("Maximum number of results to return"),
|
|
19008
|
+
offset: z11.coerce.number().default(0).describe("Number of results to skip (for pagination)")
|
|
18963
19009
|
}
|
|
18964
19010
|
},
|
|
18965
19011
|
async ({ type, limit: requestedLimit, offset }) => {
|
|
@@ -19088,7 +19134,7 @@ function registerSemanticAnalysisTools(server2, getIndex, getVaultPath) {
|
|
|
19088
19134
|
}
|
|
19089
19135
|
|
|
19090
19136
|
// src/tools/read/noteIntelligence.ts
|
|
19091
|
-
import { z as
|
|
19137
|
+
import { z as z12 } from "zod";
|
|
19092
19138
|
|
|
19093
19139
|
// src/tools/read/bidirectional.ts
|
|
19094
19140
|
import * as fs17 from "fs/promises";
|
|
@@ -19428,7 +19474,7 @@ function registerNoteIntelligenceTools(server2, getIndex, getVaultPath, getConfi
|
|
|
19428
19474
|
title: "Note Intelligence",
|
|
19429
19475
|
description: "Use when analyzing a single note for quality, completeness, and improvement opportunities. Produces per-note analysis covering prose patterns, link density, frontmatter gaps, and section structure. Returns analysis results for the selected mode. Does not modify the note \u2014 read-only intelligence.",
|
|
19430
19476
|
inputSchema: {
|
|
19431
|
-
analysis:
|
|
19477
|
+
analysis: z12.enum([
|
|
19432
19478
|
"prose_patterns",
|
|
19433
19479
|
"suggest_frontmatter",
|
|
19434
19480
|
"suggest_wikilinks",
|
|
@@ -19436,8 +19482,8 @@ function registerNoteIntelligenceTools(server2, getIndex, getVaultPath, getConfi
|
|
|
19436
19482
|
"semantic_links",
|
|
19437
19483
|
"all"
|
|
19438
19484
|
]).describe("Type of note analysis to perform"),
|
|
19439
|
-
path:
|
|
19440
|
-
fields:
|
|
19485
|
+
path: z12.string().describe("Path to the note to analyze"),
|
|
19486
|
+
fields: z12.array(z12.string()).optional().describe("Specific fields to compute (compute/all modes)")
|
|
19441
19487
|
}
|
|
19442
19488
|
},
|
|
19443
19489
|
async ({ analysis, path: notePath, fields }) => {
|
|
@@ -19558,7 +19604,7 @@ function registerNoteIntelligenceTools(server2, getIndex, getVaultPath, getConfi
|
|
|
19558
19604
|
|
|
19559
19605
|
// src/tools/write/mutations.ts
|
|
19560
19606
|
init_writer();
|
|
19561
|
-
import { z as
|
|
19607
|
+
import { z as z13 } from "zod";
|
|
19562
19608
|
import fs24 from "fs/promises";
|
|
19563
19609
|
import path27 from "path";
|
|
19564
19610
|
|
|
@@ -20261,24 +20307,24 @@ function registerMutationTools(server2, getVaultPath, getConfig2 = () => ({})) {
|
|
|
20261
20307
|
"vault_add_to_section",
|
|
20262
20308
|
"Use when appending content to a section in an existing note. Produces a markdown insertion under the named heading with auto-wikilinks applied. Returns mutation result with note path and section name. Does not create the note unless create_if_missing is true. Does not replace existing content \u2014 use vault_replace_in_section for that.",
|
|
20263
20309
|
{
|
|
20264
|
-
path:
|
|
20265
|
-
section:
|
|
20266
|
-
content:
|
|
20267
|
-
create_if_missing:
|
|
20268
|
-
position:
|
|
20269
|
-
format:
|
|
20270
|
-
commit:
|
|
20271
|
-
skipWikilinks:
|
|
20272
|
-
suggestOutgoingLinks:
|
|
20273
|
-
children:
|
|
20274
|
-
label:
|
|
20275
|
-
content:
|
|
20310
|
+
path: z13.string().describe('Vault-relative path to the note (e.g., "daily-notes/2026-01-28.md")'),
|
|
20311
|
+
section: z13.string().describe('Heading text to add to (e.g., "Log" or "## Log")'),
|
|
20312
|
+
content: z13.string().describe("Content to add to the section"),
|
|
20313
|
+
create_if_missing: z13.boolean().default(false).describe("If true and the note doesn't exist, create it from template first (enables 1-call daily capture)"),
|
|
20314
|
+
position: z13.enum(["append", "prepend"]).default("append").describe("Where to insert content"),
|
|
20315
|
+
format: z13.enum(["plain", "bullet", "task", "numbered", "timestamp-bullet"]).default("plain").describe("How to format the content"),
|
|
20316
|
+
commit: z13.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20317
|
+
skipWikilinks: z13.boolean().default(false).describe("If true, skip auto-wikilink application (wikilinks are applied by default)"),
|
|
20318
|
+
suggestOutgoingLinks: z13.boolean().default(false).describe('Suggest related outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
|
|
20319
|
+
children: z13.array(z13.object({
|
|
20320
|
+
label: z13.string().describe('Bold label, e.g. "**Result:**"'),
|
|
20321
|
+
content: z13.string().describe("Pre-neutralized text; sanitized and indented by this tool")
|
|
20276
20322
|
})).optional().describe("Labeled sub-bullets appended under the parent content line"),
|
|
20277
|
-
maxSuggestions:
|
|
20278
|
-
linkedEntities:
|
|
20279
|
-
dry_run:
|
|
20280
|
-
agent_id:
|
|
20281
|
-
session_id:
|
|
20323
|
+
maxSuggestions: z13.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks (1-10, default: 5)"),
|
|
20324
|
+
linkedEntities: z13.array(z13.string()).optional().describe("Entity names already linked in the content. When skipWikilinks=true, these are tracked for feedback without re-processing the content."),
|
|
20325
|
+
dry_run: z13.boolean().optional().default(false).describe("Preview changes without writing to disk"),
|
|
20326
|
+
agent_id: z13.string().optional().describe('Agent identifier for multi-agent scoping (e.g., "claude-opus", "planning-agent")'),
|
|
20327
|
+
session_id: z13.string().optional().describe('Session identifier for conversation scoping (e.g., "sess-abc123")')
|
|
20282
20328
|
},
|
|
20283
20329
|
async ({ path: notePath, section, content, create_if_missing, position, format, commit, skipWikilinks, suggestOutgoingLinks, children, maxSuggestions, linkedEntities, dry_run, agent_id, session_id }) => {
|
|
20284
20330
|
const vaultPath2 = getVaultPath();
|
|
@@ -20404,15 +20450,15 @@ ${childBlocks.join("\n")}`;
|
|
|
20404
20450
|
"vault_remove_from_section",
|
|
20405
20451
|
"Use when deleting specific text from a section in a note. Produces a targeted removal of matching content under the named heading. Returns mutation result with note path and removal confirmation. Does not remove the heading itself or other sections.",
|
|
20406
20452
|
{
|
|
20407
|
-
path:
|
|
20408
|
-
section:
|
|
20409
|
-
pattern:
|
|
20410
|
-
mode:
|
|
20411
|
-
useRegex:
|
|
20412
|
-
commit:
|
|
20413
|
-
dry_run:
|
|
20414
|
-
agent_id:
|
|
20415
|
-
session_id:
|
|
20453
|
+
path: z13.string().describe("Vault-relative path to the note"),
|
|
20454
|
+
section: z13.string().describe('Heading text to remove from (e.g., "Log" or "## Log")'),
|
|
20455
|
+
pattern: z13.string().describe("Text or pattern to match for removal"),
|
|
20456
|
+
mode: z13.enum(["first", "last", "all"]).default("first").describe("Which matches to remove"),
|
|
20457
|
+
useRegex: z13.boolean().default(false).describe("Treat pattern as regex"),
|
|
20458
|
+
commit: z13.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20459
|
+
dry_run: z13.boolean().optional().default(false).describe("Preview changes without writing to disk"),
|
|
20460
|
+
agent_id: z13.string().optional().describe("Agent identifier for multi-agent scoping"),
|
|
20461
|
+
session_id: z13.string().optional().describe("Session identifier for conversation scoping")
|
|
20416
20462
|
},
|
|
20417
20463
|
async ({ path: notePath, section, pattern, mode, useRegex, commit, dry_run, agent_id, session_id }) => {
|
|
20418
20464
|
const vaultPath2 = getVaultPath();
|
|
@@ -20451,19 +20497,19 @@ ${childBlocks.join("\n")}`;
|
|
|
20451
20497
|
"vault_replace_in_section",
|
|
20452
20498
|
"Use when swapping content in a section of a note. Produces a find-and-replace within the named heading with auto-wikilinks on the new text. Returns mutation result with note path and replacement confirmation. Does not affect other sections or headings.",
|
|
20453
20499
|
{
|
|
20454
|
-
path:
|
|
20455
|
-
section:
|
|
20456
|
-
search:
|
|
20457
|
-
replacement:
|
|
20458
|
-
mode:
|
|
20459
|
-
useRegex:
|
|
20460
|
-
commit:
|
|
20461
|
-
skipWikilinks:
|
|
20462
|
-
suggestOutgoingLinks:
|
|
20463
|
-
maxSuggestions:
|
|
20464
|
-
dry_run:
|
|
20465
|
-
agent_id:
|
|
20466
|
-
session_id:
|
|
20500
|
+
path: z13.string().describe("Vault-relative path to the note"),
|
|
20501
|
+
section: z13.string().describe('Heading text to search in (e.g., "Log" or "## Log")'),
|
|
20502
|
+
search: z13.string().describe("Text or pattern to search for"),
|
|
20503
|
+
replacement: z13.string().describe("Text to replace with"),
|
|
20504
|
+
mode: z13.enum(["first", "last", "all"]).default("first").describe("Which matches to replace"),
|
|
20505
|
+
useRegex: z13.boolean().default(false).describe("Treat search as regex"),
|
|
20506
|
+
commit: z13.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20507
|
+
skipWikilinks: z13.boolean().default(false).describe("If true, skip auto-wikilink application on replacement text"),
|
|
20508
|
+
suggestOutgoingLinks: z13.boolean().default(false).describe('Suggest related outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
|
|
20509
|
+
maxSuggestions: z13.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks (1-10, default: 5)"),
|
|
20510
|
+
dry_run: z13.boolean().optional().default(false).describe("Preview changes without writing to disk"),
|
|
20511
|
+
agent_id: z13.string().optional().describe("Agent identifier for multi-agent scoping"),
|
|
20512
|
+
session_id: z13.string().optional().describe("Session identifier for conversation scoping")
|
|
20467
20513
|
},
|
|
20468
20514
|
async ({ path: notePath, section, search, replacement, mode, useRegex, commit, skipWikilinks, suggestOutgoingLinks, maxSuggestions, dry_run, agent_id, session_id }) => {
|
|
20469
20515
|
const vaultPath2 = getVaultPath();
|
|
@@ -20543,7 +20589,7 @@ ${childBlocks.join("\n")}`;
|
|
|
20543
20589
|
// src/tools/write/tasks.ts
|
|
20544
20590
|
init_writer();
|
|
20545
20591
|
init_wikilinks();
|
|
20546
|
-
import { z as
|
|
20592
|
+
import { z as z14 } from "zod";
|
|
20547
20593
|
var TASK_REGEX2 = /^(\s*)-\s*\[([ xX])\]\s*(.*)$/;
|
|
20548
20594
|
function findTasks(content, section) {
|
|
20549
20595
|
const lines = content.split("\n");
|
|
@@ -20592,13 +20638,13 @@ function registerTaskTools(server2, getVaultPath) {
|
|
|
20592
20638
|
"vault_toggle_task",
|
|
20593
20639
|
"Use when checking or unchecking a task in a note. Produces a toggled checkbox state on the matching task line. Returns the updated task text and new status. Does not add new tasks \u2014 use vault_add_task to create.",
|
|
20594
20640
|
{
|
|
20595
|
-
path:
|
|
20596
|
-
task:
|
|
20597
|
-
section:
|
|
20598
|
-
commit:
|
|
20599
|
-
dry_run:
|
|
20600
|
-
agent_id:
|
|
20601
|
-
session_id:
|
|
20641
|
+
path: z14.string().describe("Vault-relative path to the note"),
|
|
20642
|
+
task: z14.string().describe("Task text to find (partial match supported)"),
|
|
20643
|
+
section: z14.string().optional().describe("Optional: limit search to this section"),
|
|
20644
|
+
commit: z14.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20645
|
+
dry_run: z14.boolean().optional().default(false).describe("Preview changes without writing to disk"),
|
|
20646
|
+
agent_id: z14.string().optional().describe("Agent identifier for multi-agent scoping"),
|
|
20647
|
+
session_id: z14.string().optional().describe("Session identifier for conversation scoping")
|
|
20602
20648
|
},
|
|
20603
20649
|
async ({ path: notePath, task, section, commit, dry_run, agent_id, session_id }) => {
|
|
20604
20650
|
const vaultPath2 = getVaultPath();
|
|
@@ -20672,22 +20718,22 @@ function registerTaskTools(server2, getVaultPath) {
|
|
|
20672
20718
|
"vault_add_task",
|
|
20673
20719
|
"Use when adding a new task checkbox to a note section. Produces a markdown task line inserted under the specified heading. Returns the written task text with line number. Does not toggle existing tasks \u2014 use vault_toggle_task to check or uncheck.",
|
|
20674
20720
|
{
|
|
20675
|
-
path:
|
|
20676
|
-
section:
|
|
20677
|
-
task:
|
|
20678
|
-
position:
|
|
20679
|
-
completed:
|
|
20680
|
-
commit:
|
|
20681
|
-
skipWikilinks:
|
|
20682
|
-
suggestOutgoingLinks:
|
|
20683
|
-
maxSuggestions:
|
|
20684
|
-
preserveListNesting:
|
|
20685
|
-
validate:
|
|
20686
|
-
normalize:
|
|
20687
|
-
guardrails:
|
|
20688
|
-
dry_run:
|
|
20689
|
-
agent_id:
|
|
20690
|
-
session_id:
|
|
20721
|
+
path: z14.string().describe("Vault-relative path to the note"),
|
|
20722
|
+
section: z14.string().describe("Section to add the task to"),
|
|
20723
|
+
task: z14.string().describe("Task text (without checkbox)"),
|
|
20724
|
+
position: z14.enum(["append", "prepend"]).default("append").describe("Where to add the task"),
|
|
20725
|
+
completed: z14.boolean().default(false).describe("Whether the task should start as completed"),
|
|
20726
|
+
commit: z14.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20727
|
+
skipWikilinks: z14.boolean().default(false).describe("If true, skip auto-wikilink application (wikilinks are applied by default)"),
|
|
20728
|
+
suggestOutgoingLinks: z14.boolean().default(false).describe('Append suggested outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
|
|
20729
|
+
maxSuggestions: z14.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks to append (1-10, default: 5)"),
|
|
20730
|
+
preserveListNesting: z14.boolean().default(true).describe("Preserve indentation when inserting into nested lists. Default: true"),
|
|
20731
|
+
validate: z14.boolean().default(true).describe("Check input for common issues"),
|
|
20732
|
+
normalize: z14.boolean().default(true).describe("Auto-fix common issues before formatting"),
|
|
20733
|
+
guardrails: z14.enum(["warn", "strict", "off"]).default("warn").describe("Output validation mode"),
|
|
20734
|
+
dry_run: z14.boolean().optional().default(false).describe("Preview changes without writing to disk"),
|
|
20735
|
+
agent_id: z14.string().optional().describe("Agent identifier for multi-agent scoping"),
|
|
20736
|
+
session_id: z14.string().optional().describe("Session identifier for conversation scoping")
|
|
20691
20737
|
},
|
|
20692
20738
|
async ({ path: notePath, section, task, position, completed, commit, skipWikilinks, suggestOutgoingLinks, maxSuggestions, preserveListNesting, validate, normalize, guardrails, dry_run, agent_id, session_id }) => {
|
|
20693
20739
|
const vaultPath2 = getVaultPath();
|
|
@@ -20747,17 +20793,17 @@ function registerTaskTools(server2, getVaultPath) {
|
|
|
20747
20793
|
}
|
|
20748
20794
|
|
|
20749
20795
|
// src/tools/write/frontmatter.ts
|
|
20750
|
-
import { z as
|
|
20796
|
+
import { z as z15 } from "zod";
|
|
20751
20797
|
function registerFrontmatterTools(server2, getVaultPath) {
|
|
20752
20798
|
server2.tool(
|
|
20753
20799
|
"vault_update_frontmatter",
|
|
20754
20800
|
"Use when setting or changing metadata fields on a note. Produces a frontmatter merge that preserves existing fields and adds or overwrites specified keys. Returns updated frontmatter object. Does not overwrite unspecified fields. Set only_if_missing to true to backfill without clobbering.",
|
|
20755
20801
|
{
|
|
20756
|
-
path:
|
|
20757
|
-
frontmatter:
|
|
20758
|
-
only_if_missing:
|
|
20759
|
-
commit:
|
|
20760
|
-
dry_run:
|
|
20802
|
+
path: z15.string().describe("Vault-relative path to the note"),
|
|
20803
|
+
frontmatter: z15.record(z15.any()).describe("Frontmatter fields to update (JSON object)"),
|
|
20804
|
+
only_if_missing: z15.boolean().default(false).describe("If true, only add fields that don't already exist in the frontmatter (skip existing keys)"),
|
|
20805
|
+
commit: z15.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20806
|
+
dry_run: z15.boolean().optional().default(false).describe("Preview changes without writing to disk")
|
|
20761
20807
|
},
|
|
20762
20808
|
async ({ path: notePath, frontmatter: updates, only_if_missing, commit, dry_run }) => {
|
|
20763
20809
|
const vaultPath2 = getVaultPath();
|
|
@@ -20810,7 +20856,7 @@ function registerFrontmatterTools(server2, getVaultPath) {
|
|
|
20810
20856
|
// src/tools/write/notes.ts
|
|
20811
20857
|
init_writer();
|
|
20812
20858
|
init_wikilinks();
|
|
20813
|
-
import { z as
|
|
20859
|
+
import { z as z16 } from "zod";
|
|
20814
20860
|
import fs25 from "fs/promises";
|
|
20815
20861
|
import path28 from "path";
|
|
20816
20862
|
function registerNoteTools(server2, getVaultPath, getIndex) {
|
|
@@ -20818,18 +20864,18 @@ function registerNoteTools(server2, getVaultPath, getIndex) {
|
|
|
20818
20864
|
"vault_create_note",
|
|
20819
20865
|
"Use when a new entity, document, or periodic note needs to exist. Produces a markdown file with frontmatter, auto-wikilinks, and optional template expansion. Returns mutation result with path, alias warnings, and suggested outgoing links. Does not overwrite existing notes unless overwrite flag is set.",
|
|
20820
20866
|
{
|
|
20821
|
-
path:
|
|
20822
|
-
content:
|
|
20823
|
-
template:
|
|
20824
|
-
frontmatter:
|
|
20825
|
-
overwrite:
|
|
20826
|
-
commit:
|
|
20827
|
-
skipWikilinks:
|
|
20828
|
-
suggestOutgoingLinks:
|
|
20829
|
-
maxSuggestions:
|
|
20830
|
-
dry_run:
|
|
20831
|
-
agent_id:
|
|
20832
|
-
session_id:
|
|
20867
|
+
path: z16.string().describe('Vault-relative path for the new note (e.g., "daily-notes/2026-01-28.md")'),
|
|
20868
|
+
content: z16.string().default("").describe("Initial content for the note"),
|
|
20869
|
+
template: z16.string().optional().describe('Vault-relative path to a template file (e.g., "templates/person.md"). Template variables {{date}} and {{title}} are substituted. Template frontmatter is merged with the frontmatter parameter (explicit values take precedence).'),
|
|
20870
|
+
frontmatter: z16.record(z16.any()).default({}).describe("Frontmatter fields (JSON object). At minimum set type, aliases, and description \u2014 without these the note is nearly invisible to search and suggestions."),
|
|
20871
|
+
overwrite: z16.boolean().default(false).describe("If true, overwrite existing file"),
|
|
20872
|
+
commit: z16.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
20873
|
+
skipWikilinks: z16.boolean().default(false).describe("If true, skip auto-wikilink application (wikilinks are applied by default)"),
|
|
20874
|
+
suggestOutgoingLinks: z16.boolean().default(false).describe('Append suggested outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
|
|
20875
|
+
maxSuggestions: z16.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks to append (1-10, default: 5)"),
|
|
20876
|
+
dry_run: z16.boolean().optional().default(false).describe("Preview changes without writing to disk"),
|
|
20877
|
+
agent_id: z16.string().optional().describe("Agent identifier for multi-agent scoping"),
|
|
20878
|
+
session_id: z16.string().optional().describe("Session identifier for conversation scoping")
|
|
20833
20879
|
},
|
|
20834
20880
|
async ({ path: rawNotePath, content, template, frontmatter, overwrite, commit, skipWikilinks, suggestOutgoingLinks, maxSuggestions, dry_run, agent_id, session_id }) => {
|
|
20835
20881
|
try {
|
|
@@ -20961,10 +21007,10 @@ function registerNoteTools(server2, getVaultPath, getIndex) {
|
|
|
20961
21007
|
"vault_delete_note",
|
|
20962
21008
|
"Use when permanently removing a note. Produces a file deletion with optional git commit for undo. Returns deletion confirmation with path. Caution: does not clean up backlinks \u2014 orphaned [[references]] in other notes will remain as dead links.",
|
|
20963
21009
|
{
|
|
20964
|
-
path:
|
|
20965
|
-
confirm:
|
|
20966
|
-
commit:
|
|
20967
|
-
dry_run:
|
|
21010
|
+
path: z16.string().describe("Vault-relative path to the note to delete"),
|
|
21011
|
+
confirm: z16.boolean().default(false).describe("Must be true to confirm deletion"),
|
|
21012
|
+
commit: z16.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
|
|
21013
|
+
dry_run: z16.boolean().optional().default(false).describe("Preview what would be deleted without actually deleting")
|
|
20968
21014
|
},
|
|
20969
21015
|
async ({ path: notePath, confirm, commit, dry_run }) => {
|
|
20970
21016
|
try {
|
|
@@ -21034,7 +21080,7 @@ Warning: ${backlinkWarning}` : `Deleted note: ${notePath}`;
|
|
|
21034
21080
|
init_writer();
|
|
21035
21081
|
init_git();
|
|
21036
21082
|
init_wikilinks();
|
|
21037
|
-
import { z as
|
|
21083
|
+
import { z as z17 } from "zod";
|
|
21038
21084
|
import fs26 from "fs/promises";
|
|
21039
21085
|
import path29 from "path";
|
|
21040
21086
|
import matter6 from "gray-matter";
|
|
@@ -21137,11 +21183,11 @@ function registerMoveNoteTools(server2, getVaultPath) {
|
|
|
21137
21183
|
"vault_move_note",
|
|
21138
21184
|
"Use when relocating a note to a different folder. Produces a file move and automatically rewires every backlink across the vault to point to the new location. Returns new path and count of updated backlinks. Does not rename the note \u2014 use vault_rename_note for title changes.",
|
|
21139
21185
|
{
|
|
21140
|
-
oldPath:
|
|
21141
|
-
newPath:
|
|
21142
|
-
updateBacklinks:
|
|
21143
|
-
commit:
|
|
21144
|
-
dry_run:
|
|
21186
|
+
oldPath: z17.string().describe('Vault-relative path to move from (e.g., "inbox/note.md")'),
|
|
21187
|
+
newPath: z17.string().describe('Vault-relative path to move to (e.g., "projects/note.md")'),
|
|
21188
|
+
updateBacklinks: z17.boolean().default(true).describe("If true (default), updates all backlinks pointing to this note"),
|
|
21189
|
+
commit: z17.boolean().default(false).describe("If true, commit all changes to git"),
|
|
21190
|
+
dry_run: z17.boolean().optional().default(false).describe("Preview what would change without moving any files")
|
|
21145
21191
|
},
|
|
21146
21192
|
async ({ oldPath, newPath, updateBacklinks, commit, dry_run }) => {
|
|
21147
21193
|
try {
|
|
@@ -21291,11 +21337,11 @@ function registerMoveNoteTools(server2, getVaultPath) {
|
|
|
21291
21337
|
"vault_rename_note",
|
|
21292
21338
|
"Use when changing a note's title. Produces a file rename and automatically rewires every [[OldName]] wikilink across the vault to [[NewName]]. Returns new path and count of updated links. Does not move the note to another folder \u2014 use vault_move_note for that.",
|
|
21293
21339
|
{
|
|
21294
|
-
path:
|
|
21295
|
-
newTitle:
|
|
21296
|
-
updateBacklinks:
|
|
21297
|
-
commit:
|
|
21298
|
-
dry_run:
|
|
21340
|
+
path: z17.string().describe("Vault-relative path to the note to rename"),
|
|
21341
|
+
newTitle: z17.string().describe("New title for the note (without .md extension)"),
|
|
21342
|
+
updateBacklinks: z17.boolean().default(true).describe("If true (default), updates all backlinks pointing to this note"),
|
|
21343
|
+
commit: z17.boolean().default(false).describe("If true, commit all changes to git"),
|
|
21344
|
+
dry_run: z17.boolean().optional().default(false).describe("Preview what would change without renaming any files")
|
|
21299
21345
|
},
|
|
21300
21346
|
async ({ path: notePath, newTitle, updateBacklinks, commit, dry_run }) => {
|
|
21301
21347
|
try {
|
|
@@ -21453,7 +21499,7 @@ function registerMoveNoteTools(server2, getVaultPath) {
|
|
|
21453
21499
|
// src/tools/write/merge.ts
|
|
21454
21500
|
init_writer();
|
|
21455
21501
|
init_wikilinks();
|
|
21456
|
-
import { z as
|
|
21502
|
+
import { z as z18 } from "zod";
|
|
21457
21503
|
import fs27 from "fs/promises";
|
|
21458
21504
|
import path30 from "path";
|
|
21459
21505
|
function registerMergeTools(server2, getVaultPath) {
|
|
@@ -21461,9 +21507,9 @@ function registerMergeTools(server2, getVaultPath) {
|
|
|
21461
21507
|
"merge_entities",
|
|
21462
21508
|
"Use when consolidating two entity notes into one. Produces alias addition, content append, wikilink rewiring, and source note deletion. Returns merge result with updated link count. Does not preserve the source note \u2014 it is deleted after merge.",
|
|
21463
21509
|
{
|
|
21464
|
-
source_path:
|
|
21465
|
-
target_path:
|
|
21466
|
-
dry_run:
|
|
21510
|
+
source_path: z18.string().describe("Vault-relative path of the note to merge FROM (will be deleted)"),
|
|
21511
|
+
target_path: z18.string().describe("Vault-relative path of the note to merge INTO (receives alias + content)"),
|
|
21512
|
+
dry_run: z18.boolean().optional().default(false).describe("Preview merge plan without modifying any files")
|
|
21467
21513
|
},
|
|
21468
21514
|
async ({ source_path, target_path, dry_run }) => {
|
|
21469
21515
|
try {
|
|
@@ -21615,9 +21661,9 @@ ${trimmedSource}`;
|
|
|
21615
21661
|
"absorb_as_alias",
|
|
21616
21662
|
"Use when two entity names should resolve to the same note without merging content. Produces an alias addition on the target note and rewrites all source links. Returns rewritten link count and updated frontmatter. Does not merge note bodies \u2014 use merge_entities for full content merge.",
|
|
21617
21663
|
{
|
|
21618
|
-
source_name:
|
|
21619
|
-
target_path:
|
|
21620
|
-
dry_run:
|
|
21664
|
+
source_name: z18.string().describe('The entity name to absorb (e.g. "Foo")'),
|
|
21665
|
+
target_path: z18.string().describe('Vault-relative path of the target entity note (e.g. "entities/Bar.md")'),
|
|
21666
|
+
dry_run: z18.boolean().optional().default(false).describe("Preview what would change without modifying any files")
|
|
21621
21667
|
},
|
|
21622
21668
|
async ({ source_name, target_path, dry_run }) => {
|
|
21623
21669
|
try {
|
|
@@ -21771,14 +21817,14 @@ async function findSourceNote(vaultPath2, sourceName, excludePath) {
|
|
|
21771
21817
|
|
|
21772
21818
|
// src/tools/write/system.ts
|
|
21773
21819
|
init_git();
|
|
21774
|
-
import { z as
|
|
21820
|
+
import { z as z19 } from "zod";
|
|
21775
21821
|
function registerSystemTools2(server2, getVaultPath) {
|
|
21776
21822
|
server2.tool(
|
|
21777
21823
|
"vault_undo_last_mutation",
|
|
21778
21824
|
"Use when the last vault write was wrong and needs reverting. Produces a git soft reset of the most recent Flywheel commit. Returns the reverted commit info. Does not undo manual edits or non-Flywheel commits.",
|
|
21779
21825
|
{
|
|
21780
|
-
confirm:
|
|
21781
|
-
hash:
|
|
21826
|
+
confirm: z19.boolean().default(false).describe("Must be true to confirm undo operation"),
|
|
21827
|
+
hash: z19.string().optional().describe("Expected commit hash. If provided, undo only proceeds if HEAD matches this hash. Prevents accidentally undoing the wrong commit.")
|
|
21782
21828
|
},
|
|
21783
21829
|
async ({ confirm, hash }) => {
|
|
21784
21830
|
try {
|
|
@@ -21881,7 +21927,7 @@ Message: ${undoResult.undoneCommit.message}` : void 0
|
|
|
21881
21927
|
|
|
21882
21928
|
// src/tools/write/policy.ts
|
|
21883
21929
|
import * as path35 from "path";
|
|
21884
|
-
import { z as
|
|
21930
|
+
import { z as z21 } from "zod";
|
|
21885
21931
|
|
|
21886
21932
|
// src/core/write/policy/index.ts
|
|
21887
21933
|
init_template();
|
|
@@ -22728,71 +22774,71 @@ function registerPolicyTools(server2, getVaultPath, getSearchFn) {
|
|
|
22728
22774
|
"policy",
|
|
22729
22775
|
"Use when running or authoring repeatable vault workflows. Produces deterministic multi-step operations (sections, notes, frontmatter, tasks) committed atomically. Returns execution results or authored YAML. Does not execute arbitrary code \u2014 only chains vault tools with variables, conditions, and templates.",
|
|
22730
22776
|
{
|
|
22731
|
-
action:
|
|
22777
|
+
action: z21.enum(["list", "validate", "preview", "execute", "author", "revise"]).describe("Action to perform"),
|
|
22732
22778
|
// validate
|
|
22733
|
-
yaml:
|
|
22779
|
+
yaml: z21.string().optional().describe('Policy YAML content (required for "validate")'),
|
|
22734
22780
|
// preview, execute, revise
|
|
22735
|
-
policy:
|
|
22781
|
+
policy: z21.string().optional().describe('Policy name or full YAML content (required for "preview", "execute", "revise")'),
|
|
22736
22782
|
// preview, execute
|
|
22737
|
-
variables:
|
|
22783
|
+
variables: z21.record(z21.unknown()).optional().describe('Variables to pass to the policy (for "preview", "execute")'),
|
|
22738
22784
|
// execute
|
|
22739
|
-
commit:
|
|
22785
|
+
commit: z21.boolean().optional().describe('If true, commit all changes with single atomic commit (for "execute")'),
|
|
22740
22786
|
// author
|
|
22741
|
-
name:
|
|
22742
|
-
description:
|
|
22743
|
-
steps:
|
|
22744
|
-
tool:
|
|
22745
|
-
description:
|
|
22746
|
-
params:
|
|
22787
|
+
name: z21.string().optional().describe('Name for the policy (required for "author")'),
|
|
22788
|
+
description: z21.string().optional().describe('Description of what the policy should do (required for "author")'),
|
|
22789
|
+
steps: z21.array(z21.object({
|
|
22790
|
+
tool: z21.string().describe("Tool to call (e.g., vault_add_to_section)"),
|
|
22791
|
+
description: z21.string().describe("What this step does"),
|
|
22792
|
+
params: z21.record(z21.unknown()).describe("Parameters for the tool")
|
|
22747
22793
|
})).optional().describe('Steps the policy should perform (required for "author")'),
|
|
22748
|
-
authorVariables:
|
|
22749
|
-
name:
|
|
22750
|
-
type:
|
|
22751
|
-
required:
|
|
22752
|
-
default:
|
|
22753
|
-
enum:
|
|
22754
|
-
description:
|
|
22794
|
+
authorVariables: z21.array(z21.object({
|
|
22795
|
+
name: z21.string().describe("Variable name"),
|
|
22796
|
+
type: z21.enum(["string", "number", "boolean", "array", "enum"]).describe("Variable type"),
|
|
22797
|
+
required: z21.boolean().default(true).describe("Whether variable is required"),
|
|
22798
|
+
default: z21.unknown().optional().describe("Default value"),
|
|
22799
|
+
enum: z21.array(z21.string()).optional().describe("Allowed values for enum type"),
|
|
22800
|
+
description: z21.string().optional().describe("Variable description")
|
|
22755
22801
|
})).optional().describe('Variables the policy accepts (for "author")'),
|
|
22756
|
-
conditions:
|
|
22757
|
-
id:
|
|
22758
|
-
check:
|
|
22759
|
-
path:
|
|
22760
|
-
section:
|
|
22761
|
-
field:
|
|
22762
|
-
value:
|
|
22802
|
+
conditions: z21.array(z21.object({
|
|
22803
|
+
id: z21.string().describe("Condition ID"),
|
|
22804
|
+
check: z21.string().describe("Condition type (file_exists, section_exists, etc.)"),
|
|
22805
|
+
path: z21.string().optional().describe("File path"),
|
|
22806
|
+
section: z21.string().optional().describe("Section name"),
|
|
22807
|
+
field: z21.string().optional().describe("Frontmatter field"),
|
|
22808
|
+
value: z21.unknown().optional().describe("Expected value")
|
|
22763
22809
|
})).optional().describe('Conditions for conditional execution (for "author")'),
|
|
22764
22810
|
// author, revise
|
|
22765
|
-
save:
|
|
22811
|
+
save: z21.boolean().optional().describe('If true, save to .flywheel/policies/ (for "author", "revise")'),
|
|
22766
22812
|
// revise
|
|
22767
|
-
changes:
|
|
22768
|
-
description:
|
|
22769
|
-
addVariables:
|
|
22770
|
-
name:
|
|
22771
|
-
type:
|
|
22772
|
-
required:
|
|
22773
|
-
default:
|
|
22774
|
-
enum:
|
|
22775
|
-
description:
|
|
22813
|
+
changes: z21.object({
|
|
22814
|
+
description: z21.string().optional().describe("New description"),
|
|
22815
|
+
addVariables: z21.array(z21.object({
|
|
22816
|
+
name: z21.string(),
|
|
22817
|
+
type: z21.enum(["string", "number", "boolean", "array", "enum"]),
|
|
22818
|
+
required: z21.boolean().default(true),
|
|
22819
|
+
default: z21.unknown().optional(),
|
|
22820
|
+
enum: z21.array(z21.string()).optional(),
|
|
22821
|
+
description: z21.string().optional()
|
|
22776
22822
|
})).optional().describe("Variables to add"),
|
|
22777
|
-
removeVariables:
|
|
22778
|
-
addSteps:
|
|
22779
|
-
id:
|
|
22780
|
-
tool:
|
|
22781
|
-
params:
|
|
22782
|
-
when:
|
|
22783
|
-
description:
|
|
22784
|
-
afterStep:
|
|
22823
|
+
removeVariables: z21.array(z21.string()).optional().describe("Variable names to remove"),
|
|
22824
|
+
addSteps: z21.array(z21.object({
|
|
22825
|
+
id: z21.string(),
|
|
22826
|
+
tool: z21.string(),
|
|
22827
|
+
params: z21.record(z21.unknown()),
|
|
22828
|
+
when: z21.string().optional(),
|
|
22829
|
+
description: z21.string().optional(),
|
|
22830
|
+
afterStep: z21.string().optional().describe("Insert after this step ID")
|
|
22785
22831
|
})).optional().describe("Steps to add"),
|
|
22786
|
-
removeSteps:
|
|
22787
|
-
addConditions:
|
|
22788
|
-
id:
|
|
22789
|
-
check:
|
|
22790
|
-
path:
|
|
22791
|
-
section:
|
|
22792
|
-
field:
|
|
22793
|
-
value:
|
|
22832
|
+
removeSteps: z21.array(z21.string()).optional().describe("Step IDs to remove"),
|
|
22833
|
+
addConditions: z21.array(z21.object({
|
|
22834
|
+
id: z21.string(),
|
|
22835
|
+
check: z21.string(),
|
|
22836
|
+
path: z21.string().optional(),
|
|
22837
|
+
section: z21.string().optional(),
|
|
22838
|
+
field: z21.string().optional(),
|
|
22839
|
+
value: z21.unknown().optional()
|
|
22794
22840
|
})).optional().describe("Conditions to add"),
|
|
22795
|
-
removeConditions:
|
|
22841
|
+
removeConditions: z21.array(z21.string()).optional().describe("Condition IDs to remove")
|
|
22796
22842
|
}).optional().describe('Changes to make (required for "revise")')
|
|
22797
22843
|
},
|
|
22798
22844
|
async (params) => {
|
|
@@ -23237,7 +23283,7 @@ function registerPolicyTools(server2, getVaultPath, getSearchFn) {
|
|
|
23237
23283
|
}
|
|
23238
23284
|
|
|
23239
23285
|
// src/tools/write/tags.ts
|
|
23240
|
-
import { z as
|
|
23286
|
+
import { z as z22 } from "zod";
|
|
23241
23287
|
|
|
23242
23288
|
// src/core/write/tagRename.ts
|
|
23243
23289
|
import * as fs32 from "fs/promises";
|
|
@@ -23446,12 +23492,12 @@ function registerTagTools(server2, getIndex, getVaultPath) {
|
|
|
23446
23492
|
title: "Rename Tag",
|
|
23447
23493
|
description: "Use when bulk-renaming a tag across all notes including hierarchical children. Produces frontmatter and inline tag replacements with dry-run preview. Returns rename results with affected note count and tag transformations. Does not write changes unless dry_run is false.",
|
|
23448
23494
|
inputSchema: {
|
|
23449
|
-
old_tag:
|
|
23450
|
-
new_tag:
|
|
23451
|
-
rename_children:
|
|
23452
|
-
folder:
|
|
23453
|
-
dry_run:
|
|
23454
|
-
commit:
|
|
23495
|
+
old_tag: z22.string().describe('Tag to rename (without #, e.g., "project")'),
|
|
23496
|
+
new_tag: z22.string().describe('New tag name (without #, e.g., "work")'),
|
|
23497
|
+
rename_children: z22.boolean().optional().describe("Also rename child tags (e.g., #project/active \u2192 #work/active). Default: true"),
|
|
23498
|
+
folder: z22.string().optional().describe('Limit to notes in this folder (e.g., "projects")'),
|
|
23499
|
+
dry_run: z22.boolean().optional().describe("Preview only, no changes (default: true)"),
|
|
23500
|
+
commit: z22.boolean().optional().describe("Commit changes to git (default: false)")
|
|
23455
23501
|
}
|
|
23456
23502
|
},
|
|
23457
23503
|
async ({ old_tag, new_tag, rename_children, folder, dry_run, commit }) => {
|
|
@@ -23477,7 +23523,7 @@ function registerTagTools(server2, getIndex, getVaultPath) {
|
|
|
23477
23523
|
|
|
23478
23524
|
// src/tools/write/wikilinkFeedback.ts
|
|
23479
23525
|
init_wikilinkFeedback();
|
|
23480
|
-
import { z as
|
|
23526
|
+
import { z as z23 } from "zod";
|
|
23481
23527
|
function registerWikilinkFeedbackTools(server2, getStateDb4) {
|
|
23482
23528
|
server2.registerTool(
|
|
23483
23529
|
"wikilink_feedback",
|
|
@@ -23485,17 +23531,17 @@ function registerWikilinkFeedbackTools(server2, getStateDb4) {
|
|
|
23485
23531
|
title: "Wikilink Feedback",
|
|
23486
23532
|
description: "Use when reporting whether a wikilink suggestion was correct or incorrect. Produces a feedback record that trains future suggestion scoring. Returns confirmation with feedback stats. Does not modify note content \u2014 only records the accuracy signal for the scoring engine.",
|
|
23487
23533
|
inputSchema: {
|
|
23488
|
-
mode:
|
|
23489
|
-
entity:
|
|
23490
|
-
note_path:
|
|
23491
|
-
context:
|
|
23492
|
-
correct:
|
|
23493
|
-
limit:
|
|
23494
|
-
days_back:
|
|
23495
|
-
granularity:
|
|
23496
|
-
timestamp_before:
|
|
23497
|
-
timestamp_after:
|
|
23498
|
-
skip_status_update:
|
|
23534
|
+
mode: z23.enum(["report", "list", "stats", "dashboard", "entity_timeline", "layer_timeseries", "snapshot_diff", "suppress", "unsuppress"]).describe("Operation mode"),
|
|
23535
|
+
entity: z23.string().optional().describe("Entity name (required for report and entity_timeline modes, optional filter for list/stats)"),
|
|
23536
|
+
note_path: z23.string().optional().describe("Note path where the wikilink appeared (for report mode)"),
|
|
23537
|
+
context: z23.string().optional().describe("Surrounding text context (for report mode)"),
|
|
23538
|
+
correct: z23.boolean().optional().describe("Whether the wikilink was correct (for report mode)"),
|
|
23539
|
+
limit: z23.number().optional().describe("Max entries to return (default: 20 for list, 100 for entity_timeline)"),
|
|
23540
|
+
days_back: z23.number().optional().describe("Days to look back (default: 30)"),
|
|
23541
|
+
granularity: z23.enum(["day", "week"]).optional().describe("Time bucket granularity for layer_timeseries (default: day)"),
|
|
23542
|
+
timestamp_before: z23.number().optional().describe("Earlier timestamp for snapshot_diff"),
|
|
23543
|
+
timestamp_after: z23.number().optional().describe("Later timestamp for snapshot_diff"),
|
|
23544
|
+
skip_status_update: z23.boolean().optional().describe("Skip marking application as removed (caller will trigger implicit detection via file edit)")
|
|
23499
23545
|
}
|
|
23500
23546
|
},
|
|
23501
23547
|
async ({ mode, entity, note_path, context, correct, limit, days_back, granularity, timestamp_before, timestamp_after, skip_status_update }) => {
|
|
@@ -23663,7 +23709,7 @@ function registerWikilinkFeedbackTools(server2, getStateDb4) {
|
|
|
23663
23709
|
}
|
|
23664
23710
|
|
|
23665
23711
|
// src/tools/write/toolSelectionFeedback.ts
|
|
23666
|
-
import { z as
|
|
23712
|
+
import { z as z24 } from "zod";
|
|
23667
23713
|
init_vault_scope();
|
|
23668
23714
|
function registerToolSelectionFeedbackTools(server2, getStateDb4) {
|
|
23669
23715
|
server2.registerTool(
|
|
@@ -23672,15 +23718,15 @@ function registerToolSelectionFeedbackTools(server2, getStateDb4) {
|
|
|
23672
23718
|
title: "Tool Selection Feedback",
|
|
23673
23719
|
description: "Use when reporting whether the right tool was picked for a query. Produces a feedback record tracking tool selection quality over time. Returns confirmation with feedback stats and accuracy history. Does not change tool routing \u2014 only records the signal for analysis.",
|
|
23674
23720
|
inputSchema: {
|
|
23675
|
-
mode:
|
|
23676
|
-
correct:
|
|
23677
|
-
tool_invocation_id:
|
|
23678
|
-
tool_name:
|
|
23679
|
-
expected_tool:
|
|
23680
|
-
expected_category:
|
|
23681
|
-
reason:
|
|
23682
|
-
days_back:
|
|
23683
|
-
limit:
|
|
23721
|
+
mode: z24.enum(["report", "list", "stats", "misroutes"]).describe("Operation mode"),
|
|
23722
|
+
correct: z24.boolean().optional().describe("Was the tool selection correct? (required for report mode)"),
|
|
23723
|
+
tool_invocation_id: z24.number().optional().describe("ID of the tool invocation being evaluated (preferred \u2014 hydrates tool_name, query_context, session_id automatically)"),
|
|
23724
|
+
tool_name: z24.string().optional().describe("Tool that was called (used when tool_invocation_id not available)"),
|
|
23725
|
+
expected_tool: z24.string().optional().describe("Tool that should have been called instead"),
|
|
23726
|
+
expected_category: z24.string().optional().describe("Category that should have been used instead"),
|
|
23727
|
+
reason: z24.string().optional().describe("Optional reason for the feedback"),
|
|
23728
|
+
days_back: z24.number().min(1).max(365).optional().describe("Lookback period for stats mode (default: 30)"),
|
|
23729
|
+
limit: z24.number().min(1).max(200).optional().describe("Max entries for list mode (default: 50)")
|
|
23684
23730
|
}
|
|
23685
23731
|
},
|
|
23686
23732
|
async (args) => {
|
|
@@ -23847,16 +23893,16 @@ function recordHeuristicMisroute(stateDb2, toolInvocationId, detection) {
|
|
|
23847
23893
|
|
|
23848
23894
|
// src/tools/write/corrections.ts
|
|
23849
23895
|
init_corrections();
|
|
23850
|
-
import { z as
|
|
23896
|
+
import { z as z25 } from "zod";
|
|
23851
23897
|
function registerCorrectionTools(server2, getStateDb4) {
|
|
23852
23898
|
server2.tool(
|
|
23853
23899
|
"vault_record_correction",
|
|
23854
23900
|
"Use when the user says something is wrong \u2014 a bad link, wrong entity, or wrong category. Produces a persistent correction record that survives across sessions. Returns the saved correction with ID and timestamp. Does not apply the fix \u2014 use vault_resolve_correction after fixing.",
|
|
23855
23901
|
{
|
|
23856
|
-
correction_type:
|
|
23857
|
-
description:
|
|
23858
|
-
entity:
|
|
23859
|
-
note_path:
|
|
23902
|
+
correction_type: z25.enum(["wrong_link", "wrong_entity", "wrong_category", "general"]).describe("Type of correction"),
|
|
23903
|
+
description: z25.string().describe("What went wrong and what should be done"),
|
|
23904
|
+
entity: z25.string().optional().describe("Entity name (if correction is about a specific entity)"),
|
|
23905
|
+
note_path: z25.string().optional().describe("Note path (if correction is about a specific note)")
|
|
23860
23906
|
},
|
|
23861
23907
|
async ({ correction_type, description, entity, note_path }) => {
|
|
23862
23908
|
const stateDb2 = getStateDb4();
|
|
@@ -23882,9 +23928,9 @@ function registerCorrectionTools(server2, getStateDb4) {
|
|
|
23882
23928
|
"vault_list_corrections",
|
|
23883
23929
|
"Use when checking for pending, applied, or dismissed corrections. Produces a filtered list of correction records with status and entity. Returns correction entries with type, description, and timestamps. Does not resolve or dismiss \u2014 use vault_resolve_correction for that.",
|
|
23884
23930
|
{
|
|
23885
|
-
status:
|
|
23886
|
-
entity:
|
|
23887
|
-
limit:
|
|
23931
|
+
status: z25.enum(["pending", "applied", "dismissed"]).optional().describe("Filter by status"),
|
|
23932
|
+
entity: z25.string().optional().describe("Filter by entity name"),
|
|
23933
|
+
limit: z25.number().min(1).max(200).default(50).describe("Max entries to return")
|
|
23888
23934
|
},
|
|
23889
23935
|
async ({ status, entity, limit }) => {
|
|
23890
23936
|
const stateDb2 = getStateDb4();
|
|
@@ -23910,8 +23956,8 @@ function registerCorrectionTools(server2, getStateDb4) {
|
|
|
23910
23956
|
"vault_resolve_correction",
|
|
23911
23957
|
"Use when marking a correction as applied or dismissed after addressing it. Produces an updated correction record with resolution status. Returns confirmation with the resolved correction ID. Does not undo the fix \u2014 only updates the correction tracking record.",
|
|
23912
23958
|
{
|
|
23913
|
-
correction_id:
|
|
23914
|
-
status:
|
|
23959
|
+
correction_id: z25.number().describe("ID of the correction to resolve"),
|
|
23960
|
+
status: z25.enum(["applied", "dismissed"]).describe("New status")
|
|
23915
23961
|
},
|
|
23916
23962
|
async ({ correction_id, status }) => {
|
|
23917
23963
|
const stateDb2 = getStateDb4();
|
|
@@ -23943,30 +23989,30 @@ function registerCorrectionTools(server2, getStateDb4) {
|
|
|
23943
23989
|
}
|
|
23944
23990
|
|
|
23945
23991
|
// src/tools/write/memory.ts
|
|
23946
|
-
import { z as
|
|
23992
|
+
import { z as z26 } from "zod";
|
|
23947
23993
|
function registerMemoryTools(server2, getStateDb4) {
|
|
23948
23994
|
server2.tool(
|
|
23949
23995
|
"memory",
|
|
23950
23996
|
"Use when storing, retrieving, or managing persistent agent observations across sessions. Produces durable key-value memory entries for facts, preferences, and decisions. Returns stored or retrieved memory content. Does not search vault notes \u2014 use search for note content lookup.",
|
|
23951
23997
|
{
|
|
23952
|
-
action:
|
|
23998
|
+
action: z26.enum(["store", "get", "search", "list", "forget", "summarize_session"]).describe("Action to perform"),
|
|
23953
23999
|
// store params
|
|
23954
|
-
key:
|
|
23955
|
-
value:
|
|
23956
|
-
type:
|
|
23957
|
-
entity:
|
|
23958
|
-
confidence:
|
|
23959
|
-
ttl_days:
|
|
24000
|
+
key: z26.string().optional().describe('Memory key (e.g., "user.pref.theme", "project.x.deadline")'),
|
|
24001
|
+
value: z26.string().optional().describe("The fact/preference/observation to store (up to 2000 chars)"),
|
|
24002
|
+
type: z26.enum(["fact", "preference", "observation", "summary"]).optional().describe("Memory type"),
|
|
24003
|
+
entity: z26.string().optional().describe("Primary entity association"),
|
|
24004
|
+
confidence: z26.number().min(0).max(1).optional().describe("Confidence level (0-1, default 1.0)"),
|
|
24005
|
+
ttl_days: z26.number().min(1).optional().describe("Time-to-live in days (null = permanent)"),
|
|
23960
24006
|
// search params
|
|
23961
|
-
query:
|
|
24007
|
+
query: z26.string().optional().describe("FTS5 search query"),
|
|
23962
24008
|
// list/search params
|
|
23963
|
-
limit:
|
|
24009
|
+
limit: z26.number().min(1).max(200).optional().describe("Max results to return"),
|
|
23964
24010
|
// summarize_session params
|
|
23965
|
-
session_id:
|
|
23966
|
-
summary:
|
|
23967
|
-
topics:
|
|
23968
|
-
notes_modified:
|
|
23969
|
-
tool_count:
|
|
24011
|
+
session_id: z26.string().optional().describe("Session ID for summarize_session"),
|
|
24012
|
+
summary: z26.string().optional().describe("Session summary text"),
|
|
24013
|
+
topics: z26.array(z26.string()).optional().describe("Topics discussed in session"),
|
|
24014
|
+
notes_modified: z26.array(z26.string()).optional().describe("Note paths modified during session"),
|
|
24015
|
+
tool_count: z26.number().optional().describe("Number of tool calls in session")
|
|
23970
24016
|
},
|
|
23971
24017
|
async (args) => {
|
|
23972
24018
|
const stateDb2 = getStateDb4();
|
|
@@ -24163,7 +24209,7 @@ function registerMemoryTools(server2, getStateDb4) {
|
|
|
24163
24209
|
}
|
|
24164
24210
|
|
|
24165
24211
|
// src/tools/read/brief.ts
|
|
24166
|
-
import { z as
|
|
24212
|
+
import { z as z27 } from "zod";
|
|
24167
24213
|
init_corrections();
|
|
24168
24214
|
function estimateTokens2(value) {
|
|
24169
24215
|
const str = JSON.stringify(value);
|
|
@@ -24323,8 +24369,8 @@ function registerBriefTools(server2, getStateDb4) {
|
|
|
24323
24369
|
"brief",
|
|
24324
24370
|
"Use at conversation start for session context. Produces a startup briefing with recent sessions, active entities, stored memories, pending corrections, and vault stats. Returns a compact context payload. Does not search or read individual notes \u2014 use search to find specific content.",
|
|
24325
24371
|
{
|
|
24326
|
-
max_tokens:
|
|
24327
|
-
focus:
|
|
24372
|
+
max_tokens: z27.number().optional().describe("Token budget (lower-priority sections truncated first)"),
|
|
24373
|
+
focus: z27.string().optional().describe("Focus entity or topic (filters content)")
|
|
24328
24374
|
},
|
|
24329
24375
|
async (args) => {
|
|
24330
24376
|
const stateDb2 = getStateDb4();
|
|
@@ -24385,29 +24431,29 @@ function registerBriefTools(server2, getStateDb4) {
|
|
|
24385
24431
|
}
|
|
24386
24432
|
|
|
24387
24433
|
// src/tools/write/config.ts
|
|
24388
|
-
import { z as
|
|
24434
|
+
import { z as z28 } from "zod";
|
|
24389
24435
|
import { saveFlywheelConfigToDb as saveFlywheelConfigToDb2 } from "@velvetmonkey/vault-core";
|
|
24390
24436
|
var VALID_CONFIG_KEYS = {
|
|
24391
|
-
vault_name:
|
|
24392
|
-
exclude:
|
|
24437
|
+
vault_name: z28.string(),
|
|
24438
|
+
exclude: z28.array(z28.string()),
|
|
24393
24439
|
/** @deprecated Use `exclude` instead */
|
|
24394
|
-
exclude_task_tags:
|
|
24440
|
+
exclude_task_tags: z28.array(z28.string()),
|
|
24395
24441
|
/** @deprecated Use `exclude` instead */
|
|
24396
|
-
exclude_analysis_tags:
|
|
24442
|
+
exclude_analysis_tags: z28.array(z28.string()),
|
|
24397
24443
|
/** @deprecated Use `exclude` instead */
|
|
24398
|
-
exclude_entities:
|
|
24399
|
-
exclude_entity_folders:
|
|
24400
|
-
wikilink_strictness:
|
|
24401
|
-
implicit_detection:
|
|
24402
|
-
implicit_patterns:
|
|
24403
|
-
adaptive_strictness:
|
|
24404
|
-
proactive_linking:
|
|
24405
|
-
proactive_min_score:
|
|
24406
|
-
proactive_max_per_file:
|
|
24407
|
-
proactive_max_per_day:
|
|
24408
|
-
tool_tier_override:
|
|
24409
|
-
custom_categories:
|
|
24410
|
-
type_boost:
|
|
24444
|
+
exclude_entities: z28.array(z28.string()),
|
|
24445
|
+
exclude_entity_folders: z28.array(z28.string()),
|
|
24446
|
+
wikilink_strictness: z28.enum(["conservative", "balanced", "aggressive"]),
|
|
24447
|
+
implicit_detection: z28.boolean(),
|
|
24448
|
+
implicit_patterns: z28.array(z28.string()),
|
|
24449
|
+
adaptive_strictness: z28.boolean(),
|
|
24450
|
+
proactive_linking: z28.boolean(),
|
|
24451
|
+
proactive_min_score: z28.number(),
|
|
24452
|
+
proactive_max_per_file: z28.number(),
|
|
24453
|
+
proactive_max_per_day: z28.number(),
|
|
24454
|
+
tool_tier_override: z28.enum(["auto", "full", "minimal"]),
|
|
24455
|
+
custom_categories: z28.record(z28.string(), z28.object({
|
|
24456
|
+
type_boost: z28.number().optional()
|
|
24411
24457
|
}))
|
|
24412
24458
|
};
|
|
24413
24459
|
function registerConfigTools(server2, getConfig2, setConfig, getStateDb4) {
|
|
@@ -24417,9 +24463,9 @@ function registerConfigTools(server2, getConfig2, setConfig, getStateDb4) {
|
|
|
24417
24463
|
title: "Flywheel Config",
|
|
24418
24464
|
description: "Use when reading or changing Flywheel runtime configuration. Produces the current config state or applies a single key update. Returns the full or updated FlywheelConfig object. Does not restart the server \u2014 config changes take effect immediately.",
|
|
24419
24465
|
inputSchema: {
|
|
24420
|
-
mode:
|
|
24421
|
-
key:
|
|
24422
|
-
value:
|
|
24466
|
+
mode: z28.enum(["get", "set"]).describe("Operation mode"),
|
|
24467
|
+
key: z28.string().optional().describe("Config key to update (required for set mode)"),
|
|
24468
|
+
value: z28.unknown().optional().describe("New value for the key (required for set mode)")
|
|
24423
24469
|
}
|
|
24424
24470
|
},
|
|
24425
24471
|
async ({ mode, key, value }) => {
|
|
@@ -24475,7 +24521,7 @@ function registerConfigTools(server2, getConfig2, setConfig, getStateDb4) {
|
|
|
24475
24521
|
// src/tools/write/enrich.ts
|
|
24476
24522
|
init_wikilinks();
|
|
24477
24523
|
init_wikilinkFeedback();
|
|
24478
|
-
import { z as
|
|
24524
|
+
import { z as z29 } from "zod";
|
|
24479
24525
|
import * as fs33 from "fs/promises";
|
|
24480
24526
|
import * as path37 from "path";
|
|
24481
24527
|
import { scanVaultEntities as scanVaultEntities4, SCHEMA_VERSION as SCHEMA_VERSION2 } from "@velvetmonkey/vault-core";
|
|
@@ -24780,10 +24826,10 @@ function registerInitTools(server2, getVaultPath, getStateDb4) {
|
|
|
24780
24826
|
"vault_init",
|
|
24781
24827
|
"Use when setting up a vault for Flywheel for the first time. Produces initialization steps for missing config, folders, and templates. Returns status of each init step or executes missing ones. Does not overwrite existing configuration \u2014 safe to run on already-initialized vaults.",
|
|
24782
24828
|
{
|
|
24783
|
-
mode:
|
|
24784
|
-
dry_run:
|
|
24785
|
-
batch_size:
|
|
24786
|
-
offset:
|
|
24829
|
+
mode: z29.enum(["status", "run", "enrich"]).default("status").describe("Operation mode (default: status)"),
|
|
24830
|
+
dry_run: z29.boolean().default(true).describe("For enrich mode: preview without modifying files (default: true)"),
|
|
24831
|
+
batch_size: z29.number().default(50).describe("For enrich mode: max notes per invocation (default: 50)"),
|
|
24832
|
+
offset: z29.number().default(0).describe("For enrich mode: skip this many eligible notes (for pagination)")
|
|
24787
24833
|
},
|
|
24788
24834
|
async ({ mode, dry_run, batch_size, offset }) => {
|
|
24789
24835
|
const stateDb2 = getStateDb4();
|
|
@@ -24810,7 +24856,7 @@ function registerInitTools(server2, getVaultPath, getStateDb4) {
|
|
|
24810
24856
|
}
|
|
24811
24857
|
|
|
24812
24858
|
// src/tools/read/metrics.ts
|
|
24813
|
-
import { z as
|
|
24859
|
+
import { z as z30 } from "zod";
|
|
24814
24860
|
function registerMetricsTools(server2, getIndex, getStateDb4) {
|
|
24815
24861
|
server2.registerTool(
|
|
24816
24862
|
"vault_growth",
|
|
@@ -24818,10 +24864,10 @@ function registerMetricsTools(server2, getIndex, getStateDb4) {
|
|
|
24818
24864
|
title: "Vault Growth",
|
|
24819
24865
|
description: "Use when tracking how the vault is growing over time. Produces vault metrics in current, history, trends, or index activity modes. Returns numeric growth data with time-series comparisons. Does not modify vault content \u2014 measures and records metric snapshots only.",
|
|
24820
24866
|
inputSchema: {
|
|
24821
|
-
mode:
|
|
24822
|
-
metric:
|
|
24823
|
-
days_back:
|
|
24824
|
-
limit:
|
|
24867
|
+
mode: z30.enum(["current", "history", "trends", "index_activity"]).describe("Query mode: current snapshot, historical time series, trend analysis, or index rebuild activity"),
|
|
24868
|
+
metric: z30.string().optional().describe('Filter to specific metric (e.g., "note_count"). Omit for all metrics.'),
|
|
24869
|
+
days_back: z30.number().optional().describe("Number of days to look back for history/trends (default: 30)"),
|
|
24870
|
+
limit: z30.number().optional().describe("Number of recent events to return for index_activity mode (default: 20)")
|
|
24825
24871
|
}
|
|
24826
24872
|
},
|
|
24827
24873
|
async ({ mode, metric, days_back, limit: eventLimit }) => {
|
|
@@ -24919,7 +24965,7 @@ function registerMetricsTools(server2, getIndex, getStateDb4) {
|
|
|
24919
24965
|
}
|
|
24920
24966
|
|
|
24921
24967
|
// src/tools/read/similarity.ts
|
|
24922
|
-
import { z as
|
|
24968
|
+
import { z as z31 } from "zod";
|
|
24923
24969
|
|
|
24924
24970
|
// src/core/read/similarity.ts
|
|
24925
24971
|
import * as fs34 from "fs";
|
|
@@ -25130,9 +25176,9 @@ function registerSimilarityTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
25130
25176
|
title: "Find Similar Notes",
|
|
25131
25177
|
description: "Use when finding notes related to a specific note by content overlap. Produces a ranked list of similar notes using FTS5 keyword matching and optional semantic similarity. Returns note paths with similarity scores and shared terms. Does not search by arbitrary query text \u2014 use search for free-text queries.",
|
|
25132
25178
|
inputSchema: {
|
|
25133
|
-
path:
|
|
25134
|
-
limit:
|
|
25135
|
-
diversity:
|
|
25179
|
+
path: z31.string().describe('Path to the source note (relative to vault root, e.g. "projects/alpha.md")'),
|
|
25180
|
+
limit: z31.number().optional().describe("Maximum number of similar notes to return (default: 10)"),
|
|
25181
|
+
diversity: z31.number().min(0).max(1).optional().describe("Relevance vs diversity tradeoff (0=max diversity, 1=pure relevance, default: 0.7)")
|
|
25136
25182
|
}
|
|
25137
25183
|
},
|
|
25138
25184
|
async ({ path: path41, limit, diversity }) => {
|
|
@@ -25177,7 +25223,7 @@ function registerSimilarityTools(server2, getIndex, getVaultPath, getStateDb4) {
|
|
|
25177
25223
|
|
|
25178
25224
|
// src/tools/read/semantic.ts
|
|
25179
25225
|
init_embeddings();
|
|
25180
|
-
import { z as
|
|
25226
|
+
import { z as z32 } from "zod";
|
|
25181
25227
|
import { getAllEntitiesFromDb as getAllEntitiesFromDb4 } from "@velvetmonkey/vault-core";
|
|
25182
25228
|
function registerSemanticTools(server2, getVaultPath, getStateDb4) {
|
|
25183
25229
|
server2.registerTool(
|
|
@@ -25186,7 +25232,7 @@ function registerSemanticTools(server2, getVaultPath, getStateDb4) {
|
|
|
25186
25232
|
title: "Initialize Semantic Search",
|
|
25187
25233
|
description: "Run once to build vector embeddings for hybrid search. Produces an embedding index over all notes and entities. Returns embedding count and build duration. Does not run automatically \u2014 must be invoked explicitly. After building, search and find_similar automatically use semantic matching alongside BM25.",
|
|
25188
25234
|
inputSchema: {
|
|
25189
|
-
force:
|
|
25235
|
+
force: z32.boolean().optional().describe(
|
|
25190
25236
|
"Clear and rebuild all embeddings from scratch (default: false)"
|
|
25191
25237
|
)
|
|
25192
25238
|
}
|
|
@@ -25304,7 +25350,7 @@ function registerSemanticTools(server2, getVaultPath, getStateDb4) {
|
|
|
25304
25350
|
|
|
25305
25351
|
// src/tools/read/merges.ts
|
|
25306
25352
|
init_levenshtein();
|
|
25307
|
-
import { z as
|
|
25353
|
+
import { z as z33 } from "zod";
|
|
25308
25354
|
import { getAllEntitiesFromDb as getAllEntitiesFromDb5, getDismissedMergePairs, recordMergeDismissal } from "@velvetmonkey/vault-core";
|
|
25309
25355
|
function normalizeName(name) {
|
|
25310
25356
|
return name.toLowerCase().replace(/[.\-_]/g, "").replace(/js$/, "").replace(/ts$/, "");
|
|
@@ -25314,7 +25360,7 @@ function registerMergeTools2(server2, getStateDb4) {
|
|
|
25314
25360
|
"suggest_entity_merges",
|
|
25315
25361
|
"Use when finding potential duplicate entities that could be consolidated. Produces merge candidates based on name similarity and overlapping references. Returns entity pairs with similarity scores. Does not merge \u2014 use merge_entities to execute.",
|
|
25316
25362
|
{
|
|
25317
|
-
limit:
|
|
25363
|
+
limit: z33.number().optional().default(50).describe("Maximum number of suggestions to return")
|
|
25318
25364
|
},
|
|
25319
25365
|
async ({ limit }) => {
|
|
25320
25366
|
const stateDb2 = getStateDb4();
|
|
@@ -25416,11 +25462,11 @@ function registerMergeTools2(server2, getStateDb4) {
|
|
|
25416
25462
|
"dismiss_merge_suggestion",
|
|
25417
25463
|
"Use when a suggested entity merge is incorrect and should never reappear. Produces a permanent dismissal record for the specified entity pair. Returns dismissal confirmation. Does not undo a completed merge.",
|
|
25418
25464
|
{
|
|
25419
|
-
source_path:
|
|
25420
|
-
target_path:
|
|
25421
|
-
source_name:
|
|
25422
|
-
target_name:
|
|
25423
|
-
reason:
|
|
25465
|
+
source_path: z33.string().describe("Path of the source entity"),
|
|
25466
|
+
target_path: z33.string().describe("Path of the target entity"),
|
|
25467
|
+
source_name: z33.string().describe("Name of the source entity"),
|
|
25468
|
+
target_name: z33.string().describe("Name of the target entity"),
|
|
25469
|
+
reason: z33.string().describe("Original suggestion reason")
|
|
25424
25470
|
},
|
|
25425
25471
|
async ({ source_path, target_path, source_name, target_name, reason }) => {
|
|
25426
25472
|
const stateDb2 = getStateDb4();
|
|
@@ -25439,7 +25485,7 @@ function registerMergeTools2(server2, getStateDb4) {
|
|
|
25439
25485
|
}
|
|
25440
25486
|
|
|
25441
25487
|
// src/tools/read/temporalAnalysis.ts
|
|
25442
|
-
import { z as
|
|
25488
|
+
import { z as z34 } from "zod";
|
|
25443
25489
|
init_wikilinks();
|
|
25444
25490
|
function formatDate3(d) {
|
|
25445
25491
|
return d.toISOString().split("T")[0];
|
|
@@ -25965,9 +26011,9 @@ function registerTemporalAnalysisTools(server2, getIndex, getVaultPath, getState
|
|
|
25965
26011
|
title: "Context Around Date",
|
|
25966
26012
|
description: 'Use when exploring what was happening around a specific date. Produces a snapshot of notes modified, notes created, and entities active within a time window. Returns dated context with note paths and entity names. Answers: "What was going on in the vault last Tuesday?" Use track_concept_evolution mode=summary for a composed narrative digest of a date range.',
|
|
25967
26013
|
inputSchema: {
|
|
25968
|
-
date:
|
|
25969
|
-
window_days:
|
|
25970
|
-
limit:
|
|
26014
|
+
date: z34.string().describe("Center date in YYYY-MM-DD format"),
|
|
26015
|
+
window_days: z34.coerce.number().default(3).describe("Days before and after the center date (default 3 = 7-day window)"),
|
|
26016
|
+
limit: z34.coerce.number().default(50).describe("Maximum number of notes to return")
|
|
25971
26017
|
}
|
|
25972
26018
|
},
|
|
25973
26019
|
async ({ date, window_days, limit: requestedLimit }) => {
|
|
@@ -25982,12 +26028,12 @@ function registerTemporalAnalysisTools(server2, getIndex, getVaultPath, getState
|
|
|
25982
26028
|
title: "Predict Stale Notes",
|
|
25983
26029
|
description: "Use when finding notes that need attention based on importance and age. Produces a prioritized list scoring notes by backlinks, hub score, tasks, and staleness risk. Returns ranked note entries with action recommendations (archive, update, review). Does not modify notes \u2014 only identifies candidates.",
|
|
25984
26030
|
inputSchema: {
|
|
25985
|
-
days:
|
|
25986
|
-
min_importance:
|
|
25987
|
-
include_recommendations:
|
|
25988
|
-
folder:
|
|
25989
|
-
limit:
|
|
25990
|
-
offset:
|
|
26031
|
+
days: z34.coerce.number().default(30).describe("Notes not modified in this many days (default 30)"),
|
|
26032
|
+
min_importance: z34.coerce.number().default(0).describe("Filter by minimum importance score 0-100 (default 0)"),
|
|
26033
|
+
include_recommendations: z34.boolean().default(true).describe("Include action recommendations (default true)"),
|
|
26034
|
+
folder: z34.string().optional().describe("Limit to notes in this folder"),
|
|
26035
|
+
limit: z34.coerce.number().default(30).describe("Maximum results to return (default 30)"),
|
|
26036
|
+
offset: z34.coerce.number().default(0).describe("Results to skip for pagination (default 0)")
|
|
25991
26037
|
}
|
|
25992
26038
|
},
|
|
25993
26039
|
async ({ days, min_importance, include_recommendations, folder, limit: requestedLimit, offset }) => {
|
|
@@ -26011,14 +26057,14 @@ function registerTemporalAnalysisTools(server2, getIndex, getVaultPath, getState
|
|
|
26011
26057
|
title: "Track Concept Evolution",
|
|
26012
26058
|
description: 'Use when tracing how an entity changed over time, or when reviewing vault activity for a period. Mode "evolution" (default) produces a timeline of link additions, removals, feedback events, category changes, and co-occurrence shifts for a single entity. Mode "summary" produces a composed digest of context, staleness predictions, and concept evolution for a date range. Returns chronological evolution entries or a composed period digest. Does not modify notes \u2014 only reads historical data.',
|
|
26013
26059
|
inputSchema: {
|
|
26014
|
-
mode:
|
|
26015
|
-
entity:
|
|
26016
|
-
days_back:
|
|
26017
|
-
include_cooccurrence:
|
|
26018
|
-
start_date:
|
|
26019
|
-
end_date:
|
|
26020
|
-
focus_entities:
|
|
26021
|
-
limit:
|
|
26060
|
+
mode: z34.enum(["evolution", "summary"]).default("evolution").describe('Mode: "evolution" traces one entity over time (requires entity); "summary" digests a date range (requires start_date and end_date)'),
|
|
26061
|
+
entity: z34.string().optional().describe("Entity name (case-insensitive). Required for mode=evolution."),
|
|
26062
|
+
days_back: z34.coerce.number().default(90).describe("How far back to look (default 90 days). Used in mode=evolution."),
|
|
26063
|
+
include_cooccurrence: z34.boolean().default(true).describe("Include co-occurrence neighbors (default true). Used in mode=evolution."),
|
|
26064
|
+
start_date: z34.string().optional().describe("Start of period in YYYY-MM-DD format. Required for mode=summary."),
|
|
26065
|
+
end_date: z34.string().optional().describe("End of period in YYYY-MM-DD format. Required for mode=summary."),
|
|
26066
|
+
focus_entities: z34.array(z34.string()).optional().describe("Specific entities to track evolution for in summary mode (default: top 5 active entities in period)"),
|
|
26067
|
+
limit: z34.coerce.number().default(50).describe("Maximum notes to include in context snapshot (mode=summary)")
|
|
26022
26068
|
}
|
|
26023
26069
|
},
|
|
26024
26070
|
async ({ mode, entity, days_back, include_cooccurrence, start_date, end_date, focus_entities, limit: requestedLimit }) => {
|
|
@@ -26061,17 +26107,17 @@ function registerTemporalAnalysisTools(server2, getIndex, getVaultPath, getState
|
|
|
26061
26107
|
}
|
|
26062
26108
|
|
|
26063
26109
|
// src/tools/read/sessionHistory.ts
|
|
26064
|
-
import { z as
|
|
26110
|
+
import { z as z35 } from "zod";
|
|
26065
26111
|
function registerSessionHistoryTools(server2, getStateDb4, getSessionId2) {
|
|
26066
26112
|
server2.tool(
|
|
26067
26113
|
"vault_session_history",
|
|
26068
26114
|
'Use when reviewing past agent sessions, checking tool usage, or inspecting note access patterns. Mode "sessions" (default) lists recent sessions or shows detail for one session. Mode "note_access" shows which notes were accessed most. Mode "tool_usage" shows tool invocation frequency. Mode "proactive_linking" shows background wikilink applications. Returns session listings, note access records, tool usage stats, or proactive linking data. Does not modify any records \u2014 read-only access.',
|
|
26069
26115
|
{
|
|
26070
|
-
mode:
|
|
26071
|
-
session_id:
|
|
26072
|
-
include_children:
|
|
26073
|
-
days_back:
|
|
26074
|
-
limit:
|
|
26116
|
+
mode: z35.enum(["sessions", "note_access", "tool_usage", "proactive_linking"]).default("sessions").describe("Activity query mode (default: sessions)"),
|
|
26117
|
+
session_id: z35.string().optional().describe("Session ID for detail view (mode=sessions). Omit for recent sessions list. Defaults to current session if mode needs it."),
|
|
26118
|
+
include_children: z35.boolean().optional().describe("Include child sessions in detail view (default: true). Used in mode=sessions."),
|
|
26119
|
+
days_back: z35.number().optional().describe("Number of days to look back (default: 30). Used in note_access, tool_usage, proactive_linking modes."),
|
|
26120
|
+
limit: z35.number().min(1).max(500).optional().describe("Maximum results to return (default: 20)")
|
|
26075
26121
|
},
|
|
26076
26122
|
async (args) => {
|
|
26077
26123
|
const stateDb2 = getStateDb4();
|
|
@@ -26166,7 +26212,7 @@ function registerSessionHistoryTools(server2, getStateDb4, getSessionId2) {
|
|
|
26166
26212
|
}
|
|
26167
26213
|
|
|
26168
26214
|
// src/tools/read/entityHistory.ts
|
|
26169
|
-
import { z as
|
|
26215
|
+
import { z as z36 } from "zod";
|
|
26170
26216
|
|
|
26171
26217
|
// src/core/read/entityHistory.ts
|
|
26172
26218
|
function normalizeTimestamp(ts) {
|
|
@@ -26324,8 +26370,8 @@ function registerEntityHistoryTools(server2, getStateDb4) {
|
|
|
26324
26370
|
"vault_entity_history",
|
|
26325
26371
|
"Use when tracing the full history of a specific entity. Produces a unified timeline of link events, feedback, suggestion scores, and edge weight changes. Returns chronological entity events with timestamps. Does not modify the entity \u2014 read-only historical data.",
|
|
26326
26372
|
{
|
|
26327
|
-
entity_name:
|
|
26328
|
-
event_types:
|
|
26373
|
+
entity_name: z36.string().describe("Entity name to query (case-insensitive)"),
|
|
26374
|
+
event_types: z36.array(z36.enum([
|
|
26329
26375
|
"application",
|
|
26330
26376
|
"feedback",
|
|
26331
26377
|
"suggestion",
|
|
@@ -26334,10 +26380,10 @@ function registerEntityHistoryTools(server2, getStateDb4) {
|
|
|
26334
26380
|
"memory",
|
|
26335
26381
|
"correction"
|
|
26336
26382
|
])).optional().describe("Filter to specific event types. Omit for all types."),
|
|
26337
|
-
start_date:
|
|
26338
|
-
end_date:
|
|
26339
|
-
limit:
|
|
26340
|
-
offset:
|
|
26383
|
+
start_date: z36.string().optional().describe("Start date (YYYY-MM-DD) for date range filter"),
|
|
26384
|
+
end_date: z36.string().optional().describe("End date (YYYY-MM-DD) for date range filter"),
|
|
26385
|
+
limit: z36.number().min(1).max(200).optional().describe("Max events to return (default: 50)"),
|
|
26386
|
+
offset: z36.number().min(0).optional().describe("Offset for pagination (default: 0)")
|
|
26341
26387
|
},
|
|
26342
26388
|
async (args) => {
|
|
26343
26389
|
const stateDb2 = getStateDb4();
|
|
@@ -26369,7 +26415,7 @@ function registerEntityHistoryTools(server2, getStateDb4) {
|
|
|
26369
26415
|
}
|
|
26370
26416
|
|
|
26371
26417
|
// src/tools/read/learningReport.ts
|
|
26372
|
-
import { z as
|
|
26418
|
+
import { z as z37 } from "zod";
|
|
26373
26419
|
|
|
26374
26420
|
// src/core/read/learningReport.ts
|
|
26375
26421
|
function isoDate(d) {
|
|
@@ -26528,8 +26574,8 @@ function registerLearningReportTools(server2, getIndex, getStateDb4) {
|
|
|
26528
26574
|
"flywheel_learning_report",
|
|
26529
26575
|
"Use when assessing the auto-linking learning system effectiveness. Produces a narrative report of applications by day, feedback ratios, accuracy trends, and per-entity performance. Returns learning progress metrics and trend analysis. Does not modify scoring weights \u2014 read-only reporting.",
|
|
26530
26576
|
{
|
|
26531
|
-
days_back:
|
|
26532
|
-
compare:
|
|
26577
|
+
days_back: z37.number().min(1).max(365).optional().describe("Analysis window in days (default: 7). Use 1 for today, 2 for last 48h, etc."),
|
|
26578
|
+
compare: z37.boolean().optional().describe("Include comparison with the preceding equal-length period (default: false)")
|
|
26533
26579
|
},
|
|
26534
26580
|
async (args) => {
|
|
26535
26581
|
const stateDb2 = getStateDb4();
|
|
@@ -26556,7 +26602,7 @@ function registerLearningReportTools(server2, getIndex, getStateDb4) {
|
|
|
26556
26602
|
}
|
|
26557
26603
|
|
|
26558
26604
|
// src/tools/read/calibrationExport.ts
|
|
26559
|
-
import { z as
|
|
26605
|
+
import { z as z38 } from "zod";
|
|
26560
26606
|
|
|
26561
26607
|
// src/core/read/calibrationExport.ts
|
|
26562
26608
|
init_wikilinkFeedback();
|
|
@@ -26851,8 +26897,8 @@ function registerCalibrationExportTools(server2, getIndex, getStateDb4, getConfi
|
|
|
26851
26897
|
"flywheel_calibration_export",
|
|
26852
26898
|
"Use when exporting scoring data for cross-vault algorithm calibration. Produces anonymized aggregate statistics with no entity names, note paths, or content. Returns calibration metrics for external analysis. Does not expose vault content \u2014 fully anonymized output only.",
|
|
26853
26899
|
{
|
|
26854
|
-
days_back:
|
|
26855
|
-
include_vault_id:
|
|
26900
|
+
days_back: z38.number().min(1).max(365).optional().describe("Analysis window in days (default: 30)"),
|
|
26901
|
+
include_vault_id: z38.boolean().optional().describe("Include anonymous vault ID for longitudinal tracking (default: true)")
|
|
26856
26902
|
},
|
|
26857
26903
|
async (args) => {
|
|
26858
26904
|
const stateDb2 = getStateDb4();
|
|
@@ -26880,7 +26926,7 @@ function registerCalibrationExportTools(server2, getIndex, getStateDb4, getConfi
|
|
|
26880
26926
|
}
|
|
26881
26927
|
|
|
26882
26928
|
// src/tools/read/discovery.ts
|
|
26883
|
-
import { z as
|
|
26929
|
+
import { z as z39 } from "zod";
|
|
26884
26930
|
import { normalizeObjectSchema } from "@modelcontextprotocol/sdk/server/zod-compat.js";
|
|
26885
26931
|
import { toJsonSchemaCompat } from "@modelcontextprotocol/sdk/server/zod-json-schema-compat.js";
|
|
26886
26932
|
function toJsonSchema(inputSchema) {
|
|
@@ -26893,7 +26939,7 @@ function registerDiscoveryTools(server2, controller) {
|
|
|
26893
26939
|
"discover_tools",
|
|
26894
26940
|
'Find and activate specialized tools. Call with what you need \u2014 e.g. "vault health", "graph connections", "schema migration". Returns matching tool names, descriptions, and input schemas. Does not execute discovered tools \u2014 call them separately after discovery.',
|
|
26895
26941
|
{
|
|
26896
|
-
query:
|
|
26942
|
+
query: z39.string().describe(
|
|
26897
26943
|
'Natural language description of what you need \u2014 e.g. "vault health", "backlinks and graph", "schema migration"'
|
|
26898
26944
|
)
|
|
26899
26945
|
},
|
|
@@ -27359,7 +27405,7 @@ function applyToolGating(targetServer, categories, getDb4, registry, getVaultPat
|
|
|
27359
27405
|
if (params && "vault" in params) {
|
|
27360
27406
|
delete params.vault;
|
|
27361
27407
|
}
|
|
27362
|
-
if (toolName === "search" && !vaultName) {
|
|
27408
|
+
if ((toolName === "search" || toolName === "find_notes") && !vaultName) {
|
|
27363
27409
|
return crossVaultSearch(registry, vaultCallbacks, handler, args);
|
|
27364
27410
|
}
|
|
27365
27411
|
const ctx = registry.getContext(vaultName);
|
|
@@ -27454,7 +27500,7 @@ function applyToolGating(targetServer, categories, getDb4, registry, getVaultPat
|
|
|
27454
27500
|
const schemaIdx = handlerIdx - 1;
|
|
27455
27501
|
const schema = args[schemaIdx];
|
|
27456
27502
|
if (schema && typeof schema === "object" && !Array.isArray(schema)) {
|
|
27457
|
-
schema.vault =
|
|
27503
|
+
schema.vault = z40.string().optional().describe(
|
|
27458
27504
|
`Vault name for multi-vault mode. Available: ${registry.getVaultNames().join(", ")}. Default: ${registry.primaryName}`
|
|
27459
27505
|
);
|
|
27460
27506
|
}
|
|
@@ -27590,6 +27636,7 @@ function registerAllTools(targetServer, ctx, controller) {
|
|
|
27590
27636
|
);
|
|
27591
27637
|
registerWikilinkTools(targetServer, gvi, gvp, gsd);
|
|
27592
27638
|
registerQueryTools(targetServer, gvi, gvp, gsd);
|
|
27639
|
+
registerFindNotesTools(targetServer, gvi, gsd);
|
|
27593
27640
|
registerPrimitiveTools(targetServer, gvi, gvp, gcf, gsd);
|
|
27594
27641
|
registerGraphTools(targetServer, gvi, gvp, gsd);
|
|
27595
27642
|
registerGraphAnalysisTools(targetServer, gvi, gvp, gsd, gcf);
|