sensemaking 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/README.md +33 -5
  2. package/dist/cjs/cli/download.js +12 -11
  3. package/dist/cjs/cli/download.js.map +1 -1
  4. package/dist/cjs/cli/index.d.cts +1 -1
  5. package/dist/cjs/cli/index.d.ts +1 -1
  6. package/dist/cjs/cli/index.js +1 -1
  7. package/dist/cjs/cli/index.js.map +1 -1
  8. package/dist/cjs/cli/init.js +31 -5
  9. package/dist/cjs/cli/init.js.map +1 -1
  10. package/dist/cjs/cli/status.js +343 -99
  11. package/dist/cjs/cli/status.js.map +1 -1
  12. package/dist/cjs/commands/related.js +17 -13
  13. package/dist/cjs/commands/related.js.map +1 -1
  14. package/dist/cjs/commands/search.js +25 -96
  15. package/dist/cjs/commands/search.js.map +1 -1
  16. package/dist/cjs/commands/signals.d.cts +18 -0
  17. package/dist/cjs/commands/signals.d.ts +18 -0
  18. package/dist/cjs/commands/signals.js +299 -0
  19. package/dist/cjs/commands/signals.js.map +1 -0
  20. package/dist/cjs/commands/status.d.cts +2 -2
  21. package/dist/cjs/commands/status.d.ts +2 -2
  22. package/dist/cjs/commands/status.js +1 -1
  23. package/dist/cjs/commands/status.js.map +1 -1
  24. package/dist/cjs/config/access.d.cts +5 -2
  25. package/dist/cjs/config/access.d.ts +5 -2
  26. package/dist/cjs/config/access.js +30 -12
  27. package/dist/cjs/config/access.js.map +1 -1
  28. package/dist/cjs/config/index.d.cts +4 -1
  29. package/dist/cjs/config/index.d.ts +4 -1
  30. package/dist/cjs/config/index.js +12 -2
  31. package/dist/cjs/config/index.js.map +1 -1
  32. package/dist/cjs/config/load.d.cts +6 -1
  33. package/dist/cjs/config/load.d.ts +6 -1
  34. package/dist/cjs/config/load.js +83 -8
  35. package/dist/cjs/config/load.js.map +1 -1
  36. package/dist/cjs/config/resolve.js +1 -1
  37. package/dist/cjs/config/resolve.js.map +1 -1
  38. package/dist/cjs/config/signals.d.cts +4 -0
  39. package/dist/cjs/config/signals.d.ts +4 -0
  40. package/dist/cjs/config/signals.js +30 -0
  41. package/dist/cjs/config/signals.js.map +1 -0
  42. package/dist/cjs/config/types.d.cts +6 -4
  43. package/dist/cjs/config/types.d.ts +6 -4
  44. package/dist/cjs/config/types.js +1 -1
  45. package/dist/cjs/config/types.js.map +1 -1
  46. package/dist/cjs/config/validate.js +120 -11
  47. package/dist/cjs/config/validate.js.map +1 -1
  48. package/dist/cjs/db/open.d.cts +1 -1
  49. package/dist/cjs/db/open.d.ts +1 -1
  50. package/dist/cjs/db/open.js +6 -1
  51. package/dist/cjs/db/open.js.map +1 -1
  52. package/dist/cjs/db/reconcile.d.cts +1 -0
  53. package/dist/cjs/db/reconcile.d.ts +1 -0
  54. package/dist/cjs/db/reconcile.js +15 -0
  55. package/dist/cjs/db/reconcile.js.map +1 -1
  56. package/dist/cjs/embed/cohere.d.cts +2 -0
  57. package/dist/cjs/embed/cohere.d.ts +2 -0
  58. package/dist/cjs/embed/cohere.js +238 -0
  59. package/dist/cjs/embed/cohere.js.map +1 -0
  60. package/dist/cjs/embed/http.d.cts +2 -0
  61. package/dist/cjs/embed/http.d.ts +2 -0
  62. package/dist/cjs/embed/http.js +258 -0
  63. package/dist/cjs/embed/http.js.map +1 -0
  64. package/dist/cjs/embed/identity.d.cts +13 -0
  65. package/dist/cjs/embed/identity.d.ts +13 -0
  66. package/dist/cjs/embed/identity.js +194 -0
  67. package/dist/cjs/embed/identity.js.map +1 -0
  68. package/dist/cjs/embed/langfit.d.cts +6 -0
  69. package/dist/cjs/embed/langfit.d.ts +6 -0
  70. package/dist/cjs/embed/langfit.js +326 -0
  71. package/dist/cjs/embed/langfit.js.map +1 -0
  72. package/dist/cjs/embed/languages.d.cts +3 -0
  73. package/dist/cjs/embed/languages.d.ts +3 -0
  74. package/dist/cjs/embed/languages.js +98 -0
  75. package/dist/cjs/embed/languages.js.map +1 -0
  76. package/dist/cjs/embed/openai.d.cts +2 -0
  77. package/dist/cjs/embed/openai.d.ts +2 -0
  78. package/dist/cjs/embed/openai.js +268 -0
  79. package/dist/cjs/embed/openai.js.map +1 -0
  80. package/dist/cjs/embed/query.d.cts +21 -0
  81. package/dist/cjs/embed/query.d.ts +21 -0
  82. package/dist/cjs/embed/query.js +610 -0
  83. package/dist/cjs/embed/query.js.map +1 -0
  84. package/dist/cjs/embed/registry.d.cts +3 -0
  85. package/dist/cjs/embed/registry.d.ts +3 -0
  86. package/dist/cjs/embed/registry.js +114 -0
  87. package/dist/cjs/embed/registry.js.map +1 -0
  88. package/dist/cjs/embed/static.d.cts +2 -0
  89. package/dist/cjs/embed/static.d.ts +2 -0
  90. package/dist/cjs/embed/static.js +367 -0
  91. package/dist/cjs/embed/static.js.map +1 -0
  92. package/dist/cjs/embed/store.d.cts +8 -0
  93. package/dist/cjs/embed/store.d.ts +8 -0
  94. package/dist/cjs/embed/store.js +498 -0
  95. package/dist/cjs/embed/store.js.map +1 -0
  96. package/dist/cjs/embed/types.d.cts +8 -0
  97. package/dist/cjs/embed/types.d.ts +8 -0
  98. package/dist/cjs/embed/types.js +7 -0
  99. package/dist/cjs/embed/types.js.map +1 -0
  100. package/dist/cjs/errors.d.cts +1 -1
  101. package/dist/cjs/errors.d.ts +1 -1
  102. package/dist/cjs/errors.js.map +1 -1
  103. package/dist/cjs/features/embed.d.cts +4 -27
  104. package/dist/cjs/features/embed.d.ts +4 -27
  105. package/dist/cjs/features/embed.js +3 -969
  106. package/dist/cjs/features/embed.js.map +1 -1
  107. package/dist/cjs/index.d.cts +1 -1
  108. package/dist/cjs/index.d.ts +1 -1
  109. package/dist/cjs/index.js.map +1 -1
  110. package/dist/cjs/output.d.cts +2 -2
  111. package/dist/cjs/output.d.ts +2 -2
  112. package/dist/cjs/output.js +9 -2
  113. package/dist/cjs/output.js.map +1 -1
  114. package/dist/cjs/scan.js +8 -5
  115. package/dist/cjs/scan.js.map +1 -1
  116. package/dist/cjs/segment.js +67 -14
  117. package/dist/cjs/segment.js.map +1 -1
  118. package/dist/esm/cli/download.js +9 -8
  119. package/dist/esm/cli/download.js.map +1 -1
  120. package/dist/esm/cli/index.d.ts +1 -1
  121. package/dist/esm/cli/index.js +1 -1
  122. package/dist/esm/cli/index.js.map +1 -1
  123. package/dist/esm/cli/init.js +32 -6
  124. package/dist/esm/cli/init.js.map +1 -1
  125. package/dist/esm/cli/status.js +36 -8
  126. package/dist/esm/cli/status.js.map +1 -1
  127. package/dist/esm/commands/related.js +14 -10
  128. package/dist/esm/commands/related.js.map +1 -1
  129. package/dist/esm/commands/search.js +27 -78
  130. package/dist/esm/commands/search.js.map +1 -1
  131. package/dist/esm/commands/signals.d.ts +18 -0
  132. package/dist/esm/commands/signals.js +78 -0
  133. package/dist/esm/commands/signals.js.map +1 -0
  134. package/dist/esm/commands/status.d.ts +2 -2
  135. package/dist/esm/commands/status.js +2 -2
  136. package/dist/esm/commands/status.js.map +1 -1
  137. package/dist/esm/config/access.d.ts +5 -2
  138. package/dist/esm/config/access.js +31 -12
  139. package/dist/esm/config/access.js.map +1 -1
  140. package/dist/esm/config/index.d.ts +4 -1
  141. package/dist/esm/config/index.js +2 -1
  142. package/dist/esm/config/index.js.map +1 -1
  143. package/dist/esm/config/load.d.ts +6 -1
  144. package/dist/esm/config/load.js +67 -9
  145. package/dist/esm/config/load.js.map +1 -1
  146. package/dist/esm/config/resolve.js +2 -2
  147. package/dist/esm/config/resolve.js.map +1 -1
  148. package/dist/esm/config/signals.d.ts +4 -0
  149. package/dist/esm/config/signals.js +14 -0
  150. package/dist/esm/config/signals.js.map +1 -0
  151. package/dist/esm/config/types.d.ts +6 -4
  152. package/dist/esm/config/types.js +1 -1
  153. package/dist/esm/config/types.js.map +1 -1
  154. package/dist/esm/config/validate.js +58 -11
  155. package/dist/esm/config/validate.js.map +1 -1
  156. package/dist/esm/db/open.d.ts +1 -1
  157. package/dist/esm/db/open.js +7 -2
  158. package/dist/esm/db/open.js.map +1 -1
  159. package/dist/esm/db/reconcile.d.ts +1 -0
  160. package/dist/esm/db/reconcile.js +10 -0
  161. package/dist/esm/db/reconcile.js.map +1 -1
  162. package/dist/esm/embed/cohere.d.ts +2 -0
  163. package/dist/esm/embed/cohere.js +46 -0
  164. package/dist/esm/embed/cohere.js.map +1 -0
  165. package/dist/esm/embed/http.d.ts +2 -0
  166. package/dist/esm/embed/http.js +33 -0
  167. package/dist/esm/embed/http.js.map +1 -0
  168. package/dist/esm/embed/identity.d.ts +13 -0
  169. package/dist/esm/embed/identity.js +92 -0
  170. package/dist/esm/embed/identity.js.map +1 -0
  171. package/dist/esm/embed/langfit.d.ts +6 -0
  172. package/dist/esm/embed/langfit.js +44 -0
  173. package/dist/esm/embed/langfit.js.map +1 -0
  174. package/dist/esm/embed/languages.d.ts +3 -0
  175. package/dist/esm/embed/languages.js +80 -0
  176. package/dist/esm/embed/languages.js.map +1 -0
  177. package/dist/esm/embed/openai.d.ts +2 -0
  178. package/dist/esm/embed/openai.js +49 -0
  179. package/dist/esm/embed/openai.js.map +1 -0
  180. package/dist/esm/embed/query.d.ts +21 -0
  181. package/dist/esm/embed/query.js +181 -0
  182. package/dist/esm/embed/query.js.map +1 -0
  183. package/dist/esm/embed/registry.d.ts +3 -0
  184. package/dist/esm/embed/registry.js +45 -0
  185. package/dist/esm/embed/registry.js.map +1 -0
  186. package/dist/esm/embed/static.d.ts +2 -0
  187. package/dist/esm/embed/static.js +72 -0
  188. package/dist/esm/embed/static.js.map +1 -0
  189. package/dist/esm/embed/store.d.ts +8 -0
  190. package/dist/esm/embed/store.js +123 -0
  191. package/dist/esm/embed/store.js.map +1 -0
  192. package/dist/esm/embed/types.d.ts +8 -0
  193. package/dist/esm/embed/types.js +3 -0
  194. package/dist/esm/embed/types.js.map +1 -0
  195. package/dist/esm/errors.d.ts +1 -1
  196. package/dist/esm/errors.js.map +1 -1
  197. package/dist/esm/features/embed.d.ts +4 -27
  198. package/dist/esm/features/embed.js +0 -346
  199. package/dist/esm/features/embed.js.map +1 -1
  200. package/dist/esm/index.d.ts +1 -1
  201. package/dist/esm/index.js.map +1 -1
  202. package/dist/esm/output.d.ts +2 -2
  203. package/dist/esm/output.js +6 -2
  204. package/dist/esm/output.js.map +1 -1
  205. package/dist/esm/scan.js +7 -4
  206. package/dist/esm/scan.js.map +1 -1
  207. package/dist/esm/segment.js +49 -19
  208. package/dist/esm/segment.js.map +1 -1
  209. package/package.json +9 -1
  210. package/schema.json +14 -7
  211. package/skills/sense/SKILL.md +21 -5
  212. package/skills/sense-setup/EXAMPLES.md +6 -6
  213. package/skills/sense-setup/SKILL.md +6 -4
package/README.md CHANGED
@@ -74,12 +74,12 @@ ORDER BY bm25(content, 10.0, 5.0, 1.0) LIMIT 10
74
74
  ```json
75
75
  {
76
76
  "$schema": "https://unpkg.com/sensemaking/schema.json",
77
- "version": 4,
77
+ "version": 5,
78
78
  "presets": {
79
79
  "default": { "include": ["**/*.md"], "k": 10 },
80
80
  "raw": { "include": ["raw/**/*.md"], "k": 5 }
81
81
  },
82
- "embed": { "model": "minishlab/potion-retrieval-32M", "type": "static" },
82
+ "embed": { "model": "minishlab/potion-retrieval-32M", "provider": "static" },
83
83
  "queries": {
84
84
  "dead-links": { "sql": "SELECT src, target FROM links WHERE dst IS NULL" },
85
85
  "by-tag": { "sql": "SELECT path, title FROM frontmatter WHERE has(tags, ?) ORDER BY path" },
@@ -90,7 +90,7 @@ ORDER BY bm25(content, 10.0, 5.0, 1.0) LIMIT 10
90
90
 
91
91
  | key | holds |
92
92
  |---|---|
93
- | `presets` | named bundles of `include`/`exclude` globs, `k` (result count), `semantic` (vectors for this scope, on unless `false`), `where` (a standing SQL filter). A file is indexed if any preset includes it, embedded if a model is named and some covering preset has `semantic` on; `status` shows each preset's coverage. |
93
+ | `presets` | named bundles of `include`/`exclude` globs, `k` (result count), `signals` (which engines this scope searches with -- `words`, `links`, `vectors`; every signal whose prerequisites hold, unless the preset lists them exhaustively), `where` (a standing SQL filter). A file is indexed if any preset includes it, embedded if a model is named and some covering preset's `signals` include `vectors`; `status` shows each preset's coverage. |
94
94
  | `embed` | the model vectors are built with. Naming one gives the tree vectors; omitting the block means none at all, whatever the presets say. `sense download` fetches it. |
95
95
  | `content` | settings for the `content` table. `tokenize` names the FTS5 tokenizer, defaulting to `porter unicode61`: name `trigram` for substring matching inside a Latin word, or `unicode61 tokenchars '-_'` to keep hyphenated terms whole. Languages written without word spaces (Chinese, Japanese, Thai, Khmer, Lao, Burmese) need no decision here: they are indexed per grapheme and searched as ordered phrases, substring semantics, what grep gives, needing no minimum length; naming a tokenizer turns that off, since the tree has then chosen its own scheme. Changing it rebuilds the text index only; vectors, links, and sections are kept. |
96
96
  | `queries` | entries runnable as `sense <name>`, each naming the verb it runs: `{ sql }` for SQL (`?` binds positional args) or `{ search }` for a ranked search with its settings baked in, so `sense hot` needs no flags. Running an entry validates it: a typo'd column errors and exits nonzero, and a parameterised entry validates with any argument, since preparing precedes binding. |
@@ -98,10 +98,38 @@ ORDER BY bm25(content, 10.0, 5.0, 1.0) LIMIT 10
98
98
 
99
99
  Bare commands use the `default` preset; `--preset` names another; flags override single fields. Editing a preset rebuilds the cache and says which preset caused it.
100
100
 
101
- Vectors need a model, and nothing downloads it implicitly: `sense download` fetches it once per machine into `$XDG_CACHE_HOME/sensemaking/models` (or `~/.cache/...`), one directory per model, shared by every tree (124 MB, never in the package). `embed.model` is a Hugging Face id, or a path to a directory holding `model.safetensors` and `tokenizer.json`, which `sense download` leaves to you to populate. A preset that asks for vectors without the model is an error naming `sense download`, rather than a quieter result that would make the same search answer differently before and after; a `semantic: false` preset never asks, so it is unaffected. An optional top-level `"embed": { "model", "type", "url", "key" }` block points at any Model2Vec model, local path, or OpenAI-compatible endpoint (Ollama, LM Studio, hosted). Embedding the notes themselves happens on the first semantic search, with progress.
101
+ Vectors need a model. Naming a Hugging Face id in `embed.model` is consent to fetch it: it downloads lazily, on the first vector search, with progress on stderr, into `~/.sense/models` (huggingface_hub's cache layout, one snapshot directory per resolved revision, shared by every tree, 124 MB, never in the package). `sense download` prefetches the same model ahead of time, so the wait happens on your schedule instead of the first query's; it is idempotent and prints the resolved revision. `embed.model` is a Hugging Face id, or a path to a directory holding `model.safetensors` and `tokenizer.json`, which nothing fetches for you. A preset that asks for vectors when a local model path is missing those files is an error naming the fix, rather than a quieter result that would make the same search answer differently before and after; a preset whose `signals` exclude `vectors` never asks, so it is unaffected. An optional top-level `"embed": { "model", "provider", "url", "key" }` block points at any Model2Vec model, local path, or OpenAI-compatible endpoint (Ollama, LM Studio, hosted). Embedding the notes themselves happens on the first vector search, with progress.
102
102
 
103
103
  Two custom SQL functions. `has(field, value)`: array membership on JSON-array fields, substring on strings, false on missing keys. `segment(terms)`: rewrites a run of Chinese, Japanese, Thai, Khmer, Lao, or Burmese text into the ordered grapheme phrase the sidecar columns need, leaving everything else unchanged, so it is safe to add to any hand-written `MATCH`. Frontmatter parsing is lenient: syntax errors are per-file warnings, and the values are still indexed, so one bad note never costs you the crawl.
104
104
 
105
+ ## Providers
106
+
107
+ `embed.provider` picks the wire protocol; `embed.model` names the model. [INTEGRATIONS.md](INTEGRATIONS.md) is the record of what has actually been run and verified against this codebase -- only that gets named as a recommendation.
108
+
109
+ **static** -- a local, pure-JS Model2Vec model; no network at query time.
110
+
111
+ ```json
112
+ "embed": { "model": "minishlab/potion-retrieval-32M", "provider": "static" }
113
+ ```
114
+
115
+ `model` is a Hugging Face id, fetched to `~/.sense/models` on first use, or a path to a local directory holding `model.safetensors` and `tokenizer.json`.
116
+
117
+ **openai** -- any endpoint serving an OpenAI-shaped `POST /embeddings`.
118
+
119
+ ```json
120
+ "embed": { "model": "nomic-embed-text", "provider": "openai", "url": "http://localhost:11434/v1" }
121
+ ```
122
+
123
+ Ollama serves this shape at `http://localhost:11434/v1`. LM Studio serves the same shape at `http://localhost:1234/v1`, with narrower platform support than Ollama: Apple Silicon only on Mac, AVX2 on Windows. Content stays on the machine for either. Any other OpenAI-shaped endpoint, including a hosted one, works the same way through `provider: "openai"` and its own `url`; a hosted endpoint means tree content is sent to that service.
124
+
125
+ **cohere** -- Cohere's native `/v2/embed`, which expresses the doc/query distinction (`input_type`) the OpenAI shape cannot.
126
+
127
+ ```json
128
+ "embed": { "model": "embed-v4.0", "provider": "cohere", "key": "COHERE_API_KEY" }
129
+ ```
130
+
131
+ `key` names the environment variable holding the API key; the key value itself never goes in the config. Content is sent to Cohere.
132
+
105
133
  ## Scale
106
134
 
107
135
  Every query starts with a freshness check against the cache in `.sense/`; only changed files are re-parsed. What to expect as a tree grows:
@@ -136,7 +164,7 @@ Two skills: `sense` for querying a tree (what each command is for, FTS5 syntax,
136
164
  - **RAG / vector stores:** similarity can't express `WHERE status = 'active'`. Here vectors are one signal inside `search`: same SQLite file, filters compose, every row labels its evidence (`via`), and a preset turns vectors off per layer of the tree. No second store, no daemon, no native builds.
137
165
  - **Document-OS apps (Anytype, Logseq, SilverBullet, Capacities):** full applications with their own UI and storage. `sense` is headless: your files stay files, there's no app to run.
138
166
 
139
- Dependencies: [yaml](https://github.com/eemeli/yaml), [remove-markdown](https://github.com/zuchka/remove-markdown), [@huggingface/tokenizers](https://github.com/huggingface/tokenizers.js) (pure JS), and Node's built-in SQLite. No native builds.
167
+ Dependencies: [yaml](https://github.com/eemeli/yaml), [remove-markdown](https://github.com/zuchka/remove-markdown), [@huggingface/tokenizers](https://github.com/huggingface/tokenizers.js), [franc-min](https://github.com/wooorm/franc) (all pure JS), and Node's built-in SQLite. No native builds.
140
168
 
141
169
  ## License
142
170
 
@@ -8,9 +8,10 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
+ var _nodepath = require("node:path");
11
12
  var _indexts = require("../config/index.js");
13
+ var _storets = require("../embed/store.js");
12
14
  var _errorsts = require("../errors.js");
13
- var _embedts = require("../features/embed.js");
14
15
  var _indexts1 = require("./index.js");
15
16
  var _sharedts = require("./shared.js");
16
17
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
@@ -164,12 +165,11 @@ function _ts_generator(thisArg, body) {
164
165
  };
165
166
  }
166
167
  }
167
- // The one command that fetches weights. Nothing else touches the network for them, so a
168
- // query that reads like a query never spends minutes pulling 124 MB. Asks nothing, so there
169
- // is no prompt for CI to bypass; running it twice is a no-op.
168
+ // A prefetch over the store's own fetch path: a search would fetch the same weights
169
+ // lazily, so this only moves the wait earlier. Idempotent; asks nothing, so CI can run it unattended.
170
170
  var download = function download(ctx) {
171
171
  return _async_to_generator(function() {
172
- var values, cfg, e, dir;
172
+ var values, cfg, e, at, dir;
173
173
  return _ts_generator(this, function(_state) {
174
174
  switch(_state.label){
175
175
  case 0:
@@ -177,27 +177,28 @@ var download = function download(ctx) {
177
177
  cfg = ctx.resolveConfig(values.config);
178
178
  e = (0, _indexts.embedConfig)(cfg);
179
179
  if (!e) throw new _errorsts.SenseError('EMBED_DISABLED', 'no preset asks for vectors, so there is no model to download');
180
- if (e.type === 'api') {
181
- console.log('embed type is "api" ('.concat(e.url, "), so there is nothing to download; ").concat(ctx.name, " search reaches it over the network"));
180
+ if (e.provider !== 'static') {
181
+ console.log('embed provider is "'.concat(e.provider, '" (').concat(e.url, "), so there is nothing to download; ").concat(ctx.name, " search reaches it over the network"));
182
182
  return [
183
183
  2
184
184
  ];
185
185
  }
186
- if ((0, _embedts.modelPresent)(cfg)) {
187
- console.log("".concat(e.model, " is already available in ").concat((0, _embedts.modelDir)(e.model)));
186
+ if ((0, _storets.modelPresent)(cfg)) {
187
+ at = (0, _storets.isDownloadable)(e.model) ? "@".concat((0, _nodepath.basename)((0, _storets.modelDir)(e.model)), " ") : ' ';
188
+ console.log("".concat(e.model).concat(at, "is already available in ").concat((0, _storets.modelDir)(e.model)));
188
189
  return [
189
190
  2
190
191
  ];
191
192
  }
192
193
  return [
193
194
  4,
194
- (0, _embedts.downloadModel)(e.model, function(file, into) {
195
+ (0, _storets.downloadModel)(e.model, function(file, into) {
195
196
  return console.error("fetching ".concat(e.model, "/").concat(file, " into ").concat(into));
196
197
  })
197
198
  ];
198
199
  case 1:
199
200
  dir = _state.sent();
200
- console.log("downloaded ".concat(e.model, " into ").concat(dir));
201
+ console.log("downloaded ".concat(e.model, "@").concat((0, _nodepath.basename)(dir), " into ").concat(dir));
201
202
  return [
202
203
  2
203
204
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/download.ts"],"sourcesContent":["import { embedConfig } from '../config/index.ts';\nimport { SenseError } from '../errors.ts';\nimport { downloadModel, modelDir, modelPresent } from '../features/embed.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, parse } from './shared.ts';\nimport type { Command } from './types.ts';\n\n// The one command that fetches weights. Nothing else touches the network for them, so a\n// query that reads like a query never spends minutes pulling 124 MB. Asks nothing, so there\n// is no prompt for CI to bypass; running it twice is a no-op.\nconst download: Command = async (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.download}`, { ...CONFIG });\n const cfg = ctx.resolveConfig(values.config as string | undefined);\n const e = embedConfig(cfg);\n if (!e) throw new SenseError('EMBED_DISABLED', 'no preset asks for vectors, so there is no model to download');\n\n if (e.type === 'api') {\n console.log(`embed type is \"api\" (${e.url}), so there is nothing to download; ${ctx.name} search reaches it over the network`);\n return;\n }\n if (modelPresent(cfg)) {\n console.log(`${e.model} is already available in ${modelDir(e.model)}`);\n return;\n }\n const dir = await downloadModel(e.model, (file, into) => console.error(`fetching ${e.model}/${file} into ${into}`));\n console.log(`downloaded ${e.model} into ${dir}`);\n};\nexport default download;\n"],"names":["download","ctx","values","cfg","e","dir","parse","argv","USAGE","name","CONFIG","resolveConfig","config","embedConfig","SenseError","type","console","log","url","modelPresent","modelDir","model","downloadModel","file","into","error"],"mappings":";;;;+BA2BA;;;eAAA;;;uBA3B4B;wBACD;uBAC2B;wBAChC;wBACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG9B,wFAAwF;AACxF,4FAA4F;AAC5F,8DAA8D;AAC9D,IAAMA,WAAoB,kBAAOC;;YACvBC,QACFC,KACAC,GAWAC;;;;oBAbEH,SAAWI,IAAAA,eAAK,EAACL,IAAIM,IAAI,EAAE,AAAC,UAAqBC,OAAZP,IAAIQ,IAAI,EAAC,KAAkB,OAAfD,eAAK,CAACR,QAAQ,GAAI,mBAAKU,gBAAM,GAA9ER;oBACFC,MAAMF,IAAIU,aAAa,CAACT,OAAOU,MAAM;oBACrCR,IAAIS,IAAAA,oBAAW,EAACV;oBACtB,IAAI,CAACC,GAAG,MAAM,IAAIU,oBAAU,CAAC,kBAAkB;oBAE/C,IAAIV,EAAEW,IAAI,KAAK,OAAO;wBACpBC,QAAQC,GAAG,CAAC,AAAC,wBAAmEhB,OAA5CG,EAAEc,GAAG,EAAC,wCAA+C,OAATjB,IAAIQ,IAAI,EAAC;wBACzF;;;oBACF;oBACA,IAAIU,IAAAA,qBAAY,EAAChB,MAAM;wBACrBa,QAAQC,GAAG,CAAC,AAAC,GAAqCG,OAAnChB,EAAEiB,KAAK,EAAC,6BAA6C,OAAlBD,IAAAA,iBAAQ,EAAChB,EAAEiB,KAAK;wBAClE;;;oBACF;oBACY;;wBAAMC,IAAAA,sBAAa,EAAClB,EAAEiB,KAAK,EAAE,SAACE,MAAMC;mCAASR,QAAQS,KAAK,CAAC,AAAC,YAAsBF,OAAXnB,EAAEiB,KAAK,EAAC,KAAgBG,OAAbD,MAAK,UAAa,OAALC;;;;oBAArGnB,MAAM;oBACZW,QAAQC,GAAG,CAAC,AAAC,cAA6BZ,OAAhBD,EAAEiB,KAAK,EAAC,UAAY,OAAJhB;;;;;;IAC5C;;IACA,WAAeL"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/download.ts"],"sourcesContent":["import { basename } from 'node:path';\nimport { embedConfig } from '../config/index.ts';\nimport { downloadModel, isDownloadable, modelDir, modelPresent } from '../embed/store.ts';\nimport { SenseError } from '../errors.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, parse } from './shared.ts';\nimport type { Command } from './types.ts';\n\n// A prefetch over the store's own fetch path: a search would fetch the same weights\n// lazily, so this only moves the wait earlier. Idempotent; asks nothing, so CI can run it unattended.\nconst download: Command = async (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.download}`, { ...CONFIG });\n const cfg = ctx.resolveConfig(values.config as string | undefined);\n const e = embedConfig(cfg);\n if (!e) throw new SenseError('EMBED_DISABLED', 'no preset asks for vectors, so there is no model to download');\n\n if (e.provider !== 'static') {\n console.log(`embed provider is \"${e.provider}\" (${e.url}), so there is nothing to download; ${ctx.name} search reaches it over the network`);\n return;\n }\n if (modelPresent(cfg)) {\n const at = isDownloadable(e.model) ? `@${basename(modelDir(e.model))} ` : ' ';\n console.log(`${e.model}${at}is already available in ${modelDir(e.model)}`);\n return;\n }\n const dir = await downloadModel(e.model, (file, into) => console.error(`fetching ${e.model}/${file} into ${into}`));\n console.log(`downloaded ${e.model}@${basename(dir)} into ${dir}`);\n};\nexport default download;\n"],"names":["download","ctx","values","cfg","e","at","dir","parse","argv","USAGE","name","CONFIG","resolveConfig","config","embedConfig","SenseError","provider","console","log","url","modelPresent","isDownloadable","model","basename","modelDir","downloadModel","file","into","error"],"mappings":";;;;+BA4BA;;;eAAA;;;wBA5ByB;uBACG;uBAC0C;wBAC3C;wBACL;wBACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG9B,oFAAoF;AACpF,sGAAsG;AACtG,IAAMA,WAAoB,kBAAOC;;YACvBC,QACFC,KACAC,GAQEC,IAIFC;;;;oBAdEJ,SAAWK,IAAAA,eAAK,EAACN,IAAIO,IAAI,EAAE,AAAC,UAAqBC,OAAZR,IAAIS,IAAI,EAAC,KAAkB,OAAfD,eAAK,CAACT,QAAQ,GAAI,mBAAKW,gBAAM,GAA9ET;oBACFC,MAAMF,IAAIW,aAAa,CAACV,OAAOW,MAAM;oBACrCT,IAAIU,IAAAA,oBAAW,EAACX;oBACtB,IAAI,CAACC,GAAG,MAAM,IAAIW,oBAAU,CAAC,kBAAkB;oBAE/C,IAAIX,EAAEY,QAAQ,KAAK,UAAU;wBAC3BC,QAAQC,GAAG,CAAC,AAAC,sBAAqCd,OAAhBA,EAAEY,QAAQ,EAAC,OAAiDf,OAA5CG,EAAEe,GAAG,EAAC,wCAA+C,OAATlB,IAAIS,IAAI,EAAC;wBACvG;;;oBACF;oBACA,IAAIU,IAAAA,qBAAY,EAACjB,MAAM;wBACfE,KAAKgB,IAAAA,uBAAc,EAACjB,EAAEkB,KAAK,IAAI,AAAC,IAA+B,OAA5BC,IAAAA,kBAAQ,EAACC,IAAAA,iBAAQ,EAACpB,EAAEkB,KAAK,IAAG,OAAK;wBAC1EL,QAAQC,GAAG,CAAC,AAAC,GAAYb,OAAVD,EAAEkB,KAAK,EAAgCE,OAA7BnB,IAAG,4BAA4C,OAAlBmB,IAAAA,iBAAQ,EAACpB,EAAEkB,KAAK;wBACtE;;;oBACF;oBACY;;wBAAMG,IAAAA,sBAAa,EAACrB,EAAEkB,KAAK,EAAE,SAACI,MAAMC;mCAASV,QAAQW,KAAK,CAAC,AAAC,YAAsBF,OAAXtB,EAAEkB,KAAK,EAAC,KAAgBK,OAAbD,MAAK,UAAa,OAALC;;;;oBAArGrB,MAAM;oBACZW,QAAQC,GAAG,CAAC,AAAC,cAAwBK,OAAXnB,EAAEkB,KAAK,EAAC,KAAyBhB,OAAtBiB,IAAAA,kBAAQ,EAACjB,MAAK,UAAY,OAAJA;;;;;;IAC7D;;IACA,WAAeN"}
@@ -1,6 +1,6 @@
1
1
  import type { Command } from './types.js';
2
2
  export declare const USAGE: {
3
- readonly init: "init";
3
+ readonly init: "init [--model id-or-path] [--provider static|openai|cohere] [--url url]";
4
4
  readonly watch: "watch [--force] [--config path]";
5
5
  readonly status: "status [--format table|json] [--config path]";
6
6
  readonly download: "download [--config path]";
@@ -1,6 +1,6 @@
1
1
  import type { Command } from './types.js';
2
2
  export declare const USAGE: {
3
- readonly init: "init";
3
+ readonly init: "init [--model id-or-path] [--provider static|openai|cohere] [--url url]";
4
4
  readonly watch: "watch [--force] [--config path]";
5
5
  readonly status: "status [--format table|json] [--config path]";
6
6
  readonly download: "download [--config path]";
@@ -47,7 +47,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
47
47
  return newObj;
48
48
  }
49
49
  var USAGE = {
50
- init: 'init',
50
+ init: 'init [--model id-or-path] [--provider static|openai|cohere] [--url url]',
51
51
  watch: 'watch [--force] [--config path]',
52
52
  status: 'status [--format table|json] [--config path]',
53
53
  download: 'download [--config path]',
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/index.ts"],"sourcesContent":["import type { Command } from './types.ts';\n\n// Each command's usage line, minus the leading \"usage: <name> \" -- shared by cli.ts's\n// top-level usage() and the command's own parse() error/--help output, so there is one\n// copy of each line, not two that can drift.\nexport const USAGE = {\n init: 'init',\n watch: 'watch [--force] [--config path]',\n status: 'status [--format table|json] [--config path]',\n download: 'download [--config path]',\n sql: 'sql \"<statement>\" [params...] [--preset name] [--format table|json|csv] [--config path]',\n search: 'search \"<terms>\" [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--k n] [--format table|json|csv] [--config path]',\n map: 'map [--format table|json] [--config path]',\n peek: 'peek <path> [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--format table|json] [--config path]',\n path: 'path <a> <b> [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--max-depth n] [--format table|json] [--config path]',\n related: 'related <note> [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--k n] [--format table|json|csv] [--config path]',\n} as const;\n\n// Lazy registry: a command's imports load only when it runs, so a heavy dependency in one\n// command never taxes the others (or --version/--help). These names are reserved: a saved\n// entry in config can never shadow them.\nexport const COMMANDS: Record<string, () => Promise<{ default: Command }>> = {\n init: () => import('./init.ts'),\n watch: () => import('./watch.ts'),\n status: () => import('./status.ts'),\n download: () => import('./download.ts'),\n sql: () => import('./sql.ts'),\n search: () => import('./search.ts'),\n map: () => import('./map.ts'),\n peek: () => import('./peek.ts'),\n path: () => import('./path.ts'),\n related: () => import('./related.ts'),\n};\n\nexport type { Command, Ctx } from './types.ts';\n"],"names":["COMMANDS","USAGE","init","watch","status","download","sql","search","map","peek","path","related"],"mappings":";;;;;;;;;;;QAqBaA;eAAAA;;QAhBAC;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAN,IAAMA,QAAQ;IACnBC,MAAM;IACNC,OAAO;IACPC,QAAQ;IACRC,UAAU;IACVC,KAAK;IACLC,QAAQ;IACRC,KAAK;IACLC,MAAM;IACNC,MAAM;IACNC,SAAS;AACX;AAKO,IAAMX,WAAgE;IAC3EE,MAAM,SAANA;eAAY;2DAAA,QAAO;;;IACnBC,OAAO,SAAPA;eAAa;2DAAA,QAAO;;;IACpBC,QAAQ,SAARA;eAAc;2DAAA,QAAO;;;IACrBC,UAAU,SAAVA;eAAgB;2DAAA,QAAO;;;IACvBC,KAAK,SAALA;eAAW;2DAAA,QAAO;;;IAClBC,QAAQ,SAARA;eAAc;2DAAA,QAAO;;;IACrBC,KAAK,SAALA;eAAW;2DAAA,QAAO;;;IAClBC,MAAM,SAANA;eAAY;2DAAA,QAAO;;;IACnBC,MAAM,SAANA;eAAY;2DAAA,QAAO;;;IACnBC,SAAS,SAATA;eAAe;2DAAA,QAAO;;;AACxB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/index.ts"],"sourcesContent":["import type { Command } from './types.ts';\n\n// Each command's usage line, minus the leading \"usage: <name> \" -- shared by cli.ts's\n// top-level usage() and the command's own parse() error/--help output, so there is one\n// copy of each line, not two that can drift.\nexport const USAGE = {\n init: 'init [--model id-or-path] [--provider static|openai|cohere] [--url url]',\n watch: 'watch [--force] [--config path]',\n status: 'status [--format table|json] [--config path]',\n download: 'download [--config path]',\n sql: 'sql \"<statement>\" [params...] [--preset name] [--format table|json|csv] [--config path]',\n search: 'search \"<terms>\" [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--k n] [--format table|json|csv] [--config path]',\n map: 'map [--format table|json] [--config path]',\n peek: 'peek <path> [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--format table|json] [--config path]',\n path: 'path <a> <b> [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--max-depth n] [--format table|json] [--config path]',\n related: 'related <note> [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude] [--where \"<sql>\"] [--k n] [--format table|json|csv] [--config path]',\n} as const;\n\n// Lazy registry: a command's imports load only when it runs, so a heavy dependency in one\n// command never taxes the others (or --version/--help). These names are reserved: a saved\n// entry in config can never shadow them.\nexport const COMMANDS: Record<string, () => Promise<{ default: Command }>> = {\n init: () => import('./init.ts'),\n watch: () => import('./watch.ts'),\n status: () => import('./status.ts'),\n download: () => import('./download.ts'),\n sql: () => import('./sql.ts'),\n search: () => import('./search.ts'),\n map: () => import('./map.ts'),\n peek: () => import('./peek.ts'),\n path: () => import('./path.ts'),\n related: () => import('./related.ts'),\n};\n\nexport type { Command, Ctx } from './types.ts';\n"],"names":["COMMANDS","USAGE","init","watch","status","download","sql","search","map","peek","path","related"],"mappings":";;;;;;;;;;;QAqBaA;eAAAA;;QAhBAC;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAN,IAAMA,QAAQ;IACnBC,MAAM;IACNC,OAAO;IACPC,QAAQ;IACRC,UAAU;IACVC,KAAK;IACLC,QAAQ;IACRC,KAAK;IACLC,MAAM;IACNC,MAAM;IACNC,SAAS;AACX;AAKO,IAAMX,WAAgE;IAC3EE,MAAM,SAANA;eAAY;2DAAA,QAAO;;;IACnBC,OAAO,SAAPA;eAAa;2DAAA,QAAO;;;IACpBC,QAAQ,SAARA;eAAc;2DAAA,QAAO;;;IACrBC,UAAU,SAAVA;eAAgB;2DAAA,QAAO;;;IACvBC,KAAK,SAALA;eAAW;2DAAA,QAAO;;;IAClBC,QAAQ,SAARA;eAAc;2DAAA,QAAO;;;IACrBC,KAAK,SAALA;eAAW;2DAAA,QAAO;;;IAClBC,MAAM,SAANA;eAAY;2DAAA,QAAO;;;IACnBC,MAAM,SAANA;eAAY;2DAAA,QAAO;;;IACnBC,SAAS,SAATA;eAAe;2DAAA,QAAO;;;AACxB"}
@@ -12,13 +12,39 @@ var _indexts = require("../config/index.js");
12
12
  var _indexts1 = require("./index.js");
13
13
  var _sharedts = require("./shared.js");
14
14
  var init = function init(ctx) {
15
- (0, _sharedts.parse)(ctx.argv, "usage: ".concat(ctx.name, " ").concat(_indexts1.USAGE.init), {});
16
- var configPath = (0, _indexts.initConfig)(process.cwd());
15
+ var values = (0, _sharedts.parse)(ctx.argv, "usage: ".concat(ctx.name, " ").concat(_indexts1.USAGE.init), {
16
+ model: {
17
+ type: 'string'
18
+ },
19
+ provider: {
20
+ type: 'string'
21
+ },
22
+ url: {
23
+ type: 'string'
24
+ }
25
+ }).values;
26
+ var modelFlag = values.model;
27
+ var providerFlag = values.provider;
28
+ var model = modelFlag !== null && modelFlag !== void 0 ? modelFlag : _indexts.DEFAULT_EMBED_MODEL;
29
+ var provider = providerFlag !== null && providerFlag !== void 0 ? providerFlag : 'static';
30
+ var url = values.url;
31
+ // An invalid --provider throws here (validateConfig's own shape error), before anything is
32
+ // written -- one validator, not a second copy of its rules.
33
+ var configPath = (0, _indexts.initConfig)(process.cwd(), {
34
+ model: modelFlag,
35
+ provider: providerFlag,
36
+ url: url
37
+ });
17
38
  console.log("created ".concat(configPath));
18
39
  console.log("query away: ".concat(ctx.name, ' sql "SELECT path FROM frontmatter LIMIT 10"'));
19
- // Semantic search needs a 124 MB model that nothing downloads implicitly; name the step
20
- // here so the first search meets it as a choice rather than as a degraded result.
21
- console.log("for meaning-based search: ".concat(ctx.name, " download (one 124 MB model, once)"));
40
+ // Naming a model is consent to fetch it, so writing one into the config says so loudly,
41
+ // with the download consequence and the prefetch command, right where it was just written.
42
+ if (provider === 'static') {
43
+ console.log("embed model: ".concat(model, " (static); nothing downloads until the first vector search -- ").concat(ctx.name, " download fetches it now instead"));
44
+ } else {
45
+ console.log("embed model: ".concat(model, " (").concat(provider).concat(url ? " at ".concat(url) : '', "); reached over the network at search time, nothing to download"));
46
+ }
47
+ console.log('a non-English tree should pick a model for its languages: see the sense-setup skill or INTEGRATIONS.md');
22
48
  // The decisions a new tree faces -- features, frontmatter conventions, note size -- are not
23
49
  // in this output; name both places that hold them, since an agent may have neither.
24
50
  console.log('features and tree design: the sense-setup skill, or schema.json');
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/init.ts"],"sourcesContent":["import { initConfig } from '../config/index.ts';\nimport { USAGE } from './index.ts';\nimport { parse } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst init: Command = (ctx) => {\n parse(ctx.argv, `usage: ${ctx.name} ${USAGE.init}`, {});\n const configPath = initConfig(process.cwd());\n console.log(`created ${configPath}`);\n console.log(`query away: ${ctx.name} sql \"SELECT path FROM frontmatter LIMIT 10\"`);\n // Semantic search needs a 124 MB model that nothing downloads implicitly; name the step\n // here so the first search meets it as a choice rather than as a degraded result.\n console.log(`for meaning-based search: ${ctx.name} download (one 124 MB model, once)`);\n // The decisions a new tree faces -- features, frontmatter conventions, note size -- are not\n // in this output; name both places that hold them, since an agent may have neither.\n console.log('features and tree design: the sense-setup skill, or schema.json');\n};\nexport default init;\n"],"names":["init","ctx","parse","argv","USAGE","name","configPath","initConfig","process","cwd","console","log"],"mappings":";;;;+BAiBA;;;eAAA;;;uBAjB2B;wBACL;wBACA;AAGtB,IAAMA,OAAgB,cAACC;IACrBC,IAAAA,eAAK,EAACD,IAAIE,IAAI,EAAE,AAAC,UAAqBC,OAAZH,IAAII,IAAI,EAAC,KAAc,OAAXD,eAAK,CAACJ,IAAI,GAAI,CAAC;IACrD,IAAMM,aAAaC,IAAAA,mBAAU,EAACC,QAAQC,GAAG;IACzCC,QAAQC,GAAG,CAAC,AAAC,WAAqB,OAAXL;IACvBI,QAAQC,GAAG,CAAC,AAAC,eAAuB,OAATV,IAAII,IAAI,EAAC;IACpC,wFAAwF;IACxF,kFAAkF;IAClFK,QAAQC,GAAG,CAAC,AAAC,6BAAqC,OAATV,IAAII,IAAI,EAAC;IAClD,4FAA4F;IAC5F,oFAAoF;IACpFK,QAAQC,GAAG,CAAC;AACd;IACA,WAAeX"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/init.ts"],"sourcesContent":["import { DEFAULT_EMBED_MODEL, initConfig } from '../config/index.ts';\nimport { USAGE } from './index.ts';\nimport { parse } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst init: Command = (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.init}`, {\n model: { type: 'string' },\n provider: { type: 'string' },\n url: { type: 'string' },\n });\n const modelFlag = values.model as string | undefined;\n const providerFlag = values.provider as string | undefined;\n const model = modelFlag ?? DEFAULT_EMBED_MODEL;\n const provider = providerFlag ?? 'static';\n const url = values.url as string | undefined;\n // An invalid --provider throws here (validateConfig's own shape error), before anything is\n // written -- one validator, not a second copy of its rules.\n const configPath = initConfig(process.cwd(), { model: modelFlag, provider: providerFlag, url });\n console.log(`created ${configPath}`);\n console.log(`query away: ${ctx.name} sql \"SELECT path FROM frontmatter LIMIT 10\"`);\n // Naming a model is consent to fetch it, so writing one into the config says so loudly,\n // with the download consequence and the prefetch command, right where it was just written.\n if (provider === 'static') {\n console.log(`embed model: ${model} (static); nothing downloads until the first vector search -- ${ctx.name} download fetches it now instead`);\n } else {\n console.log(`embed model: ${model} (${provider}${url ? ` at ${url}` : ''}); reached over the network at search time, nothing to download`);\n }\n console.log('a non-English tree should pick a model for its languages: see the sense-setup skill or INTEGRATIONS.md');\n // The decisions a new tree faces -- features, frontmatter conventions, note size -- are not\n // in this output; name both places that hold them, since an agent may have neither.\n console.log('features and tree design: the sense-setup skill, or schema.json');\n};\nexport default init;\n"],"names":["init","ctx","values","parse","argv","USAGE","name","model","type","provider","url","modelFlag","providerFlag","DEFAULT_EMBED_MODEL","configPath","initConfig","process","cwd","console","log"],"mappings":";;;;+BAiCA;;;eAAA;;;uBAjCgD;wBAC1B;wBACA;AAGtB,IAAMA,OAAgB,cAACC;IACrB,IAAM,AAAEC,SAAWC,IAAAA,eAAK,EAACF,IAAIG,IAAI,EAAE,AAAC,UAAqBC,OAAZJ,IAAIK,IAAI,EAAC,KAAc,OAAXD,eAAK,CAACL,IAAI,GAAI;QACrEO,OAAO;YAAEC,MAAM;QAAS;QACxBC,UAAU;YAAED,MAAM;QAAS;QAC3BE,KAAK;YAAEF,MAAM;QAAS;IACxB,GAJQN;IAKR,IAAMS,YAAYT,OAAOK,KAAK;IAC9B,IAAMK,eAAeV,OAAOO,QAAQ;IACpC,IAAMF,QAAQI,sBAAAA,uBAAAA,YAAaE,4BAAmB;IAC9C,IAAMJ,WAAWG,yBAAAA,0BAAAA,eAAgB;IACjC,IAAMF,MAAMR,OAAOQ,GAAG;IACtB,2FAA2F;IAC3F,4DAA4D;IAC5D,IAAMI,aAAaC,IAAAA,mBAAU,EAACC,QAAQC,GAAG,IAAI;QAAEV,OAAOI;QAAWF,UAAUG;QAAcF,KAAAA;IAAI;IAC7FQ,QAAQC,GAAG,CAAC,AAAC,WAAqB,OAAXL;IACvBI,QAAQC,GAAG,CAAC,AAAC,eAAuB,OAATlB,IAAIK,IAAI,EAAC;IACpC,wFAAwF;IACxF,2FAA2F;IAC3F,IAAIG,aAAa,UAAU;QACzBS,QAAQC,GAAG,CAAC,AAAC,gBAAqFlB,OAAtEM,OAAM,kEAAyE,OAATN,IAAIK,IAAI,EAAC;IAC7G,OAAO;QACLY,QAAQC,GAAG,CAAC,AAAC,gBAAyBV,OAAVF,OAAM,MAAeG,OAAXD,UAAmC,OAAxBC,MAAM,AAAC,OAAU,OAAJA,OAAQ,IAAG;IAC3E;IACAQ,QAAQC,GAAG,CAAC;IACZ,4FAA4F;IAC5F,oFAAoF;IACpFD,QAAQC,GAAG,CAAC;AACd;IACA,WAAenB"}