@novis10813/secondbrain-cli 0.1.0 → 0.1.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 (93) hide show
  1. package/README.md +71 -81
  2. package/dist/commands/backlinks.d.ts.map +1 -1
  3. package/dist/commands/backlinks.js +16 -33
  4. package/dist/commands/backlinks.js.map +1 -1
  5. package/dist/commands/capture.d.ts.map +1 -1
  6. package/dist/commands/capture.js +71 -57
  7. package/dist/commands/capture.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +5 -20
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/get.js +27 -26
  12. package/dist/commands/get.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +21 -4
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/migrate.d.ts +3 -0
  17. package/dist/commands/migrate.d.ts.map +1 -0
  18. package/dist/commands/migrate.js +22 -0
  19. package/dist/commands/migrate.js.map +1 -0
  20. package/dist/commands/open.d.ts +3 -0
  21. package/dist/commands/open.d.ts.map +1 -0
  22. package/dist/commands/open.js +28 -0
  23. package/dist/commands/open.js.map +1 -0
  24. package/dist/commands/orphans.d.ts.map +1 -1
  25. package/dist/commands/orphans.js +9 -27
  26. package/dist/commands/orphans.js.map +1 -1
  27. package/dist/commands/outlinks.d.ts +3 -0
  28. package/dist/commands/outlinks.d.ts.map +1 -0
  29. package/dist/commands/outlinks.js +48 -0
  30. package/dist/commands/outlinks.js.map +1 -0
  31. package/dist/commands/search.d.ts +2 -0
  32. package/dist/commands/search.d.ts.map +1 -1
  33. package/dist/commands/search.js +57 -39
  34. package/dist/commands/search.js.map +1 -1
  35. package/dist/commands/stats.d.ts.map +1 -1
  36. package/dist/commands/stats.js +4 -18
  37. package/dist/commands/stats.js.map +1 -1
  38. package/dist/commands/sync.d.ts.map +1 -1
  39. package/dist/commands/sync.js +3 -17
  40. package/dist/commands/sync.js.map +1 -1
  41. package/dist/commands/template.d.ts +3 -0
  42. package/dist/commands/template.d.ts.map +1 -0
  43. package/dist/commands/template.js +63 -0
  44. package/dist/commands/template.js.map +1 -0
  45. package/dist/commands/vault.d.ts +3 -0
  46. package/dist/commands/vault.d.ts.map +1 -0
  47. package/dist/commands/vault.js +233 -0
  48. package/dist/commands/vault.js.map +1 -0
  49. package/dist/index.js +13 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/types/index.d.ts +134 -10
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/utils/config.d.ts +3 -1
  54. package/dist/utils/config.d.ts.map +1 -1
  55. package/dist/utils/config.js +12 -0
  56. package/dist/utils/config.js.map +1 -1
  57. package/dist/utils/database.d.ts +58 -14
  58. package/dist/utils/database.d.ts.map +1 -1
  59. package/dist/utils/database.js +627 -207
  60. package/dist/utils/database.js.map +1 -1
  61. package/dist/utils/global-config.d.ts +53 -0
  62. package/dist/utils/global-config.d.ts.map +1 -0
  63. package/dist/utils/global-config.js +144 -0
  64. package/dist/utils/global-config.js.map +1 -0
  65. package/dist/utils/parser.d.ts +95 -2
  66. package/dist/utils/parser.d.ts.map +1 -1
  67. package/dist/utils/parser.js +466 -39
  68. package/dist/utils/parser.js.map +1 -1
  69. package/dist/utils/placeholder.d.ts +37 -0
  70. package/dist/utils/placeholder.d.ts.map +1 -0
  71. package/dist/utils/placeholder.js +113 -0
  72. package/dist/utils/placeholder.js.map +1 -0
  73. package/dist/utils/position.d.ts +10 -0
  74. package/dist/utils/position.d.ts.map +1 -0
  75. package/dist/utils/position.js +24 -0
  76. package/dist/utils/position.js.map +1 -0
  77. package/dist/utils/sqlite-adapter.d.ts +8 -0
  78. package/dist/utils/sqlite-adapter.d.ts.map +1 -0
  79. package/dist/utils/sqlite-adapter.js +14 -0
  80. package/dist/utils/sqlite-adapter.js.map +1 -0
  81. package/dist/utils/template.d.ts +2 -2
  82. package/dist/utils/template.d.ts.map +1 -1
  83. package/dist/utils/template.js +8 -3
  84. package/dist/utils/template.js.map +1 -1
  85. package/dist/utils/vault-resolve.d.ts +23 -0
  86. package/dist/utils/vault-resolve.d.ts.map +1 -0
  87. package/dist/utils/vault-resolve.js +86 -0
  88. package/dist/utils/vault-resolve.js.map +1 -0
  89. package/dist/utils/vault.d.ts +77 -10
  90. package/dist/utils/vault.d.ts.map +1 -1
  91. package/dist/utils/vault.js +262 -98
  92. package/dist/utils/vault.js.map +1 -1
  93. package/package.json +9 -3
@@ -2,21 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSyncCommand = createSyncCommand;
4
4
  const commander_1 = require("commander");
5
- const config_js_1 = require("../utils/config.js");
6
- const vault_js_1 = require("../utils/vault.js");
5
+ const vault_resolve_js_1 = require("../utils/vault-resolve.js");
7
6
  function createSyncCommand() {
8
7
  const command = new commander_1.Command('sync')
9
8
  .description('Sync vault with database index')
10
9
  .action(async () => {
11
- try {
12
- const vaultPath = config_js_1.ConfigManager.findVaultPath();
13
- if (!vaultPath) {
14
- console.error('❌ Not in a SecondBrain vault. Run `sb init` first.');
15
- process.exit(1);
16
- }
17
- const configManager = new config_js_1.ConfigManager(vaultPath);
18
- const config = configManager.getConfig();
19
- const vault = new vault_js_1.VaultManager(config);
10
+ await (0, vault_resolve_js_1.withVault)(async (vault) => {
20
11
  console.log('🔄 Syncing vault...');
21
12
  const result = await vault.sync();
22
13
  console.log('✅ Sync complete!');
@@ -29,12 +20,7 @@ function createSyncCommand() {
29
20
  console.log(`Total notes: ${stats.totalNotes}`);
30
21
  console.log(`Total links: ${stats.totalLinks}`);
31
22
  console.log(`Orphan notes: ${stats.orphans}`);
32
- vault.close();
33
- }
34
- catch (error) {
35
- console.error('❌ Sync failed:', error instanceof Error ? error.message : String(error));
36
- process.exit(1);
37
- }
23
+ });
38
24
  });
39
25
  return command;
40
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;AAIA,8CAuCC;AA3CD,yCAAoC;AACpC,kDAAmD;AACnD,gDAAiD;AAEjD,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SAChC,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,yBAAa,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;YAEvC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAEnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAElC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9C,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;AAGA,8CAqBC;AAxBD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SAChC,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAA,4BAAS,EAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTemplateCommand(): Command;
3
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,IAAI,OAAO,CA4D/C"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTemplateCommand = createTemplateCommand;
4
+ const commander_1 = require("commander");
5
+ const vault_resolve_js_1 = require("../utils/vault-resolve.js");
6
+ const config_js_1 = require("../utils/config.js");
7
+ const template_js_1 = require("../utils/template.js");
8
+ function createTemplateCommand() {
9
+ const command = new commander_1.Command('template')
10
+ .description('Manage note templates and their configurations');
11
+ command
12
+ .command('list')
13
+ .description('List all available templates')
14
+ .action(async () => {
15
+ await (0, vault_resolve_js_1.withVault)(async (vault) => {
16
+ const templateManager = new template_js_1.TemplateManager(vault.config);
17
+ const templates = templateManager.listTemplates();
18
+ if (templates.length === 0) {
19
+ console.log('No templates found.');
20
+ }
21
+ else {
22
+ console.log('Available templates:');
23
+ templates.forEach(t => console.log(`- ${t}`));
24
+ }
25
+ });
26
+ });
27
+ command
28
+ .command('get')
29
+ .description('Get configuration for a template')
30
+ .argument('<name>', 'Template name')
31
+ .action(async (name) => {
32
+ await (0, vault_resolve_js_1.withVault)(async (vault) => {
33
+ const configManager = new config_js_1.ConfigManager(vault.config.vaultPath);
34
+ const templateConfig = configManager.getTemplateConfig(name);
35
+ if (!templateConfig) {
36
+ console.log(`No configuration found for template: ${name}`);
37
+ console.log('{}');
38
+ }
39
+ else {
40
+ console.log(JSON.stringify(templateConfig, null, 2));
41
+ }
42
+ });
43
+ });
44
+ command
45
+ .command('set')
46
+ .description('Set configuration for a template')
47
+ .argument('<name>', 'Template name')
48
+ .option('--folder <path>', 'Default folder for new notes created with this template')
49
+ .action(async (name, options) => {
50
+ await (0, vault_resolve_js_1.withVault)(async (vault) => {
51
+ const configManager = new config_js_1.ConfigManager(vault.config.vaultPath);
52
+ const existing = configManager.getTemplateConfig(name) || {};
53
+ if (options.folder !== undefined) {
54
+ existing.targetFolder = options.folder;
55
+ }
56
+ configManager.setTemplateConfig(name, existing);
57
+ console.log(`✅ Configuration updated for template: ${name}`);
58
+ console.log(JSON.stringify(existing, null, 2));
59
+ });
60
+ });
61
+ return command;
62
+ }
63
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createVaultCommand(): Command;
3
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/commands/vault.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,kBAAkB,IAAI,OAAO,CAmM5C"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createVaultCommand = createVaultCommand;
37
+ // src/commands/vault.ts
38
+ const commander_1 = require("commander");
39
+ const config_js_1 = require("../utils/config.js");
40
+ const global_config_js_1 = require("../utils/global-config.js");
41
+ const vault_resolve_js_1 = require("../utils/vault-resolve.js");
42
+ const fs_1 = require("fs");
43
+ const path_1 = require("path");
44
+ const os_1 = require("os");
45
+ const readline = __importStar(require("readline"));
46
+ const DEFAULT_VAULT_PATH = (0, path_1.join)((0, os_1.homedir)(), 'vault');
47
+ function createReadlineInterface() {
48
+ return readline.createInterface({
49
+ input: process.stdin,
50
+ output: process.stdout
51
+ });
52
+ }
53
+ async function confirm(message) {
54
+ const rl = createReadlineInterface();
55
+ return new Promise((resolve) => {
56
+ rl.question(`${message} (y/N) `, (answer) => {
57
+ rl.close();
58
+ resolve(answer.toLowerCase() === 'y');
59
+ });
60
+ });
61
+ }
62
+ function createVaultCommand() {
63
+ const command = new commander_1.Command('vault')
64
+ .description('Manage SecondBrain vaults');
65
+ // sb vault init [path]
66
+ command
67
+ .command('init [path]')
68
+ .description('Initialize a new SecondBrain vault')
69
+ .action((path) => {
70
+ try {
71
+ const vaultPath = (0, path_1.resolve)(path ?? DEFAULT_VAULT_PATH);
72
+ const configManager = new config_js_1.ConfigManager(vaultPath);
73
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
74
+ if (configManager.isInitialized()) {
75
+ console.log('⚠️ Vault already initialized at:', vaultPath);
76
+ // 確保已註冊到全域設定
77
+ const entry = globalConfig.addVault(vaultPath);
78
+ if (entry) {
79
+ console.log(`✅ Registered as "${entry.name}" in global config`);
80
+ }
81
+ return;
82
+ }
83
+ const config = configManager.init();
84
+ const entry = globalConfig.addVault(vaultPath);
85
+ console.log('✅ SecondBrain vault initialized!');
86
+ console.log('Vault path:', config.vaultPath);
87
+ console.log('Vault name:', entry?.name ?? 'unknown');
88
+ console.log('Daily notes:', config.dailyNotesFolder);
89
+ console.log('Templates:', config.templatesFolder);
90
+ console.log();
91
+ console.log('Next steps:');
92
+ console.log(' 1. Create notes in your vault');
93
+ console.log(' 2. Run `sb sync` to index existing notes');
94
+ console.log(' 3. Use `sb capture` to create new notes');
95
+ console.log();
96
+ console.log('To use this vault:');
97
+ console.log(` eval $(sb vault use ${entry?.name ?? vaultPath})`);
98
+ }
99
+ catch (error) {
100
+ console.error('❌ Failed to initialize vault:', error instanceof Error ? error.message : String(error));
101
+ process.exit(1);
102
+ }
103
+ });
104
+ // sb vault use <name|path>
105
+ command
106
+ .command('use <nameOrPath>')
107
+ .description('Output export command to set active vault (use with eval)')
108
+ .action((nameOrPath) => {
109
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
110
+ const vault = globalConfig.findVault(nameOrPath);
111
+ let vaultPath;
112
+ if (vault) {
113
+ vaultPath = vault.path;
114
+ }
115
+ else if ((0, fs_1.existsSync)((0, path_1.join)(nameOrPath, '.secondbrain', 'config.json'))) {
116
+ vaultPath = (0, path_1.resolve)(nameOrPath);
117
+ }
118
+ else {
119
+ console.error(`❌ Vault not found: ${nameOrPath}`);
120
+ console.error('Run `sb vault list` to see available vaults');
121
+ process.exit(1);
122
+ }
123
+ // 輸出 export 語句,供 eval 使用
124
+ console.log(`export SECONDBRAIN_VAULT="${vaultPath}"`);
125
+ });
126
+ // sb vault current
127
+ command
128
+ .command('current')
129
+ .description('Show the currently active vault')
130
+ .action(() => {
131
+ const vaultPath = (0, vault_resolve_js_1.resolveVaultPath)();
132
+ if (!vaultPath) {
133
+ console.log('❌ No active vault');
134
+ console.log('Set a vault with: eval $(sb vault use <name>)');
135
+ return;
136
+ }
137
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
138
+ const vault = globalConfig.findVault(vaultPath);
139
+ const envVault = process.env.SECONDBRAIN_VAULT;
140
+ console.log('📁 Current vault:', vault?.name ?? vaultPath);
141
+ console.log(' Path:', vaultPath);
142
+ if (envVault) {
143
+ console.log(' Source: SECONDBRAIN_VAULT environment variable');
144
+ }
145
+ else if (config_js_1.ConfigManager.findVaultPath() === vaultPath) {
146
+ console.log(' Source: Local directory detection');
147
+ }
148
+ else {
149
+ console.log(' Source: Default vault');
150
+ }
151
+ });
152
+ // sb vault list
153
+ command
154
+ .command('list')
155
+ .description('List all registered vaults')
156
+ .action(() => {
157
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
158
+ const vaults = globalConfig.listVaults();
159
+ const defaultVault = globalConfig.getDefault();
160
+ const currentPath = (0, vault_resolve_js_1.resolveVaultPath)();
161
+ if (vaults.length === 0) {
162
+ console.log('No vaults registered.');
163
+ console.log('Initialize a vault with: sb vault init [path]');
164
+ return;
165
+ }
166
+ console.log('Registered vaults:\n');
167
+ for (const vault of vaults) {
168
+ const isDefault = defaultVault?.name === vault.name;
169
+ const isCurrent = currentPath === vault.path;
170
+ const markers = [
171
+ isDefault ? '(default)' : '',
172
+ isCurrent ? '(current)' : ''
173
+ ].filter(Boolean).join(' ');
174
+ console.log(` ${vault.name} ${markers}`);
175
+ console.log(` ${vault.path}`);
176
+ }
177
+ });
178
+ // sb vault default (查看)
179
+ const defaultCommand = command
180
+ .command('default')
181
+ .description('Show or set the default vault');
182
+ defaultCommand
183
+ .action(() => {
184
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
185
+ const defaultVault = globalConfig.getDefault();
186
+ if (!defaultVault) {
187
+ console.log('No default vault set.');
188
+ console.log('Set a default with: sb vault default set <name>');
189
+ return;
190
+ }
191
+ console.log('Default vault:', defaultVault.name);
192
+ console.log('Path:', defaultVault.path);
193
+ });
194
+ // sb vault default set <name|path>
195
+ defaultCommand
196
+ .command('set <nameOrPath>')
197
+ .description('Set the default vault')
198
+ .action((nameOrPath) => {
199
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
200
+ try {
201
+ globalConfig.setDefault(nameOrPath);
202
+ const vault = globalConfig.findVault(nameOrPath);
203
+ console.log(`✅ Default vault set to: ${vault?.name ?? nameOrPath}`);
204
+ }
205
+ catch (error) {
206
+ console.error('❌', error instanceof Error ? error.message : String(error));
207
+ console.error('Run `sb vault list` to see available vaults');
208
+ process.exit(1);
209
+ }
210
+ });
211
+ // sb vault delete <name|path>
212
+ command
213
+ .command('delete <nameOrPath>')
214
+ .description('Remove a vault from the registry (does not delete files)')
215
+ .action(async (nameOrPath) => {
216
+ const globalConfig = new global_config_js_1.GlobalConfigManager();
217
+ const vault = globalConfig.findVault(nameOrPath);
218
+ if (!vault) {
219
+ console.error(`❌ Vault not found: ${nameOrPath}`);
220
+ process.exit(1);
221
+ }
222
+ const confirmed = await confirm(`確定要移除 vault "${vault.name}" (${vault.path}) 的註冊嗎?`);
223
+ if (!confirmed) {
224
+ console.log('取消操作');
225
+ return;
226
+ }
227
+ globalConfig.removeVault(nameOrPath);
228
+ console.log(`✅ Removed vault: ${vault.name}`);
229
+ console.log('Note: The vault files were not deleted.');
230
+ });
231
+ return command;
232
+ }
233
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/commands/vault.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,15 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const commander_1 = require("commander");
5
5
  const init_js_1 = require("./commands/init.js");
6
+ const vault_js_1 = require("./commands/vault.js");
6
7
  const capture_js_1 = require("./commands/capture.js");
7
8
  const search_js_1 = require("./commands/search.js");
8
9
  const get_js_1 = require("./commands/get.js");
9
10
  const backlinks_js_1 = require("./commands/backlinks.js");
11
+ const outlinks_js_1 = require("./commands/outlinks.js");
12
+ const open_js_1 = require("./commands/open.js");
10
13
  const sync_js_1 = require("./commands/sync.js");
11
14
  const stats_js_1 = require("./commands/stats.js");
12
15
  const orphans_js_1 = require("./commands/orphans.js");
13
16
  const config_js_1 = require("./commands/config.js");
14
- const pkg = require("../package.json");
17
+ const template_js_1 = require("./commands/template.js");
18
+ const fs_1 = require("fs");
19
+ const path_1 = require("path");
20
+ // Resolve package.json relative to the entry script (works for dist/index.js and bun run src/index.ts)
21
+ const entryDir = (0, path_1.dirname)(process.argv[1] ?? '');
22
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(entryDir, '..', 'package.json'), 'utf-8'));
15
23
  const program = new commander_1.Command();
16
24
  program
17
25
  .name('sb')
@@ -19,14 +27,18 @@ program
19
27
  .version(pkg.version);
20
28
  // Add commands
21
29
  program.addCommand((0, init_js_1.createInitCommand)());
30
+ program.addCommand((0, vault_js_1.createVaultCommand)());
22
31
  program.addCommand((0, capture_js_1.createCaptureCommand)());
23
32
  program.addCommand((0, search_js_1.createSearchCommand)());
24
33
  program.addCommand((0, get_js_1.createGetCommand)());
25
34
  program.addCommand((0, backlinks_js_1.createBacklinksCommand)());
35
+ program.addCommand((0, outlinks_js_1.createOutlinksCommand)());
36
+ program.addCommand((0, open_js_1.createOpenCommand)());
26
37
  program.addCommand((0, sync_js_1.createSyncCommand)());
27
38
  program.addCommand((0, stats_js_1.createStatsCommand)());
28
39
  program.addCommand((0, orphans_js_1.createOrphansCommand)());
29
40
  program.addCommand((0, config_js_1.createConfigCommand)());
41
+ program.addCommand((0, template_js_1.createTemplateCommand)());
30
42
  // Default action - show help
31
43
  if (process.argv.length === 2) {
32
44
  program.help();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,gDAAuD;AACvD,sDAA6D;AAC7D,oDAA2D;AAC3D,8CAAqD;AACrD,0DAAiE;AACjE,gDAAuD;AACvD,kDAAyD;AACzD,sDAA6D;AAC7D,oDAA2D;AAC3D,uCAAwC;AAExC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,IAAA,2BAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,iCAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,+BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,yBAAgB,GAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,IAAA,qCAAsB,GAAE,CAAC,CAAC;AAC7C,OAAO,CAAC,UAAU,CAAC,IAAA,2BAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,6BAAkB,GAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,IAAA,iCAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,+BAAmB,GAAE,CAAC,CAAC;AAE1C,6BAA6B;AAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,gDAAuD;AACvD,kDAAyD;AACzD,sDAA6D;AAC7D,oDAA2D;AAC3D,8CAAqD;AACrD,0DAAiE;AACjE,wDAA+D;AAC/D,gDAAuD;AACvD,gDAAuD;AACvD,kDAAyD;AACzD,sDAA6D;AAC7D,oDAA2D;AAC3D,wDAA+D;AAC/D,2BAAkC;AAClC,+BAAqC;AAErC,uGAAuG;AACvG,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACrC,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,IAAA,2BAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,6BAAkB,GAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,IAAA,iCAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,+BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,yBAAgB,GAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,IAAA,qCAAsB,GAAE,CAAC,CAAC;AAC7C,OAAO,CAAC,UAAU,CAAC,IAAA,mCAAqB,GAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,IAAA,2BAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,2BAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,6BAAkB,GAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,IAAA,iCAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,+BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,mCAAqB,GAAE,CAAC,CAAC;AAE5C,6BAA6B;AAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,15 +1,116 @@
1
- export interface Note {
2
- id: string;
1
+ /** File stats (Obsidian FileStats): ctime/mtime in ms, size in bytes. */
2
+ export interface FileStats {
3
+ ctime: number;
4
+ mtime: number;
5
+ size: number;
6
+ }
7
+ /**
8
+ * File system info matching Obsidian's TFile.
9
+ * path = path relative to vault root; name = filename with extension;
10
+ * basename = filename without extension; extension = extension without leading dot.
11
+ */
12
+ export interface FileInfo {
3
13
  path: string;
4
- title: string;
14
+ name: string;
15
+ basename: string;
16
+ extension: string;
17
+ parent: string | null;
18
+ stat: FileStats;
19
+ content_hash?: string;
20
+ }
21
+ /** Embed with position (Obsidian ![[path]]). */
22
+ export interface EmbedRef {
23
+ target: string;
24
+ line: number;
25
+ column: number;
26
+ position: Pos;
27
+ }
28
+ /** Obsidian-aligned position types (CachedMetadata). */
29
+ /** Location: line (0-based), column, and character offset from file start. */
30
+ export interface Loc {
31
+ line: number;
32
+ col: number;
33
+ offset: number;
34
+ }
35
+ /** Span: start and end location. */
36
+ export interface Pos {
37
+ start: Loc;
38
+ end: Loc;
39
+ }
40
+ /** Base for cache items that have a position. */
41
+ export interface CacheItem {
42
+ position: Pos;
43
+ }
44
+ /** Base for link-like caches (wikilinks, embeds). */
45
+ export interface ReferenceCache extends CacheItem {
46
+ link: string;
47
+ original: string;
48
+ displayText?: string;
49
+ }
50
+ /** Wikilink [[target]] or [[target|display]]. */
51
+ export interface LinkCache extends ReferenceCache {
52
+ }
53
+ /** Embed ![[path]] or ![[path|display]]. */
54
+ export interface EmbedCache extends ReferenceCache {
55
+ }
56
+ /** Tag #tag (tag is the name without #). */
57
+ export interface TagCache extends CacheItem {
58
+ tag: string;
59
+ }
60
+ /** Heading H1–H6. */
61
+ export interface HeadingCache extends CacheItem {
62
+ heading: string;
63
+ level: number;
64
+ }
65
+ /** Block for ^block-id references. */
66
+ export interface BlockCache extends CacheItem {
67
+ id: string;
68
+ }
69
+ /** Frontmatter position in file. */
70
+ export interface FrontMatterCache {
71
+ position: Pos;
72
+ }
73
+ /** Footnote definition. */
74
+ export interface FootnoteCache extends CacheItem {
75
+ id: string;
5
76
  content: string;
6
- frontmatter: Record<string, unknown>;
7
- tags: string[];
8
- links: string[];
9
- backlinks: string[];
10
- hash: string;
11
- createdAt: string;
12
- modifiedAt: string;
77
+ }
78
+ /** Footnote reference in text. */
79
+ export interface FootnoteRefCache extends CacheItem {
80
+ id: string;
81
+ }
82
+ /** Document section (e.g. frontmatter, content). */
83
+ export interface SectionCache extends CacheItem {
84
+ id: string;
85
+ type: string;
86
+ }
87
+ /** List item with optional task state. */
88
+ export interface ListItemCache extends CacheItem {
89
+ task?: string;
90
+ }
91
+ /**
92
+ * Content-derived metadata matching Obsidian's CachedMetadata.
93
+ * Returned by MetadataCache.getFileCache(file). All fields optional.
94
+ */
95
+ export interface ContentMetadata {
96
+ links?: LinkCache[];
97
+ embeds?: EmbedCache[];
98
+ tags?: TagCache[];
99
+ headings?: HeadingCache[];
100
+ footnotes?: FootnoteCache[];
101
+ footnoteRefs?: FootnoteRefCache[];
102
+ blocks?: BlockCache[];
103
+ frontmatter?: FrontMatterCache;
104
+ sections?: SectionCache[];
105
+ listItems?: ListItemCache[];
106
+ }
107
+ /** Heading with position (H1–H6). */
108
+ export interface HeadingRef {
109
+ level: number;
110
+ text: string;
111
+ line: number;
112
+ column: number;
113
+ position: Pos;
13
114
  }
14
115
  export interface SearchResult {
15
116
  id: string;
@@ -32,11 +133,24 @@ export interface SearchFilters {
32
133
  path?: string;
33
134
  limit?: number;
34
135
  }
136
+ export interface TemplateConfig {
137
+ targetFolder?: string;
138
+ }
139
+ export interface PlaceholderContext {
140
+ /** 可注入測試用日期,預設 new Date() */
141
+ date?: Date;
142
+ /** 筆記標題(從 --title 傳入) */
143
+ title?: string;
144
+ /** Vault 名稱(basename of vault path) */
145
+ vault?: string;
146
+ }
35
147
  export interface Config {
36
148
  vaultPath: string;
149
+ captureFolder?: string;
37
150
  dailyNotesFolder: string;
38
151
  templatesFolder: string;
39
152
  dbPath: string;
153
+ templates?: Record<string, TemplateConfig>;
40
154
  }
41
155
  export interface Template {
42
156
  name: string;
@@ -66,4 +180,14 @@ export interface GraphData {
66
180
  nodes: GraphNode[];
67
181
  edges: GraphEdge[];
68
182
  }
183
+ /** 單一 Vault 的註冊資訊 */
184
+ export interface VaultEntry {
185
+ name: string;
186
+ path: string;
187
+ }
188
+ /** 全域設定檔結構 (~/.config/secondbrain/vaults.json) */
189
+ export interface GlobalConfig {
190
+ vaults: VaultEntry[];
191
+ default?: string;
192
+ }
69
193
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,qBAAqB,GAAG,aAAa,GAAG,aAAa,CAAC;IAC/F,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Config } from '../types/index.js';
1
+ import type { Config, TemplateConfig } from '../types/index.js';
2
2
  export declare class ConfigManager {
3
3
  private vaultPath;
4
4
  constructor(vaultPath?: string);
@@ -10,6 +10,8 @@ export declare class ConfigManager {
10
10
  saveConfig(config: Config): void;
11
11
  getConfig(): Config;
12
12
  updateConfig(updates: Partial<Config>): void;
13
+ getTemplateConfig(name: string): TemplateConfig | undefined;
14
+ setTemplateConfig(name: string, templateConfig: TemplateConfig): void;
13
15
  static findVaultPath(startPath?: string): string | null;
14
16
  }
15
17
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAsB;IAI7C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,aAAa,IAAI,OAAO;IAIxB,IAAI,IAAI,MAAM;IAmBd,UAAU,IAAI,MAAM,GAAG,IAAI;IAa3B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,IAAI,MAAM;IAQnB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAM5C,MAAM,CAAC,aAAa,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI;CAYvE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKhE,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAsB;IAI7C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,aAAa,IAAI,OAAO;IAIxB,IAAI,IAAI,MAAM;IAmBd,UAAU,IAAI,MAAM,GAAG,IAAI;IAa3B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,IAAI,MAAM;IAQnB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAM5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAK3D,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IASrE,MAAM,CAAC,aAAa,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI;CAYvE"}