vault-forge 2.0.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 (224) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +336 -0
  3. package/dist/actions/dummy.d.ts +2 -0
  4. package/dist/actions/dummy.d.ts.map +1 -0
  5. package/dist/actions/dummy.js +3 -0
  6. package/dist/actions/dummy.js.map +1 -0
  7. package/dist/actions/mainAction.d.ts +5 -0
  8. package/dist/actions/mainAction.d.ts.map +1 -0
  9. package/dist/actions/mainAction.js +68 -0
  10. package/dist/actions/mainAction.js.map +1 -0
  11. package/dist/commands/ai.d.ts +3 -0
  12. package/dist/commands/ai.d.ts.map +1 -0
  13. package/dist/commands/ai.js +20 -0
  14. package/dist/commands/ai.js.map +1 -0
  15. package/dist/commands/ask.d.ts +3 -0
  16. package/dist/commands/ask.d.ts.map +1 -0
  17. package/dist/commands/ask.js +15 -0
  18. package/dist/commands/ask.js.map +1 -0
  19. package/dist/commands/completion.d.ts +34 -0
  20. package/dist/commands/completion.d.ts.map +1 -0
  21. package/dist/commands/completion.js +134 -0
  22. package/dist/commands/completion.js.map +1 -0
  23. package/dist/commands/diary.d.ts +3 -0
  24. package/dist/commands/diary.d.ts.map +1 -0
  25. package/dist/commands/diary.js +15 -0
  26. package/dist/commands/diary.js.map +1 -0
  27. package/dist/commands/dummy.d.ts +2 -0
  28. package/dist/commands/dummy.d.ts.map +1 -0
  29. package/dist/commands/dummy.js +3 -0
  30. package/dist/commands/dummy.js.map +1 -0
  31. package/dist/commands/find.d.ts +2 -0
  32. package/dist/commands/find.d.ts.map +1 -0
  33. package/dist/commands/find.js +3 -0
  34. package/dist/commands/find.js.map +1 -0
  35. package/dist/commands/init.d.ts +3 -0
  36. package/dist/commands/init.d.ts.map +1 -0
  37. package/dist/commands/init.js +46 -0
  38. package/dist/commands/init.js.map +1 -0
  39. package/dist/commands/search.d.ts +3 -0
  40. package/dist/commands/search.d.ts.map +1 -0
  41. package/dist/commands/search.js +29 -0
  42. package/dist/commands/search.js.map +1 -0
  43. package/dist/commands/tag.d.ts +3 -0
  44. package/dist/commands/tag.d.ts.map +1 -0
  45. package/dist/commands/tag.js +37 -0
  46. package/dist/commands/tag.js.map +1 -0
  47. package/dist/config/locales/en.d.ts +188 -0
  48. package/dist/config/locales/en.d.ts.map +1 -0
  49. package/dist/config/locales/en.js +190 -0
  50. package/dist/config/locales/en.js.map +1 -0
  51. package/dist/config/locales/ja.d.ts +188 -0
  52. package/dist/config/locales/ja.d.ts.map +1 -0
  53. package/dist/config/locales/ja.js +190 -0
  54. package/dist/config/locales/ja.js.map +1 -0
  55. package/dist/config/prompts/en.d.ts +6 -0
  56. package/dist/config/prompts/en.d.ts.map +1 -0
  57. package/dist/config/prompts/en.js +25 -0
  58. package/dist/config/prompts/en.js.map +1 -0
  59. package/dist/config/prompts/ja.d.ts +6 -0
  60. package/dist/config/prompts/ja.d.ts.map +1 -0
  61. package/dist/config/prompts/ja.js +25 -0
  62. package/dist/config/prompts/ja.js.map +1 -0
  63. package/dist/config/text.d.ts +195 -0
  64. package/dist/config/text.d.ts.map +1 -0
  65. package/dist/config/text.js +15 -0
  66. package/dist/config/text.js.map +1 -0
  67. package/dist/core/PromptLoader.d.ts +30 -0
  68. package/dist/core/PromptLoader.d.ts.map +1 -0
  69. package/dist/core/PromptLoader.js +187 -0
  70. package/dist/core/PromptLoader.js.map +1 -0
  71. package/dist/core/PromptSmith.d.ts +21 -0
  72. package/dist/core/PromptSmith.d.ts.map +1 -0
  73. package/dist/core/PromptSmith.js +197 -0
  74. package/dist/core/PromptSmith.js.map +1 -0
  75. package/dist/core/VaultForge.d.ts +17 -0
  76. package/dist/core/VaultForge.d.ts.map +1 -0
  77. package/dist/core/VaultForge.js +75 -0
  78. package/dist/core/VaultForge.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +28 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/lib/completion.d.ts +8 -0
  84. package/dist/lib/completion.d.ts.map +1 -0
  85. package/dist/lib/completion.js +55 -0
  86. package/dist/lib/completion.js.map +1 -0
  87. package/dist/lib/dummy.d.ts +2 -0
  88. package/dist/lib/dummy.d.ts.map +1 -0
  89. package/dist/lib/dummy.js +3 -0
  90. package/dist/lib/dummy.js.map +1 -0
  91. package/dist/lib/mainAction.d.ts +8 -0
  92. package/dist/lib/mainAction.d.ts.map +1 -0
  93. package/dist/lib/mainAction.js +126 -0
  94. package/dist/lib/mainAction.js.map +1 -0
  95. package/dist/lib/search.d.ts +4 -0
  96. package/dist/lib/search.d.ts.map +1 -0
  97. package/dist/lib/search.js +87 -0
  98. package/dist/lib/search.js.map +1 -0
  99. package/dist/lib/stdin.d.ts +10 -0
  100. package/dist/lib/stdin.d.ts.map +1 -0
  101. package/dist/lib/stdin.js +20 -0
  102. package/dist/lib/stdin.js.map +1 -0
  103. package/dist/services/AIModelService.d.ts +33 -0
  104. package/dist/services/AIModelService.d.ts.map +1 -0
  105. package/dist/services/AIModelService.js +116 -0
  106. package/dist/services/AIModelService.js.map +1 -0
  107. package/dist/services/AIOrchestratorService.d.ts +57 -0
  108. package/dist/services/AIOrchestratorService.d.ts.map +1 -0
  109. package/dist/services/AIOrchestratorService.js +164 -0
  110. package/dist/services/AIOrchestratorService.js.map +1 -0
  111. package/dist/services/ConfigService.d.ts +61 -0
  112. package/dist/services/ConfigService.d.ts.map +1 -0
  113. package/dist/services/ConfigService.js +132 -0
  114. package/dist/services/ConfigService.js.map +1 -0
  115. package/dist/services/ObsidianService.d.ts +97 -0
  116. package/dist/services/ObsidianService.d.ts.map +1 -0
  117. package/dist/services/ObsidianService.js +264 -0
  118. package/dist/services/ObsidianService.js.map +1 -0
  119. package/dist/services/TagService.d.ts +26 -0
  120. package/dist/services/TagService.d.ts.map +1 -0
  121. package/dist/services/TagService.js +73 -0
  122. package/dist/services/TagService.js.map +1 -0
  123. package/dist/services/UserInteraction.d.ts +100 -0
  124. package/dist/services/UserInteraction.d.ts.map +1 -0
  125. package/dist/services/UserInteraction.js +169 -0
  126. package/dist/services/UserInteraction.js.map +1 -0
  127. package/dist/services/XService.d.ts +15 -0
  128. package/dist/services/XService.d.ts.map +1 -0
  129. package/dist/services/XService.js +40 -0
  130. package/dist/services/XService.js.map +1 -0
  131. package/dist/services/ai/AIServiceFactory.d.ts +26 -0
  132. package/dist/services/ai/AIServiceFactory.d.ts.map +1 -0
  133. package/dist/services/ai/AIServiceFactory.js +69 -0
  134. package/dist/services/ai/AIServiceFactory.js.map +1 -0
  135. package/dist/services/ai/ClaudeService.d.ts +9 -0
  136. package/dist/services/ai/ClaudeService.d.ts.map +1 -0
  137. package/dist/services/ai/ClaudeService.js +59 -0
  138. package/dist/services/ai/ClaudeService.js.map +1 -0
  139. package/dist/services/ai/GeminiService.d.ts +9 -0
  140. package/dist/services/ai/GeminiService.d.ts.map +1 -0
  141. package/dist/services/ai/GeminiService.js +46 -0
  142. package/dist/services/ai/GeminiService.js.map +1 -0
  143. package/dist/services/ai/GroqService.d.ts +9 -0
  144. package/dist/services/ai/GroqService.d.ts.map +1 -0
  145. package/dist/services/ai/GroqService.js +53 -0
  146. package/dist/services/ai/GroqService.js.map +1 -0
  147. package/dist/services/ai/MockAIService.d.ts +8 -0
  148. package/dist/services/ai/MockAIService.d.ts.map +1 -0
  149. package/dist/services/ai/MockAIService.js +24 -0
  150. package/dist/services/ai/MockAIService.js.map +1 -0
  151. package/dist/services/ai/OpenAIService.d.ts +9 -0
  152. package/dist/services/ai/OpenAIService.d.ts.map +1 -0
  153. package/dist/services/ai/OpenAIService.js +51 -0
  154. package/dist/services/ai/OpenAIService.js.map +1 -0
  155. package/dist/strategies/BaseStrategy.d.ts +36 -0
  156. package/dist/strategies/BaseStrategy.d.ts.map +1 -0
  157. package/dist/strategies/BaseStrategy.js +110 -0
  158. package/dist/strategies/BaseStrategy.js.map +1 -0
  159. package/dist/strategies/DebugStrategy.d.ts +13 -0
  160. package/dist/strategies/DebugStrategy.d.ts.map +1 -0
  161. package/dist/strategies/DebugStrategy.js +16 -0
  162. package/dist/strategies/DebugStrategy.js.map +1 -0
  163. package/dist/strategies/DiaryStrategy.d.ts +19 -0
  164. package/dist/strategies/DiaryStrategy.d.ts.map +1 -0
  165. package/dist/strategies/DiaryStrategy.js +69 -0
  166. package/dist/strategies/DiaryStrategy.js.map +1 -0
  167. package/dist/strategies/GeneralStrategy.d.ts +8 -0
  168. package/dist/strategies/GeneralStrategy.d.ts.map +1 -0
  169. package/dist/strategies/GeneralStrategy.js +11 -0
  170. package/dist/strategies/GeneralStrategy.js.map +1 -0
  171. package/dist/strategies/InitStrategy.d.ts +19 -0
  172. package/dist/strategies/InitStrategy.d.ts.map +1 -0
  173. package/dist/strategies/InitStrategy.js +122 -0
  174. package/dist/strategies/InitStrategy.js.map +1 -0
  175. package/dist/strategies/SearchStrategy.d.ts +19 -0
  176. package/dist/strategies/SearchStrategy.d.ts.map +1 -0
  177. package/dist/strategies/SearchStrategy.js +112 -0
  178. package/dist/strategies/SearchStrategy.js.map +1 -0
  179. package/dist/strategies/XPostStrategy.d.ts +27 -0
  180. package/dist/strategies/XPostStrategy.d.ts.map +1 -0
  181. package/dist/strategies/XPostStrategy.js +119 -0
  182. package/dist/strategies/XPostStrategy.js.map +1 -0
  183. package/dist/templates/completion.bash +24 -0
  184. package/dist/templates/dailyNote.d.ts +2 -0
  185. package/dist/templates/dailyNote.d.ts.map +1 -0
  186. package/dist/templates/dailyNote.js +8 -0
  187. package/dist/templates/dailyNote.js.map +1 -0
  188. package/dist/templates/defaultPrompt.d.ts +2 -0
  189. package/dist/templates/defaultPrompt.d.ts.map +1 -0
  190. package/dist/templates/defaultPrompt.js +28 -0
  191. package/dist/templates/defaultPrompt.js.map +1 -0
  192. package/dist/templates/obsidianNote.d.ts +3 -0
  193. package/dist/templates/obsidianNote.d.ts.map +1 -0
  194. package/dist/templates/obsidianNote.js +17 -0
  195. package/dist/templates/obsidianNote.js.map +1 -0
  196. package/dist/templates/tokenUsage.d.ts +20 -0
  197. package/dist/templates/tokenUsage.d.ts.map +1 -0
  198. package/dist/templates/tokenUsage.js +50 -0
  199. package/dist/templates/tokenUsage.js.map +1 -0
  200. package/dist/test-tabtab.d.ts +2 -0
  201. package/dist/test-tabtab.d.ts.map +1 -0
  202. package/dist/test-tabtab.js +50 -0
  203. package/dist/test-tabtab.js.map +1 -0
  204. package/dist/types/constants.d.ts +16 -0
  205. package/dist/types/constants.d.ts.map +1 -0
  206. package/dist/types/constants.js +14 -0
  207. package/dist/types/constants.js.map +1 -0
  208. package/dist/types/interfaces.d.ts +56 -0
  209. package/dist/types/interfaces.d.ts.map +1 -0
  210. package/dist/types/interfaces.js +6 -0
  211. package/dist/types/interfaces.js.map +1 -0
  212. package/dist/types/schemas.d.ts +18 -0
  213. package/dist/types/schemas.d.ts.map +1 -0
  214. package/dist/types/schemas.js +13 -0
  215. package/dist/types/schemas.js.map +1 -0
  216. package/dist/utils/completion.d.ts +8 -0
  217. package/dist/utils/completion.d.ts.map +1 -0
  218. package/dist/utils/completion.js +58 -0
  219. package/dist/utils/completion.js.map +1 -0
  220. package/dist/utils/dummy.d.ts +2 -0
  221. package/dist/utils/dummy.d.ts.map +1 -0
  222. package/dist/utils/dummy.js +3 -0
  223. package/dist/utils/dummy.js.map +1 -0
  224. package/package.json +55 -0
@@ -0,0 +1,197 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs/promises';
3
+ import matter from 'gray-matter';
4
+ import { z } from 'zod';
5
+ import { PromptFileSchema } from '../types/schemas.js';
6
+ import { DEFAULT_PROMPTS } from '../templates/defaultPrompt.js';
7
+ import { TEXT } from '../config/text.js';
8
+ import { ObsidianService } from '../services/ObsidianService.js';
9
+ import { ConfigService } from '../services/ConfigService.js';
10
+ import { select, text as clackText, isCancel, cancel } from '@clack/prompts';
11
+ import { AIProvider, AppMode } from '../types/constants.js';
12
+ import { AIOrchestratorService } from '../services/AIOrchestratorService.js';
13
+ export const BACK_SIGNAL = Symbol('BACK');
14
+ export class PromptSmith {
15
+ obsidian;
16
+ lang;
17
+ aiOrchestrator;
18
+ configService;
19
+ constructor(obsidian, lang, configService) {
20
+ this.obsidian = obsidian;
21
+ this.lang = lang;
22
+ this.configService = configService;
23
+ this.aiOrchestrator = new AIOrchestratorService(obsidian.getVaultPath(), this.configService);
24
+ }
25
+ // ============================================================
26
+ // プロンプト管理機能 / Prompt Management
27
+ // ============================================================
28
+ async load(promptName) {
29
+ const relativePath = path.join('_AI_Prompts', 'prompts', this.lang, `${promptName}.md`);
30
+ try {
31
+ const fileContent = await this.obsidian.readNote(relativePath);
32
+ const { content, data } = matter(fileContent);
33
+ const validated = PromptFileSchema.parse({
34
+ frontmatter: data,
35
+ content: content.trim()
36
+ });
37
+ return {
38
+ content: validated.content,
39
+ aiProvider: validated.frontmatter?.aiProvider,
40
+ model: validated.frontmatter?.model,
41
+ outputMode: validated.frontmatter?.outputMode
42
+ };
43
+ }
44
+ catch (error) {
45
+ if (error.code === 'ENOENT') {
46
+ const result = await this.create(promptName, false);
47
+ if (result === BACK_SIGNAL)
48
+ throw new Error(TEXT.errors.unexpectedBackSignal);
49
+ const { content, data } = matter(result);
50
+ return { content: content.trim(), ...data };
51
+ }
52
+ if (error instanceof z.ZodError) {
53
+ const contentError = error.issues.find(issue => issue.path.includes('content') && issue.code === 'too_small');
54
+ if (contentError) {
55
+ const errorMessage = TEXT.loader.loadErrorDetail.replace('{filePath}', relativePath);
56
+ throw new Error(`${errorMessage}\n${TEXT.loader.reason}: ${TEXT.validation.promptTooShort}`);
57
+ }
58
+ }
59
+ const errorMessage = TEXT.loader.loadErrorDetail.replace('{filePath}', relativePath);
60
+ throw new Error(`${errorMessage}\n${TEXT.loader.reason}: ${error.message}`);
61
+ }
62
+ }
63
+ async create(promptName, interactive) {
64
+ const relativePath = path.join('_AI_Prompts', 'prompts', this.lang, `${promptName}.md`);
65
+ let defaultContent = DEFAULT_PROMPTS[promptName];
66
+ if (!defaultContent) {
67
+ const errorMessage = TEXT.loader.noDefaultPrompt.replace('{promptName}', promptName);
68
+ throw new Error(errorMessage);
69
+ }
70
+ if (interactive) {
71
+ const result = await this.injectAIConfig(defaultContent, promptName);
72
+ if (result === BACK_SIGNAL)
73
+ return BACK_SIGNAL;
74
+ defaultContent = result;
75
+ }
76
+ await this.obsidian.createNote(relativePath, defaultContent);
77
+ const logMessage = TEXT.loader.createdDefaultFile.replace('{filePath}', relativePath);
78
+ console.log(logMessage);
79
+ return defaultContent;
80
+ }
81
+ async updateAI(promptName) {
82
+ const relativePath = path.join('_AI_Prompts', 'prompts', this.lang, `${promptName}.md`);
83
+ try {
84
+ const fileContent = await this.obsidian.readNote(relativePath);
85
+ const newContent = await this.injectAIConfig(fileContent, promptName);
86
+ if (newContent === BACK_SIGNAL)
87
+ return BACK_SIGNAL;
88
+ await this.obsidian.createNote(relativePath, newContent);
89
+ console.log(TEXT.ui.aiSettingsUpdatedFor.replace('{mode}', promptName));
90
+ }
91
+ catch (error) {
92
+ if (error.code === 'ENOENT') {
93
+ const result = await this.create(promptName, true);
94
+ if (result === BACK_SIGNAL)
95
+ return BACK_SIGNAL;
96
+ return;
97
+ }
98
+ else {
99
+ throw error;
100
+ }
101
+ }
102
+ }
103
+ // ============================================================
104
+ // AIモデル管理機能 / AI Model Management (Delegated to AIOrchestratorService)
105
+ // ============================================================
106
+ async initializeModels() {
107
+ return await this.aiOrchestrator.initialize();
108
+ }
109
+ async getModels(provider) {
110
+ return await this.aiOrchestrator.getModels(provider);
111
+ }
112
+ async addModel(provider, model) {
113
+ return await this.aiOrchestrator.addModel(provider, model);
114
+ }
115
+ async removeModel(provider, model) {
116
+ return await this.aiOrchestrator.removeModel(provider, model);
117
+ }
118
+ async resolveProvider(modelName) {
119
+ return await this.aiOrchestrator.inferProvider(modelName);
120
+ }
121
+ // ============================================================
122
+ // 内部ヘルパーメソッド / Internal Helper Methods
123
+ // ============================================================
124
+ async injectAIConfig(fileContent, promptName) {
125
+ const availableProviders = this.configService.getAvailableProviders();
126
+ if (availableProviders.length > 0) {
127
+ const options = availableProviders.map(p => ({ value: p, label: p }));
128
+ options.push({ value: 'BACK', label: TEXT.ui.backOption });
129
+ const selectedProvider = await select({
130
+ message: TEXT.ui.selectAIForMode.replace('{mode}', promptName),
131
+ options: options,
132
+ });
133
+ if (isCancel(selectedProvider)) {
134
+ cancel(TEXT.ui.operationCancelled);
135
+ process.exit(0);
136
+ }
137
+ if (selectedProvider === 'BACK') {
138
+ return BACK_SIGNAL;
139
+ }
140
+ const provider = selectedProvider;
141
+ const models = await this.getModels(provider);
142
+ const modelOptions = models.map(m => ({ value: m, label: m }));
143
+ modelOptions.push({ value: 'CUSTOM', label: TEXT.ui.customModelOption });
144
+ const selectedModel = await select({
145
+ message: TEXT.ui.selectModel,
146
+ options: modelOptions,
147
+ });
148
+ if (isCancel(selectedModel)) {
149
+ cancel(TEXT.ui.operationCancelled);
150
+ process.exit(0);
151
+ }
152
+ let model = selectedModel;
153
+ if (selectedModel === 'CUSTOM') {
154
+ const customModel = await clackText({
155
+ message: TEXT.ui.enterCustomModel,
156
+ placeholder: TEXT.ui.customModelPlaceholder,
157
+ });
158
+ if (isCancel(customModel)) {
159
+ cancel(TEXT.ui.operationCancelled);
160
+ process.exit(0);
161
+ }
162
+ model = customModel;
163
+ await this.addModel(provider, model);
164
+ }
165
+ const outputModeOptions = [
166
+ { value: 'normal', label: TEXT.ui.outputModeNormal },
167
+ { value: 'stream', label: TEXT.ui.outputModeStream },
168
+ ];
169
+ if (promptName !== AppMode.GENERAL) {
170
+ outputModeOptions.push({ value: 'background', label: TEXT.ui.outputModeBackground });
171
+ }
172
+ const selectedOutputMode = await select({
173
+ message: TEXT.ui.selectOutputMode.replace('{mode}', promptName),
174
+ options: outputModeOptions,
175
+ initialValue: 'normal',
176
+ });
177
+ if (isCancel(selectedOutputMode)) {
178
+ cancel(TEXT.ui.operationCancelled);
179
+ process.exit(0);
180
+ }
181
+ const { data: frontmatter, content } = matter(fileContent);
182
+ const existingTags = frontmatter.tags || [];
183
+ const providerModels = await this.getModels(provider);
184
+ const newTags = Array.from(new Set([...existingTags, selectedProvider, model, ...providerModels]));
185
+ const newFrontmatter = {
186
+ ...frontmatter,
187
+ aiProvider: selectedProvider,
188
+ model: model,
189
+ outputMode: selectedOutputMode,
190
+ tags: newTags
191
+ };
192
+ return matter.stringify(content, newFrontmatter);
193
+ }
194
+ return fileContent;
195
+ }
196
+ }
197
+ //# sourceMappingURL=PromptSmith.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptSmith.js","sourceRoot":"","sources":["../../src/core/PromptSmith.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { AppMode } from '../types/constants.js';
2
+ import type { VaultForgeConfig } from '../types/interfaces.js';
3
+ export declare class VaultForge {
4
+ private config;
5
+ private obsidian;
6
+ private promptSmith;
7
+ private aiOrchestrator;
8
+ private configService;
9
+ constructor(config: VaultForgeConfig);
10
+ /**
11
+ * 指定されたモードが detach (バックグラウンド実行) をサポートしているか判定する。
12
+ * Determines if the specified mode supports detach (background execution).
13
+ */
14
+ static supportsDetach(mode: AppMode): boolean;
15
+ run(): Promise<any>;
16
+ }
17
+ //# sourceMappingURL=VaultForge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaultForge.d.ts","sourceRoot":"","sources":["../../src/core/VaultForge.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAc,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAgB,gBAAgB,EAAuB,MAAM,wBAAwB,CAAC;AAqBlG,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,gBAAgB;IAYpC;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAKvC,GAAG;CA+CZ"}
@@ -0,0 +1,75 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs/promises';
3
+ import { AppMode, AIProvider } from '../types/constants.js';
4
+ import { ObsidianService } from '../services/ObsidianService.js';
5
+ import { PromptSmith } from './PromptSmith.js';
6
+ import { DebugStrategy } from "../strategies/DebugStrategy.js";
7
+ import { GeneralStrategy } from "../strategies/GeneralStrategy.js";
8
+ import { XPostStrategy } from "../strategies/XPostStrategy.js";
9
+ import { DiaryStrategy } from "../strategies/DiaryStrategy.js";
10
+ import { InitStrategy } from "../strategies/InitStrategy.js";
11
+ import { TEXT } from '../config/text.js';
12
+ import { confirm, isCancel, cancel, intro, log, spinner } from '@clack/prompts';
13
+ import { AIOrchestratorService } from '../services/AIOrchestratorService.js';
14
+ import { ConfigService } from '../services/ConfigService.js';
15
+ const MODE_CONFIG = {
16
+ [AppMode.GENERAL]: { Strategy: GeneralStrategy },
17
+ [AppMode.DEBUG]: { Strategy: DebugStrategy },
18
+ [AppMode.X_POST]: { Strategy: XPostStrategy },
19
+ [AppMode.DIARY]: { Strategy: DiaryStrategy },
20
+ [AppMode.INIT]: { Strategy: InitStrategy },
21
+ };
22
+ export class VaultForge {
23
+ config;
24
+ obsidian;
25
+ promptSmith;
26
+ aiOrchestrator;
27
+ configService;
28
+ constructor(config) {
29
+ this.config = config;
30
+ const vaultPath = config.vaultPath;
31
+ this.configService = new ConfigService();
32
+ const lang = this.configService.language;
33
+ this.obsidian = new ObsidianService(vaultPath);
34
+ this.promptSmith = new PromptSmith(this.obsidian, lang, this.configService);
35
+ this.aiOrchestrator = new AIOrchestratorService(vaultPath, this.configService);
36
+ }
37
+ /**
38
+ * 指定されたモードが detach (バックグラウンド実行) をサポートしているか判定する。
39
+ * Determines if the specified mode supports detach (background execution).
40
+ */
41
+ static supportsDetach(mode) {
42
+ const modeConfig = MODE_CONFIG[mode] || MODE_CONFIG[AppMode.GENERAL];
43
+ return modeConfig.Strategy.supportsDetach;
44
+ }
45
+ async run() {
46
+ const { inputData, mode, cliOptions } = this.config;
47
+ const now = this.config.date || new Date();
48
+ const modeConfig = MODE_CONFIG[mode] || MODE_CONFIG[AppMode.GENERAL];
49
+ const strategy = new modeConfig.Strategy();
50
+ if (this.configService.isDetachedMode && !modeConfig.Strategy.supportsDetach) {
51
+ throw new Error(TEXT.errors.detachNotSupported.replace('{mode}', mode));
52
+ }
53
+ const dateStr = now.toISOString().split('T')[0] || 'unknown-date';
54
+ const timeStr = now.toTimeString().split(' ')[0]?.replace(/:/g, '') || '000000';
55
+ const relativePath = path.join('Inbox', mode, dateStr, `log_${timeStr}.md`);
56
+ let resolvedOverrideModel = cliOptions?.model ? { provider: '', model: cliOptions.model } : undefined;
57
+ if (mode !== AppMode.INIT && resolvedOverrideModel && !resolvedOverrideModel.provider) {
58
+ const provider = await this.aiOrchestrator.inferProvider(resolvedOverrideModel.model);
59
+ if (provider) {
60
+ resolvedOverrideModel = { ...resolvedOverrideModel, provider };
61
+ }
62
+ else {
63
+ console.error(TEXT.errors.modelNotFound.replace('{model}', resolvedOverrideModel.model));
64
+ console.error(TEXT.errors.providerInferenceFailed);
65
+ process.exit(1);
66
+ }
67
+ }
68
+ const result = await strategy.execute(inputData, this.obsidian, this.promptSmith, this.aiOrchestrator, this.configService, { relativePath, fullPath: "" }, now, this.config.instruction, resolvedOverrideModel, cliOptions);
69
+ if (resolvedOverrideModel) {
70
+ await this.aiOrchestrator.addModel(resolvedOverrideModel.provider, resolvedOverrideModel.model);
71
+ }
72
+ return result;
73
+ }
74
+ }
75
+ //# sourceMappingURL=VaultForge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaultForge.js","sourceRoot":"","sources":["../../src/core/VaultForge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerCompletionCommand, setupCompletion } from './commands/completion.js';
4
+ import { registerInitCommand } from './commands/init.js';
5
+ import { registerAiCommand } from './commands/ai.js';
6
+ import { registerDiaryCommand } from './commands/diary.js';
7
+ import { registerSearchCommand } from './commands/search.js';
8
+ import { registerTagCommand } from './commands/tag.js';
9
+ import { TEXT } from './config/text.js';
10
+ if (setupCompletion()) {
11
+ process.exit(0);
12
+ }
13
+ const program = new Command();
14
+ program
15
+ .name('vf')
16
+ .description(TEXT.appDescription)
17
+ .version('2.0.0');
18
+ registerCompletionCommand(program);
19
+ registerInitCommand(program);
20
+ registerAiCommand(program);
21
+ registerDiaryCommand(program);
22
+ registerSearchCommand(program);
23
+ registerTagCommand(program);
24
+ if (!process.argv.slice(2).length) {
25
+ program.outputHelp();
26
+ }
27
+ program.parse(process.argv);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,IAAI,eAAe,EAAE,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;KAChC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import omelette from 'omelette';
2
+ export declare const completion: omelette.Instance;
3
+ /**
4
+ * 補完候補のリストを取得する(#を付けない)
5
+ */
6
+ export declare const getCandidates: () => string[];
7
+ export declare const setupCompletion: () => void;
8
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,eAAO,MAAM,UAAU,mBAAiC,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,EAqBtC,CAAC;AAEF,eAAO,MAAM,eAAe,YA0B3B,CAAC"}
@@ -0,0 +1,55 @@
1
+ import omelette from 'omelette';
2
+ import * as fsSync from 'fs';
3
+ import * as path from 'path';
4
+ export const completion = omelette('vf <action> <item>');
5
+ /**
6
+ * 補完候補のリストを取得する(#を付けない)
7
+ */
8
+ export const getCandidates = () => {
9
+ try {
10
+ const vaultPath = process.env.OBSIDIAN_VAULT_PATH;
11
+ if (!vaultPath)
12
+ return [];
13
+ const candidates = [];
14
+ const tagsPath = path.join(vaultPath, '_AI_Prompts', 'tags.json');
15
+ if (fsSync.existsSync(tagsPath)) {
16
+ const tags = JSON.parse(fsSync.readFileSync(tagsPath, 'utf-8'));
17
+ if (Array.isArray(tags))
18
+ candidates.push(...tags);
19
+ }
20
+ const modelsPath = path.join(vaultPath, '_AI_Prompts', 'ai-models.json');
21
+ if (fsSync.existsSync(modelsPath)) {
22
+ const modelsData = JSON.parse(fsSync.readFileSync(modelsPath, 'utf-8'));
23
+ Object.values(modelsData).forEach((models) => {
24
+ if (Array.isArray(models))
25
+ candidates.push(...models);
26
+ });
27
+ }
28
+ return candidates;
29
+ }
30
+ catch (e) {
31
+ return [];
32
+ }
33
+ };
34
+ export const setupCompletion = () => {
35
+ completion.on('action', ({ reply }) => {
36
+ reply(['ask', 'diary', 'd', 'search', 's', 'init', 'completion']);
37
+ });
38
+ completion.on('item', ({ reply, line }) => {
39
+ const parts = line.split(/\s+/);
40
+ const action = parts[1] || '';
41
+ const askOptions = ['--mode', '-m', '--instruction', '-i', '--detach', '-d', '--model']; // -f 削除
42
+ const diaryOptions = ['--task', '-t'];
43
+ if (['ask', 'diary', 'd', 'search', 's'].includes(action)) {
44
+ reply([...getCandidates(), ...(action === 'ask' ? askOptions : (action === 'diary' || action === 'd' ? diaryOptions : []))]);
45
+ }
46
+ });
47
+ const isCompletionRequest = process.argv.some(arg => arg.includes('--comp') || arg === '_completion' || arg === 'completion');
48
+ if (isCompletionRequest) {
49
+ if (process.argv.some(arg => arg.includes('--compzsh') || arg.includes('--compbash') || arg === '--completion')) {
50
+ completion.init();
51
+ process.exit(0);
52
+ }
53
+ }
54
+ };
55
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dummy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy.d.ts","sourceRoot":"","sources":["../../src/lib/dummy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // dummy
3
+ //# sourceMappingURL=dummy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy.js","sourceRoot":"","sources":["../../src/lib/dummy.ts"],"names":[],"mappings":";AAAA,QAAQ"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLIからの入力を解析し、VaultForgeの実行を準備・トリガーするメインアクション。
3
+ * Parses input from the CLI, prepares, and triggers the execution of VaultForge.
4
+ * @param {string | undefined} inputArg - コマンドライン引数として渡された入力テキスト / Input text passed as a command-line argument.
5
+ * @param {any} options - commanderから渡されるオプションオブジェクト / Options object passed from commander.
6
+ */
7
+ export declare function mainAction(inputArg: string | undefined, options: any): Promise<void>;
8
+ //# sourceMappingURL=mainAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mainAction.d.ts","sourceRoot":"","sources":["../../src/lib/mainAction.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,GAAG,iBAqH1E"}
@@ -0,0 +1,126 @@
1
+ import { spawn } from 'child_process';
2
+ import { VaultForge } from '../core/VaultForge.js';
3
+ import { AppMode } from '../types/constants.js';
4
+ import { getTags } from '../commands/completion.js';
5
+ import { readStdin } from './stdin.js';
6
+ import { TEXT } from '../config/text.js';
7
+ import { ConfigService } from '../services/ConfigService.js';
8
+ import * as fs from 'fs/promises';
9
+ /**
10
+ * CLIからの入力を解析し、VaultForgeの実行を準備・トリガーするメインアクション。
11
+ * Parses input from the CLI, prepares, and triggers the execution of VaultForge.
12
+ * @param {string | undefined} inputArg - コマンドライン引数として渡された入力テキスト / Input text passed as a command-line argument.
13
+ * @param {any} options - commanderから渡されるオプションオブジェクト / Options object passed from commander.
14
+ */
15
+ export async function mainAction(inputArg, options) {
16
+ try {
17
+ if (options.detach && options.stream) {
18
+ console.error(TEXT.errors.optionConflict.replace('{option1}', '--stream').replace('{option2}', '--detach'));
19
+ process.exit(1);
20
+ }
21
+ if (options.detach && options.normal) {
22
+ console.error(TEXT.errors.optionConflict.replace('{option1}', '--normal').replace('{option2}', '--detach'));
23
+ process.exit(1);
24
+ }
25
+ if (options.stream && options.normal) {
26
+ console.error(TEXT.errors.optionConflict.replace('{option1}', '--stream').replace('{option2}', '--normal'));
27
+ process.exit(1);
28
+ }
29
+ let mode = options.preset || AppMode.GENERAL;
30
+ const configService = new ConfigService();
31
+ if (!configService.hasEnvFile()) {
32
+ console.error(TEXT.errors.envMissing);
33
+ console.error(TEXT.ui.runInit);
34
+ process.exit(1);
35
+ }
36
+ else if (!configService.hasVaultPath()) {
37
+ console.error(TEXT.errors.vaultPathNotSet);
38
+ console.error(TEXT.ui.runInit);
39
+ process.exit(1);
40
+ }
41
+ const vaultPath = configService.vaultPath;
42
+ if (options.detach) {
43
+ if (!VaultForge.supportsDetach(mode)) {
44
+ console.error(TEXT.errors.detachNotSupported.replace('{mode}', mode));
45
+ process.exit(1);
46
+ }
47
+ const args = process.argv.slice(2).filter(arg => arg !== '-d' && arg !== '--detach');
48
+ const subprocess = spawn(process.argv[0] || 'node', [process.argv[1] || '', ...args], {
49
+ detached: true,
50
+ stdio: 'ignore',
51
+ env: {
52
+ ...process.env,
53
+ VF_DETACHED_MODE: 'true'
54
+ }
55
+ });
56
+ subprocess.unref();
57
+ process.exit(0);
58
+ }
59
+ const validCandidates = getTags();
60
+ const shouldAutoTag = options.autoTag !== false;
61
+ let finalInputData = "";
62
+ let finalInstruction = options.instruction || "";
63
+ const { data: stdinData, isPiped } = await readStdin();
64
+ if (isPiped) {
65
+ finalInputData = stdinData;
66
+ if (inputArg && inputArg.trim()) {
67
+ if (finalInstruction) {
68
+ finalInstruction += `\n${inputArg}`;
69
+ }
70
+ else {
71
+ finalInstruction = inputArg;
72
+ }
73
+ }
74
+ }
75
+ else if (options.file) {
76
+ try {
77
+ finalInputData = await fs.readFile(options.file, 'utf-8');
78
+ if (inputArg && inputArg.trim()) {
79
+ if (finalInstruction) {
80
+ finalInstruction += `\n${inputArg}`;
81
+ }
82
+ else {
83
+ finalInstruction = inputArg;
84
+ }
85
+ }
86
+ }
87
+ catch (e) {
88
+ console.error(`${TEXT.errors.fileReadError} ${options.file}`);
89
+ process.exit(1);
90
+ }
91
+ }
92
+ else {
93
+ finalInputData = (inputArg || "").split(' ').map(word => {
94
+ if (shouldAutoTag && validCandidates.includes(word)) {
95
+ return `#${word}`;
96
+ }
97
+ return word;
98
+ }).join(' ');
99
+ }
100
+ if (!finalInputData.trim() && !finalInstruction && mode !== AppMode.DIARY && mode !== AppMode.INIT) {
101
+ }
102
+ let overrideOutputMode = undefined;
103
+ if (options.stream) {
104
+ overrideOutputMode = 'stream';
105
+ }
106
+ else if (options.normal) {
107
+ overrideOutputMode = 'normal';
108
+ }
109
+ const config = {
110
+ vaultPath: vaultPath,
111
+ inputData: finalInputData,
112
+ mode: mode,
113
+ instruction: finalInstruction,
114
+ cliOptions: options,
115
+ isPiped: isPiped
116
+ };
117
+ const app = new VaultForge(config);
118
+ await app.run();
119
+ }
120
+ catch (e) {
121
+ const errorMessage = e instanceof Error ? e.message : String(e);
122
+ console.error(`${TEXT.errors.mainActionError} ${errorMessage}`);
123
+ process.exit(1);
124
+ }
125
+ }
126
+ //# sourceMappingURL=mainAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mainAction.js","sourceRoot":"","sources":["../../src/lib/mainAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ObsidianService } from '../services/ObsidianService.js';
2
+ import { ConfigService } from '../services/ConfigService.js';
3
+ export declare function search(query: string, obsidian: ObsidianService, config: ConfigService): Promise<void>;
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAkB7D,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,iBAQ3F"}