sensemaking 0.9.0 → 0.9.2

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 (68) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/cli/check.js +34 -3
  3. package/dist/cjs/cli/check.js.map +1 -1
  4. package/dist/cjs/cli/index.d.cts +11 -0
  5. package/dist/cjs/cli/index.d.ts +11 -0
  6. package/dist/cjs/cli/index.js +22 -3
  7. package/dist/cjs/cli/index.js.map +1 -1
  8. package/dist/cjs/cli/init.js +3 -0
  9. package/dist/cjs/cli/init.js.map +1 -1
  10. package/dist/cjs/cli/map.js +33 -2
  11. package/dist/cjs/cli/map.js.map +1 -1
  12. package/dist/cjs/cli/named.d.cts +1 -1
  13. package/dist/cjs/cli/named.d.ts +1 -1
  14. package/dist/cjs/cli/named.js +46 -12
  15. package/dist/cjs/cli/named.js.map +1 -1
  16. package/dist/cjs/cli/peek.js +36 -4
  17. package/dist/cjs/cli/peek.js.map +1 -1
  18. package/dist/cjs/cli/query.js +35 -3
  19. package/dist/cjs/cli/query.js.map +1 -1
  20. package/dist/cjs/cli/rebuild.js +31 -1
  21. package/dist/cjs/cli/rebuild.js.map +1 -1
  22. package/dist/cjs/cli/search.js +42 -10
  23. package/dist/cjs/cli/search.js.map +1 -1
  24. package/dist/cjs/cli/shared.d.cts +13 -2
  25. package/dist/cjs/cli/shared.d.ts +13 -2
  26. package/dist/cjs/cli/shared.js +139 -7
  27. package/dist/cjs/cli/shared.js.map +1 -1
  28. package/dist/cjs/cli/status.js +5 -2
  29. package/dist/cjs/cli/status.js.map +1 -1
  30. package/dist/cjs/cli/types.d.cts +2 -12
  31. package/dist/cjs/cli/types.d.ts +2 -12
  32. package/dist/cjs/cli/watch.js +38 -2
  33. package/dist/cjs/cli/watch.js.map +1 -1
  34. package/dist/cjs/cli.js +113 -121
  35. package/dist/cjs/cli.js.map +1 -1
  36. package/dist/esm/cli/check.js +9 -3
  37. package/dist/esm/cli/check.js.map +1 -1
  38. package/dist/esm/cli/index.d.ts +11 -0
  39. package/dist/esm/cli/index.js +14 -0
  40. package/dist/esm/cli/index.js.map +1 -1
  41. package/dist/esm/cli/init.js +3 -0
  42. package/dist/esm/cli/init.js.map +1 -1
  43. package/dist/esm/cli/map.js +11 -3
  44. package/dist/esm/cli/map.js.map +1 -1
  45. package/dist/esm/cli/named.d.ts +1 -1
  46. package/dist/esm/cli/named.js +23 -13
  47. package/dist/esm/cli/named.js.map +1 -1
  48. package/dist/esm/cli/peek.js +12 -5
  49. package/dist/esm/cli/peek.js.map +1 -1
  50. package/dist/esm/cli/query.js +11 -4
  51. package/dist/esm/cli/query.js.map +1 -1
  52. package/dist/esm/cli/rebuild.js +6 -2
  53. package/dist/esm/cli/rebuild.js.map +1 -1
  54. package/dist/esm/cli/search.js +18 -10
  55. package/dist/esm/cli/search.js.map +1 -1
  56. package/dist/esm/cli/shared.d.ts +13 -2
  57. package/dist/esm/cli/shared.js +74 -7
  58. package/dist/esm/cli/shared.js.map +1 -1
  59. package/dist/esm/cli/status.js +9 -3
  60. package/dist/esm/cli/status.js.map +1 -1
  61. package/dist/esm/cli/types.d.ts +2 -12
  62. package/dist/esm/cli/types.js.map +1 -1
  63. package/dist/esm/cli/watch.js +11 -3
  64. package/dist/esm/cli/watch.js.map +1 -1
  65. package/dist/esm/cli.js +82 -95
  66. package/dist/esm/cli.js.map +1 -1
  67. package/package.json +1 -1
  68. package/skills/sense/SKILL.md +3 -1
package/dist/esm/cli.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { parseArgs } from 'node:util';
3
- import { COMMANDS } from './cli/index.js';
3
+ import { COMMANDS, USAGE } from './cli/index.js';
4
4
  import { loadConfig, SUPPORTED_CONFIG_VERSION } from './config.js';
5
5
  // Parsing and dispatch only. Commands live in src/cli/, one file each, lazy-loaded --
6
- // nothing tree- or dependency-heavy may be imported at the top of this file.
6
+ // nothing tree- or dependency-heavy may be imported at the top of this file. Flags parse
7
+ // per command (each command's own parse() call); this file only handles the bare top-level
8
+ // flags (--version/--help/--list/--config) and dispatch.
7
9
  // Works from dist/cjs and dist/esm alike: walk up past the dist type-marker package.json.
8
10
  function packageVersion() {
9
11
  const load = createRequire(import.meta.url);
@@ -20,118 +22,103 @@ function packageVersion() {
20
22
  return 'unknown';
21
23
  }
22
24
  function usage(name) {
23
- return `usage: ${name} <name> [params...] [--format table|json] [--config path]\n` + ` ${name} query "<sql>" [params...]\n` + ` ${name} search "<terms>" [--preset name] [--include glob ...] [--where "<sql>"] [--k n] [--lexical]\n` + ` ${name} map\n` + ` ${name} peek <path>\n` + ` ${name} --list\n` + ` ${name} init\n` + ` ${name} watch [--force]\n` + ` ${name} status\n` + ` ${name} check\n` + ` ${name} rebuild\n` + ` ${name} --version`;
25
+ const lines = Object.values(USAGE).map((u)=>` ${name} ${u}`);
26
+ return [
27
+ `usage: ${name} <name> [params...] [--format table|json] [--config path]`,
28
+ ...lines,
29
+ ` ${name} --list`,
30
+ ` ${name} --version`
31
+ ].join('\n');
32
+ }
33
+ function resolveConfigFor(name, configPath) {
34
+ const cfg = loadConfig(configPath);
35
+ if (cfg.migratedFrom !== undefined) {
36
+ console.warn(`${name}: migrated ${cfg.configPath} from config version ${cfg.migratedFrom} to ${SUPPORTED_CONFIG_VERSION}`);
37
+ }
38
+ if (cfg.unknownKeys !== undefined) {
39
+ console.warn(`${name}: ${cfg.configPath} sets ${cfg.unknownKeys.join(', ')}, which this build does not read (no effect); see schema.json for the keys it does`);
40
+ }
41
+ return cfg;
24
42
  }
25
43
  // Thrown errors -> exit 1 with the message verbatim; usage errors exit 2 directly.
26
44
  export default async function cli(argv, name) {
27
- let values;
28
- let positionals;
29
- try {
30
- ({ values, positionals } = parseArgs({
31
- args: argv,
32
- options: {
33
- format: {
34
- type: 'string',
35
- default: 'table'
36
- },
37
- config: {
38
- type: 'string'
39
- },
40
- where: {
41
- type: 'string'
42
- },
43
- k: {
44
- type: 'string'
45
- },
46
- preset: {
47
- type: 'string'
48
- },
49
- include: {
50
- type: 'string',
51
- multiple: true
52
- },
53
- lexical: {
54
- type: 'boolean',
55
- default: false
56
- },
57
- list: {
58
- type: 'boolean',
59
- default: false
60
- },
61
- force: {
62
- type: 'boolean',
63
- default: false
64
- },
65
- version: {
66
- type: 'boolean',
67
- default: false,
68
- short: 'v'
45
+ const first = argv[0];
46
+ // No command word, or the first token looks like a flag: the only flags this level knows.
47
+ if (!first || first.startsWith('-')) {
48
+ let values;
49
+ try {
50
+ ({ values } = parseArgs({
51
+ args: argv,
52
+ options: {
53
+ version: {
54
+ type: 'boolean',
55
+ default: false,
56
+ short: 'v'
57
+ },
58
+ help: {
59
+ type: 'boolean',
60
+ default: false,
61
+ short: 'h'
62
+ },
63
+ list: {
64
+ type: 'boolean',
65
+ default: false
66
+ },
67
+ config: {
68
+ type: 'string'
69
+ }
69
70
  },
70
- help: {
71
- type: 'boolean',
72
- default: false,
73
- short: 'h'
71
+ allowPositionals: true
72
+ }));
73
+ } catch (err) {
74
+ console.error(err.message);
75
+ console.error(usage(name));
76
+ process.exit(2);
77
+ }
78
+ try {
79
+ if (values.version) {
80
+ console.log(`v${packageVersion()}`);
81
+ return;
82
+ }
83
+ if (values.help) {
84
+ console.log(usage(name));
85
+ return;
86
+ }
87
+ if (values.list) {
88
+ const queries = resolveConfigFor(name, values.config).queries;
89
+ for (const queryName of Object.keys(queries).sort()){
90
+ const entry = queries[queryName];
91
+ const isSavedSearch = typeof entry === 'object' && entry !== null && 'search' in entry;
92
+ console.log(isSavedSearch ? `${queryName} (search)` : queryName);
74
93
  }
75
- },
76
- allowPositionals: true
77
- }));
78
- } catch (err) {
79
- console.error(err.message);
94
+ return;
95
+ }
96
+ } catch (err) {
97
+ console.error(err.message);
98
+ process.exit(1);
99
+ }
80
100
  console.error(usage(name));
81
101
  process.exit(2);
82
102
  }
83
- if (values.version) {
84
- console.log(`v${packageVersion()}`);
85
- return;
86
- }
87
- if (values.help) {
88
- console.log(usage(name));
89
- return;
103
+ // find -> search (breaking rename): one release of a pointer instead of "unknown query".
104
+ if (first === 'find') {
105
+ console.error(`${name}: find is now search`);
106
+ console.error(usage(name));
107
+ process.exit(2);
90
108
  }
91
109
  const ctx = {
92
110
  name,
93
- rest: positionals.slice(1),
94
- format: values.format === 'json' ? 'json' : 'table',
95
- values: values,
96
- resolveConfig () {
97
- const cfg = loadConfig(values.config);
98
- if (cfg.migratedFrom !== undefined) {
99
- console.warn(`${name}: migrated ${cfg.configPath} from config version ${cfg.migratedFrom} to ${SUPPORTED_CONFIG_VERSION}`);
100
- }
101
- if (cfg.unknownKeys !== undefined) {
102
- console.warn(`${name}: ${cfg.configPath} sets ${cfg.unknownKeys.join(', ')}, which this build does not read (no effect); see schema.json for the keys it does`);
103
- }
104
- return cfg;
105
- },
111
+ argv: argv.slice(1),
112
+ resolveConfig: (configPath)=>resolveConfigFor(name, configPath),
106
113
  usageError (message) {
107
114
  console.error(message);
108
115
  process.exit(2);
109
116
  }
110
117
  };
111
118
  try {
112
- if (values.list) {
113
- const queries = ctx.resolveConfig().queries;
114
- for (const queryName of Object.keys(queries).sort()){
115
- const entry = queries[queryName];
116
- const isSavedSearch = typeof entry === 'object' && entry !== null && 'search' in entry;
117
- console.log(isSavedSearch ? `${queryName} (search)` : queryName);
118
- }
119
- return;
120
- }
121
- const [first, ...params] = positionals;
122
- if (!first) {
123
- console.error(usage(name));
124
- process.exit(2);
125
- }
126
- // find -> search (breaking rename): one release of a pointer instead of "unknown query".
127
- if (first === 'find') {
128
- console.error(`${name}: find is now search`);
129
- console.error(usage(name));
130
- process.exit(2);
131
- }
132
119
  const load = COMMANDS[first];
133
120
  if (load) await (await load()).default(ctx);
134
- else await (await import('./cli/named.js')).default(ctx, first, params);
121
+ else await (await import('./cli/named.js')).default(ctx, first);
135
122
  } catch (err) {
136
123
  console.error(err.message);
137
124
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { parseArgs } from 'node:util';\nimport { COMMANDS } from './cli/index.ts';\nimport type { Ctx } from './cli/types.ts';\nimport { loadConfig, SUPPORTED_CONFIG_VERSION } from './config.ts';\n\n// Parsing and dispatch only. Commands live in src/cli/, one file each, lazy-loaded --\n// nothing tree- or dependency-heavy may be imported at the top of this file.\n\n// Works from dist/cjs and dist/esm alike: walk up past the dist type-marker package.json.\nfunction packageVersion(): string {\n const load = createRequire(import.meta.url);\n for (const rel of ['../package.json', '../../package.json', '../../../package.json']) {\n try {\n const pkg = load(rel) as { name?: string; version?: string };\n if (pkg.name === 'sensemaking' && pkg.version) return pkg.version;\n } catch {}\n }\n return 'unknown';\n}\n\nfunction usage(name: string): string {\n return (\n `usage: ${name} <name> [params...] [--format table|json] [--config path]\\n` +\n ` ${name} query \"<sql>\" [params...]\\n` +\n ` ${name} search \"<terms>\" [--preset name] [--include glob ...] [--where \"<sql>\"] [--k n] [--lexical]\\n` +\n ` ${name} map\\n` +\n ` ${name} peek <path>\\n` +\n ` ${name} --list\\n` +\n ` ${name} init\\n` +\n ` ${name} watch [--force]\\n` +\n ` ${name} status\\n` +\n ` ${name} check\\n` +\n ` ${name} rebuild\\n` +\n ` ${name} --version`\n );\n}\n\n// Thrown errors -> exit 1 with the message verbatim; usage errors exit 2 directly.\nexport default async function cli(argv: string[], name: string): Promise<void> {\n let values: Record<string, string | boolean | string[] | undefined>;\n let positionals: string[];\n try {\n ({ values, positionals } = parseArgs({\n args: argv,\n options: {\n format: { type: 'string', default: 'table' },\n config: { type: 'string' },\n where: { type: 'string' },\n k: { type: 'string' },\n preset: { type: 'string' },\n include: { type: 'string', multiple: true },\n lexical: { type: 'boolean', default: false },\n list: { type: 'boolean', default: false },\n force: { type: 'boolean', default: false },\n version: { type: 'boolean', default: false, short: 'v' },\n help: { type: 'boolean', default: false, short: 'h' },\n },\n allowPositionals: true,\n }));\n } catch (err) {\n console.error((err as Error).message);\n console.error(usage(name));\n process.exit(2);\n }\n\n if (values.version) {\n console.log(`v${packageVersion()}`);\n return;\n }\n if (values.help) {\n console.log(usage(name));\n return;\n }\n\n const ctx: Ctx = {\n name,\n rest: positionals.slice(1),\n format: values.format === 'json' ? 'json' : 'table',\n values: values as Ctx['values'],\n resolveConfig() {\n const cfg = loadConfig(values.config as string | undefined);\n if (cfg.migratedFrom !== undefined) {\n console.warn(`${name}: migrated ${cfg.configPath} from config version ${cfg.migratedFrom} to ${SUPPORTED_CONFIG_VERSION}`);\n }\n if (cfg.unknownKeys !== undefined) {\n console.warn(`${name}: ${cfg.configPath} sets ${cfg.unknownKeys.join(', ')}, which this build does not read (no effect); see schema.json for the keys it does`);\n }\n return cfg;\n },\n usageError(message) {\n console.error(message);\n process.exit(2);\n },\n };\n\n try {\n if (values.list) {\n const queries = ctx.resolveConfig().queries;\n for (const queryName of Object.keys(queries).sort()) {\n const entry = queries[queryName];\n const isSavedSearch = typeof entry === 'object' && entry !== null && 'search' in entry;\n console.log(isSavedSearch ? `${queryName} (search)` : queryName);\n }\n return;\n }\n\n const [first, ...params] = positionals;\n if (!first) {\n console.error(usage(name));\n process.exit(2);\n }\n\n // find -> search (breaking rename): one release of a pointer instead of \"unknown query\".\n if (first === 'find') {\n console.error(`${name}: find is now search`);\n console.error(usage(name));\n process.exit(2);\n }\n\n const load = COMMANDS[first];\n if (load) await (await load()).default(ctx);\n else await (await import('./cli/named.ts')).default(ctx, first, params);\n } catch (err) {\n console.error((err as Error).message);\n process.exit(1);\n }\n}\n"],"names":["createRequire","parseArgs","COMMANDS","loadConfig","SUPPORTED_CONFIG_VERSION","packageVersion","load","url","rel","pkg","name","version","usage","cli","argv","values","positionals","args","options","format","type","default","config","where","k","preset","include","multiple","lexical","list","force","short","help","allowPositionals","err","console","error","message","process","exit","log","ctx","rest","slice","resolveConfig","cfg","migratedFrom","undefined","warn","configPath","unknownKeys","join","usageError","queries","queryName","Object","keys","sort","entry","isSavedSearch","first","params"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { parseArgs } from 'node:util';\nimport { COMMANDS, USAGE } from './cli/index.ts';\nimport type { Ctx } from './cli/types.ts';\nimport { loadConfig, SUPPORTED_CONFIG_VERSION } from './config.ts';\n\n// Parsing and dispatch only. Commands live in src/cli/, one file each, lazy-loaded --\n// nothing tree- or dependency-heavy may be imported at the top of this file. Flags parse\n// per command (each command's own parse() call); this file only handles the bare top-level\n// flags (--version/--help/--list/--config) and dispatch.\n\n// Works from dist/cjs and dist/esm alike: walk up past the dist type-marker package.json.\nfunction packageVersion(): string {\n const load = createRequire(import.meta.url);\n for (const rel of ['../package.json', '../../package.json', '../../../package.json']) {\n try {\n const pkg = load(rel) as { name?: string; version?: string };\n if (pkg.name === 'sensemaking' && pkg.version) return pkg.version;\n } catch {}\n }\n return 'unknown';\n}\n\nfunction usage(name: string): string {\n const lines = Object.values(USAGE).map((u) => ` ${name} ${u}`);\n return [`usage: ${name} <name> [params...] [--format table|json] [--config path]`, ...lines, ` ${name} --list`, ` ${name} --version`].join('\\n');\n}\n\nfunction resolveConfigFor(name: string, configPath: string | undefined) {\n const cfg = loadConfig(configPath);\n if (cfg.migratedFrom !== undefined) {\n console.warn(`${name}: migrated ${cfg.configPath} from config version ${cfg.migratedFrom} to ${SUPPORTED_CONFIG_VERSION}`);\n }\n if (cfg.unknownKeys !== undefined) {\n console.warn(`${name}: ${cfg.configPath} sets ${cfg.unknownKeys.join(', ')}, which this build does not read (no effect); see schema.json for the keys it does`);\n }\n return cfg;\n}\n\n// Thrown errors -> exit 1 with the message verbatim; usage errors exit 2 directly.\nexport default async function cli(argv: string[], name: string): Promise<void> {\n const first = argv[0];\n\n // No command word, or the first token looks like a flag: the only flags this level knows.\n if (!first || first.startsWith('-')) {\n let values: Record<string, string | boolean | undefined>;\n try {\n ({ values } = parseArgs({\n args: argv,\n options: {\n version: { type: 'boolean', default: false, short: 'v' },\n help: { type: 'boolean', default: false, short: 'h' },\n list: { type: 'boolean', default: false },\n config: { type: 'string' },\n },\n allowPositionals: true,\n }));\n } catch (err) {\n console.error((err as Error).message);\n console.error(usage(name));\n process.exit(2);\n }\n\n try {\n if (values.version) {\n console.log(`v${packageVersion()}`);\n return;\n }\n if (values.help) {\n console.log(usage(name));\n return;\n }\n if (values.list) {\n const queries = resolveConfigFor(name, values.config as string | undefined).queries;\n for (const queryName of Object.keys(queries).sort()) {\n const entry = queries[queryName];\n const isSavedSearch = typeof entry === 'object' && entry !== null && 'search' in entry;\n console.log(isSavedSearch ? `${queryName} (search)` : queryName);\n }\n return;\n }\n } catch (err) {\n console.error((err as Error).message);\n process.exit(1);\n }\n\n console.error(usage(name));\n process.exit(2);\n }\n\n // find -> search (breaking rename): one release of a pointer instead of \"unknown query\".\n if (first === 'find') {\n console.error(`${name}: find is now search`);\n console.error(usage(name));\n process.exit(2);\n }\n\n const ctx: Ctx = {\n name,\n argv: argv.slice(1),\n resolveConfig: (configPath) => resolveConfigFor(name, configPath),\n usageError(message) {\n console.error(message);\n process.exit(2);\n },\n };\n\n try {\n const load = COMMANDS[first];\n if (load) await (await load()).default(ctx);\n else await (await import('./cli/named.ts')).default(ctx, first);\n } catch (err) {\n console.error((err as Error).message);\n process.exit(1);\n }\n}\n"],"names":["createRequire","parseArgs","COMMANDS","USAGE","loadConfig","SUPPORTED_CONFIG_VERSION","packageVersion","load","url","rel","pkg","name","version","usage","lines","Object","values","map","u","join","resolveConfigFor","configPath","cfg","migratedFrom","undefined","console","warn","unknownKeys","cli","argv","first","startsWith","args","options","type","default","short","help","list","config","allowPositionals","err","error","message","process","exit","log","queries","queryName","keys","sort","entry","isSavedSearch","ctx","slice","resolveConfig","usageError"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sensemaking",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "description": "Query and search a tree of markdown notes: SQL over frontmatter and links, ranked search over the prose — words, links, and meaning fused",
5
5
  "keywords": [
6
6
  "markdown",
@@ -40,7 +40,9 @@ question:
40
40
  whole.
41
41
 
42
42
  Output defaults to a table, built for humans; `--format json` returns the same rows
43
- machine-parseable.
43
+ machine-parseable. That also makes a saved query usable as a CI/hook gate with zero added
44
+ mechanism: `[ "$(sense <query> --format json)" = "[]" ]` is true exactly when the query
45
+ returned no rows.
44
46
 
45
47
  ## Commands
46
48