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.
- package/LICENSE +21 -0
- package/README.md +336 -0
- package/dist/actions/dummy.d.ts +2 -0
- package/dist/actions/dummy.d.ts.map +1 -0
- package/dist/actions/dummy.js +3 -0
- package/dist/actions/dummy.js.map +1 -0
- package/dist/actions/mainAction.d.ts +5 -0
- package/dist/actions/mainAction.d.ts.map +1 -0
- package/dist/actions/mainAction.js +68 -0
- package/dist/actions/mainAction.js.map +1 -0
- package/dist/commands/ai.d.ts +3 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +20 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +15 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/completion.d.ts +34 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +134 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/diary.d.ts +3 -0
- package/dist/commands/diary.d.ts.map +1 -0
- package/dist/commands/diary.js +15 -0
- package/dist/commands/diary.js.map +1 -0
- package/dist/commands/dummy.d.ts +2 -0
- package/dist/commands/dummy.d.ts.map +1 -0
- package/dist/commands/dummy.js +3 -0
- package/dist/commands/dummy.js.map +1 -0
- package/dist/commands/find.d.ts +2 -0
- package/dist/commands/find.d.ts.map +1 -0
- package/dist/commands/find.js +3 -0
- package/dist/commands/find.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +29 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/tag.d.ts +3 -0
- package/dist/commands/tag.d.ts.map +1 -0
- package/dist/commands/tag.js +37 -0
- package/dist/commands/tag.js.map +1 -0
- package/dist/config/locales/en.d.ts +188 -0
- package/dist/config/locales/en.d.ts.map +1 -0
- package/dist/config/locales/en.js +190 -0
- package/dist/config/locales/en.js.map +1 -0
- package/dist/config/locales/ja.d.ts +188 -0
- package/dist/config/locales/ja.d.ts.map +1 -0
- package/dist/config/locales/ja.js +190 -0
- package/dist/config/locales/ja.js.map +1 -0
- package/dist/config/prompts/en.d.ts +6 -0
- package/dist/config/prompts/en.d.ts.map +1 -0
- package/dist/config/prompts/en.js +25 -0
- package/dist/config/prompts/en.js.map +1 -0
- package/dist/config/prompts/ja.d.ts +6 -0
- package/dist/config/prompts/ja.d.ts.map +1 -0
- package/dist/config/prompts/ja.js +25 -0
- package/dist/config/prompts/ja.js.map +1 -0
- package/dist/config/text.d.ts +195 -0
- package/dist/config/text.d.ts.map +1 -0
- package/dist/config/text.js +15 -0
- package/dist/config/text.js.map +1 -0
- package/dist/core/PromptLoader.d.ts +30 -0
- package/dist/core/PromptLoader.d.ts.map +1 -0
- package/dist/core/PromptLoader.js +187 -0
- package/dist/core/PromptLoader.js.map +1 -0
- package/dist/core/PromptSmith.d.ts +21 -0
- package/dist/core/PromptSmith.d.ts.map +1 -0
- package/dist/core/PromptSmith.js +197 -0
- package/dist/core/PromptSmith.js.map +1 -0
- package/dist/core/VaultForge.d.ts +17 -0
- package/dist/core/VaultForge.d.ts.map +1 -0
- package/dist/core/VaultForge.js +75 -0
- package/dist/core/VaultForge.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/completion.d.ts +8 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +55 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/dummy.d.ts +2 -0
- package/dist/lib/dummy.d.ts.map +1 -0
- package/dist/lib/dummy.js +3 -0
- package/dist/lib/dummy.js.map +1 -0
- package/dist/lib/mainAction.d.ts +8 -0
- package/dist/lib/mainAction.d.ts.map +1 -0
- package/dist/lib/mainAction.js +126 -0
- package/dist/lib/mainAction.js.map +1 -0
- package/dist/lib/search.d.ts +4 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +87 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/stdin.d.ts +10 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +20 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/services/AIModelService.d.ts +33 -0
- package/dist/services/AIModelService.d.ts.map +1 -0
- package/dist/services/AIModelService.js +116 -0
- package/dist/services/AIModelService.js.map +1 -0
- package/dist/services/AIOrchestratorService.d.ts +57 -0
- package/dist/services/AIOrchestratorService.d.ts.map +1 -0
- package/dist/services/AIOrchestratorService.js +164 -0
- package/dist/services/AIOrchestratorService.js.map +1 -0
- package/dist/services/ConfigService.d.ts +61 -0
- package/dist/services/ConfigService.d.ts.map +1 -0
- package/dist/services/ConfigService.js +132 -0
- package/dist/services/ConfigService.js.map +1 -0
- package/dist/services/ObsidianService.d.ts +97 -0
- package/dist/services/ObsidianService.d.ts.map +1 -0
- package/dist/services/ObsidianService.js +264 -0
- package/dist/services/ObsidianService.js.map +1 -0
- package/dist/services/TagService.d.ts +26 -0
- package/dist/services/TagService.d.ts.map +1 -0
- package/dist/services/TagService.js +73 -0
- package/dist/services/TagService.js.map +1 -0
- package/dist/services/UserInteraction.d.ts +100 -0
- package/dist/services/UserInteraction.d.ts.map +1 -0
- package/dist/services/UserInteraction.js +169 -0
- package/dist/services/UserInteraction.js.map +1 -0
- package/dist/services/XService.d.ts +15 -0
- package/dist/services/XService.d.ts.map +1 -0
- package/dist/services/XService.js +40 -0
- package/dist/services/XService.js.map +1 -0
- package/dist/services/ai/AIServiceFactory.d.ts +26 -0
- package/dist/services/ai/AIServiceFactory.d.ts.map +1 -0
- package/dist/services/ai/AIServiceFactory.js +69 -0
- package/dist/services/ai/AIServiceFactory.js.map +1 -0
- package/dist/services/ai/ClaudeService.d.ts +9 -0
- package/dist/services/ai/ClaudeService.d.ts.map +1 -0
- package/dist/services/ai/ClaudeService.js +59 -0
- package/dist/services/ai/ClaudeService.js.map +1 -0
- package/dist/services/ai/GeminiService.d.ts +9 -0
- package/dist/services/ai/GeminiService.d.ts.map +1 -0
- package/dist/services/ai/GeminiService.js +46 -0
- package/dist/services/ai/GeminiService.js.map +1 -0
- package/dist/services/ai/GroqService.d.ts +9 -0
- package/dist/services/ai/GroqService.d.ts.map +1 -0
- package/dist/services/ai/GroqService.js +53 -0
- package/dist/services/ai/GroqService.js.map +1 -0
- package/dist/services/ai/MockAIService.d.ts +8 -0
- package/dist/services/ai/MockAIService.d.ts.map +1 -0
- package/dist/services/ai/MockAIService.js +24 -0
- package/dist/services/ai/MockAIService.js.map +1 -0
- package/dist/services/ai/OpenAIService.d.ts +9 -0
- package/dist/services/ai/OpenAIService.d.ts.map +1 -0
- package/dist/services/ai/OpenAIService.js +51 -0
- package/dist/services/ai/OpenAIService.js.map +1 -0
- package/dist/strategies/BaseStrategy.d.ts +36 -0
- package/dist/strategies/BaseStrategy.d.ts.map +1 -0
- package/dist/strategies/BaseStrategy.js +110 -0
- package/dist/strategies/BaseStrategy.js.map +1 -0
- package/dist/strategies/DebugStrategy.d.ts +13 -0
- package/dist/strategies/DebugStrategy.d.ts.map +1 -0
- package/dist/strategies/DebugStrategy.js +16 -0
- package/dist/strategies/DebugStrategy.js.map +1 -0
- package/dist/strategies/DiaryStrategy.d.ts +19 -0
- package/dist/strategies/DiaryStrategy.d.ts.map +1 -0
- package/dist/strategies/DiaryStrategy.js +69 -0
- package/dist/strategies/DiaryStrategy.js.map +1 -0
- package/dist/strategies/GeneralStrategy.d.ts +8 -0
- package/dist/strategies/GeneralStrategy.d.ts.map +1 -0
- package/dist/strategies/GeneralStrategy.js +11 -0
- package/dist/strategies/GeneralStrategy.js.map +1 -0
- package/dist/strategies/InitStrategy.d.ts +19 -0
- package/dist/strategies/InitStrategy.d.ts.map +1 -0
- package/dist/strategies/InitStrategy.js +122 -0
- package/dist/strategies/InitStrategy.js.map +1 -0
- package/dist/strategies/SearchStrategy.d.ts +19 -0
- package/dist/strategies/SearchStrategy.d.ts.map +1 -0
- package/dist/strategies/SearchStrategy.js +112 -0
- package/dist/strategies/SearchStrategy.js.map +1 -0
- package/dist/strategies/XPostStrategy.d.ts +27 -0
- package/dist/strategies/XPostStrategy.d.ts.map +1 -0
- package/dist/strategies/XPostStrategy.js +119 -0
- package/dist/strategies/XPostStrategy.js.map +1 -0
- package/dist/templates/completion.bash +24 -0
- package/dist/templates/dailyNote.d.ts +2 -0
- package/dist/templates/dailyNote.d.ts.map +1 -0
- package/dist/templates/dailyNote.js +8 -0
- package/dist/templates/dailyNote.js.map +1 -0
- package/dist/templates/defaultPrompt.d.ts +2 -0
- package/dist/templates/defaultPrompt.d.ts.map +1 -0
- package/dist/templates/defaultPrompt.js +28 -0
- package/dist/templates/defaultPrompt.js.map +1 -0
- package/dist/templates/obsidianNote.d.ts +3 -0
- package/dist/templates/obsidianNote.d.ts.map +1 -0
- package/dist/templates/obsidianNote.js +17 -0
- package/dist/templates/obsidianNote.js.map +1 -0
- package/dist/templates/tokenUsage.d.ts +20 -0
- package/dist/templates/tokenUsage.d.ts.map +1 -0
- package/dist/templates/tokenUsage.js +50 -0
- package/dist/templates/tokenUsage.js.map +1 -0
- package/dist/test-tabtab.d.ts +2 -0
- package/dist/test-tabtab.d.ts.map +1 -0
- package/dist/test-tabtab.js +50 -0
- package/dist/test-tabtab.js.map +1 -0
- package/dist/types/constants.d.ts +16 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/constants.js +14 -0
- package/dist/types/constants.js.map +1 -0
- package/dist/types/interfaces.d.ts +56 -0
- package/dist/types/interfaces.d.ts.map +1 -0
- package/dist/types/interfaces.js +6 -0
- package/dist/types/interfaces.js.map +1 -0
- package/dist/types/schemas.d.ts +18 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +13 -0
- package/dist/types/schemas.js.map +1 -0
- package/dist/utils/completion.d.ts +8 -0
- package/dist/utils/completion.d.ts.map +1 -0
- package/dist/utils/completion.js +58 -0
- package/dist/utils/completion.js.map +1 -0
- package/dist/utils/dummy.d.ts +2 -0
- package/dist/utils/dummy.d.ts.map +1 -0
- package/dist/utils/dummy.js +3 -0
- package/dist/utils/dummy.js.map +1 -0
- package/package.json +55 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 [Yoshinori Imada]
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
[🇯🇵 日本語](README_ja.md)
|
|
2
|
+
|
|
3
|
+
<a id="top"></a>
|
|
4
|
+
# Vault-Forge v2.0
|
|
5
|
+
|
|
6
|
+
**Obsidian × Terminal × AI**
|
|
7
|
+
Vault-Forge is the CLI tool for accelerating intellectual production by directly manipulating your Obsidian Vault from the terminal and leveraging the power of Generative AI.
|
|
8
|
+
|
|
9
|
+
v2.0 features a revamped architecture with **Multi-AI Support**, **High-Speed Search**, and **Diary Functionality**.
|
|
10
|
+
|
|
11
|
+
## Table of Contents
|
|
12
|
+
|
|
13
|
+
1. [🚀 New Features in v2.0](#-new-features-in-v20)
|
|
14
|
+
2. [📦 Installation and Setup](#-installation-and-setup)
|
|
15
|
+
3. [📖 Command Guide](#-command-guide)
|
|
16
|
+
* [1. 📔 Diary & Memo (`vf diary`)](#1--diary--memo-vf-diary)
|
|
17
|
+
* [2. 🔍 Search (`vf search`)](#2--search-vf-search)
|
|
18
|
+
* [3. 🤖 AI Analysis & Generation (`vf ai`)](#3--ai-analysis--generation-vf-ai)
|
|
19
|
+
* [4. Recommended Alias Settings (`Aliases`)](#4-recommended-alias-settings-aliases)
|
|
20
|
+
4. [🛠️ Customization (The Forge)](#️-customization-the-forge)
|
|
21
|
+
5. [📊 Token Management](#-token-management)
|
|
22
|
+
6. [⌨️ Shell Completion](#️-shell-completion)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 🚀 New Features in v2.0
|
|
27
|
+
|
|
28
|
+
* **🧠 Multi-AI Support**: Freely switch between Gemini, OpenAI, Groq, and Claude for each mode.
|
|
29
|
+
* **📔 Diary Mode**: A lightning-fast memo function like `jrnl`. Create tasks and tags instantly from the CLI.
|
|
30
|
+
* **🔍 Search Mode**: Blazing fast search powered by `ripgrep`. Open files directly in Vim or Obsidian.
|
|
31
|
+
* **⚙️ Automated Configuration**: AI model lists and tags learn from your usage and are saved to `json`, growing your completion candidates.
|
|
32
|
+
* **📄 Obsidian First**: Prompts and settings are all managed as Obsidian notes.
|
|
33
|
+
|
|
34
|
+
[↑ Top](#top)
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 📦 Installation and Setup
|
|
38
|
+
|
|
39
|
+
### 1. Prerequisites
|
|
40
|
+
* Node.js (v18 or higher recommended)
|
|
41
|
+
* Obsidian
|
|
42
|
+
* (Recommended) `ripgrep`: For using high-speed search mode (e.g., `brew install ripgrep`)
|
|
43
|
+
|
|
44
|
+
### 2. Installation
|
|
45
|
+
Install as an npm package.
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
npm install -g vault-forge
|
|
49
|
+
```
|
|
50
|
+
### Setup for Development Environment
|
|
51
|
+
If you are cloning the repository:
|
|
52
|
+
```bash
|
|
53
|
+
git clone https://github.com/your-repo/vault-forge.git
|
|
54
|
+
cd vault-forge
|
|
55
|
+
npm install
|
|
56
|
+
npm run build
|
|
57
|
+
npm link # Link vf command globally
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 3. Environment Variables
|
|
61
|
+
Create a `.env` file in the project root (refer to `.env.example`).
|
|
62
|
+
|
|
63
|
+
### 3.1 Setting Environment Variables
|
|
64
|
+
|
|
65
|
+
First, copy `.env.example` in the project root to create a `.env` file and configure the necessary settings.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
cp .env.example .env
|
|
69
|
+
nano .env # or edit with your favorite editor
|
|
70
|
+
```
|
|
71
|
+
Set the following information in the `.env` file:
|
|
72
|
+
* `OBSIDIAN_VAULT_PATH`: The absolute path to your Obsidian Vault
|
|
73
|
+
* API keys for each AI provider (`OPENAI_API_KEY`, `GEMINI_API_KEY`, etc.)
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
# Required: Absolute path to Obsidian Vault
|
|
77
|
+
OBSIDIAN_VAULT_PATH=/absolute/path/to/your/vault
|
|
78
|
+
|
|
79
|
+
# Optional: Language setting (ja/en)
|
|
80
|
+
APP_LANG=en
|
|
81
|
+
|
|
82
|
+
# Optional: Editor setting (effective only when ripgrep is used)
|
|
83
|
+
# Access md files via default editor instead of Obsidian.
|
|
84
|
+
EDITOR=code
|
|
85
|
+
# EDITOR=vim
|
|
86
|
+
|
|
87
|
+
# AI API Keys (Only set the ones you use)
|
|
88
|
+
GEMINI_API_KEY=...
|
|
89
|
+
OPENAI_API_KEY=...
|
|
90
|
+
GROQ_API_KEY=...
|
|
91
|
+
CLAUDE_API_KEY=...
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 4. Initialization (`vf init`)
|
|
95
|
+
Be sure to run this first. It generates necessary directories and configuration files within your Vault.
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
vf init
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
In interactive mode, you can configure the **AI Provider** and **Model** to use for each mode (general, debug, xpost).
|
|
102
|
+
The model names entered here are saved to `_AI_Prompts/ai-models.json` and will be displayed as options next time.
|
|
103
|
+
|
|
104
|
+
[↑ Top](#top)
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 📖 Command Guide
|
|
108
|
+
|
|
109
|
+
### 1. 📔 Diary & Memo (`vf diary`)
|
|
110
|
+
Quickly append to Obsidian's Daily Note (`Daily/YYYY-MM-DD.md`). * **AI is not used.**
|
|
111
|
+
|
|
112
|
+
**Basic:**
|
|
113
|
+
```sh
|
|
114
|
+
vf diary "Came up with a great idea"
|
|
115
|
+
# -> - **HH:MM** Came up with a great idea
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Interactive Mode (no arguments):**
|
|
119
|
+
```sh
|
|
120
|
+
vf diary
|
|
121
|
+
# -> Input prompt launches. Comfortable input experience.
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Useful Features:**
|
|
125
|
+
* **Task Creation**: Use `-t` option, or include `#task` / `#todo` to save with a checkbox (`- [ ]`).
|
|
126
|
+
```sh
|
|
127
|
+
vf diary -task "Buy milk" # -> [ ] Buy milk
|
|
128
|
+
vf diary -t "Buy milk" # -> [ ] Buy milk
|
|
129
|
+
vf diary "Drink milk #task" # -> [ ] Drink milk #task
|
|
130
|
+
```
|
|
131
|
+
* **Headings**: Include `#h2` or `#heading2` to save as a Markdown heading.
|
|
132
|
+
```sh
|
|
133
|
+
vf diary "About Project A #h2"
|
|
134
|
+
```
|
|
135
|
+
* **Tags**: `#tag` is automatically extracted and recorded as a #tag in the Obsidian body.
|
|
136
|
+
```sh
|
|
137
|
+
vf diary "Configured new CLI tool today #dev"
|
|
138
|
+
# -> **16:10** Configured new CLI tool today #dev
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## 2. 🔍 Search (`vf search` `vf tag`)
|
|
142
|
+
High-speed search within the Vault. Alias `vf s` is also available. * **AI is not used.**
|
|
143
|
+
|
|
144
|
+
* Note: The search function only searches within the directory configured in `OBSIDIAN_VAULT_PATH=` in the .env file.
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
vf search "search query"
|
|
148
|
+
vf s "search query"
|
|
149
|
+
```
|
|
150
|
+
* **Editor Integration**:
|
|
151
|
+
|
|
152
|
+
If `ripgrep` is installed, it uses the editor configured in the `EDITOR` environment variable (e.g., `export EDITOR=code`) to open files in the Vault.
|
|
153
|
+
|
|
154
|
+
If `ripgrep` is not installed or `EDITOR` is not set, it opens in Obsidian.
|
|
155
|
+
|
|
156
|
+
### About Tags:
|
|
157
|
+
**Tag Search:**
|
|
158
|
+
```bash
|
|
159
|
+
vf tag test
|
|
160
|
+
```
|
|
161
|
+
Searches for notes containing the `#test` tag "in the body".
|
|
162
|
+
|
|
163
|
+
### 4.3 Diary & Memo (`vf diary`)
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
vf diary "Configured new CLI tool today #dev"
|
|
167
|
+
```
|
|
168
|
+
Appends to the Obsidian daily note. Use the `-t` option to add as a task.
|
|
169
|
+
|
|
170
|
+
By combining this tag function and search function, you can smoothly perform the cycle of:
|
|
171
|
+
|
|
172
|
+
Record with tag -> Search by tag -> Edit -> Input body -> Search body
|
|
173
|
+
|
|
174
|
+
directly from the terminal.
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
### 3. 🤖 AI Analysis & Generation (`vf ai`)
|
|
178
|
+
Process text using AI. Behavior changes depending on the preset (mode).
|
|
179
|
+
|
|
180
|
+
**Basic:**
|
|
181
|
+
```shell
|
|
182
|
+
vf ai "Ask AI something"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Specifying Preset (`-p` / `--preset`):**
|
|
186
|
+
* **general** (Default): General questions and text generation.
|
|
187
|
+
```sh
|
|
188
|
+
vf ai --preset general --instruction "Ask AI something"
|
|
189
|
+
vf ai -p general -i "Ask AI something"
|
|
190
|
+
vf ai -p general "Ask AI something" # -i can be omitted
|
|
191
|
+
```
|
|
192
|
+
* **debug**: Analyze error logs and code.
|
|
193
|
+
```sh
|
|
194
|
+
vf ai -preset debug "[WARN] An error occurred! This is an error log..."
|
|
195
|
+
vf ai -p debug -f error.log "Analyze this error log"
|
|
196
|
+
cat error.log | vf ai -p debug # Can also be passed via pipe
|
|
197
|
+
```
|
|
198
|
+
* **xpost**: Create X (Twitter) post drafts from memos and post them directly.
|
|
199
|
+
```sh
|
|
200
|
+
vf ai -p xpost -f blog.md "With a humorous tone for engineers"
|
|
201
|
+
|
|
202
|
+
# In detached mode, drafts are saved to Vault and process exits (does not post automatically)
|
|
203
|
+
vf ai -p xpost -f blog.md --detach "With a humorous tone for engineers"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Options:**
|
|
207
|
+
* `-f, --file <path>`: Use file content as input.
|
|
208
|
+
* `-i, --instruction <text>`: Give additional instructions.
|
|
209
|
+
* `-d, --detach`: Run in background (results are saved to log file).
|
|
210
|
+
* `-m, --model <name>`: Temporarily change the model to use.
|
|
211
|
+
|
|
212
|
+
### 4. Recommended Alias Settings (`Aliases`)
|
|
213
|
+
To use Vault-Forge even more conveniently, we recommend adding the following aliases to your shell configuration file (`.zshrc` or `.bashrc`).
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Append to ~/.zshrc or ~/.bashrc
|
|
217
|
+
|
|
218
|
+
# Basic AI analysis (General preset)
|
|
219
|
+
alias ai='vf ai -p general'
|
|
220
|
+
|
|
221
|
+
# X (Twitter) post creation preset
|
|
222
|
+
alias xpost='vf ai -p xpost'
|
|
223
|
+
|
|
224
|
+
# Error log analysis preset
|
|
225
|
+
alias debug='vf ai -p debug'
|
|
226
|
+
|
|
227
|
+
# Create diary entry
|
|
228
|
+
alias diary='vf diary'
|
|
229
|
+
|
|
230
|
+
# Search
|
|
231
|
+
alias search='vf search'
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
To apply the settings, restart your shell or run `source ~/.zshrc`.
|
|
235
|
+
|
|
236
|
+
### 4.1 Application: Combining Aliases and Pipes
|
|
237
|
+
|
|
238
|
+
With recommended aliases, operation becomes even more intuitive.
|
|
239
|
+
|
|
240
|
+
**Create X post draft from blog article:**
|
|
241
|
+
```bash
|
|
242
|
+
cat blog_draft.md | xpost "In a friendly tone"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Analyze Kubernetes logs:**
|
|
246
|
+
```bash
|
|
247
|
+
kubectl logs my-pod | debug "Are there any abnormal logs?"
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Create commit message draft from Git diff:**
|
|
251
|
+
```bash
|
|
252
|
+
git diff | ai "Think of a commit message"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
[↑ Top](#top)
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 🛠️ Customization (The Forge)
|
|
259
|
+
|
|
260
|
+
The biggest feature of Vault-Forge is that **settings and prompts can be managed on Obsidian**.
|
|
261
|
+
|
|
262
|
+
### Editing Prompts
|
|
263
|
+
Running `vf init` generates prompt files (Markdown) in `_AI_Prompts/prompts/en/` (or `ja/` depending on language setting) within your Vault.
|
|
264
|
+
|
|
265
|
+
By editing these in Obsidian, you can freely customize the AI's behavior.
|
|
266
|
+
|
|
267
|
+
**Example: `xpost.md`**
|
|
268
|
+
|
|
269
|
+
<img src="assets/customprompt-en.png" alt="Demo Image" width="600">
|
|
270
|
+
|
|
271
|
+
**Switching AI**:
|
|
272
|
+
* You can change the AI model used by directly describing it in the `model` field in the Obsidian header (Frontmatter).
|
|
273
|
+
|
|
274
|
+
<img src="assets/aimodel.png" alt="Demo Image" width="600">
|
|
275
|
+
|
|
276
|
+
* You can also change the model for that mode from the command line using `-m` or `--model` options.
|
|
277
|
+
```sh
|
|
278
|
+
vf ai -m <TAB> # -> Press TAB to see model names as candidates
|
|
279
|
+
claude-haiku-4-5 gemini-2.0-flash ...
|
|
280
|
+
```
|
|
281
|
+
* **Tag Completion**: Since model names are included in Obsidian tags during `vf init`, model names are completed when you type `#` on Obsidian.
|
|
282
|
+
|
|
283
|
+
(Please note not to include # when registering model names.)
|
|
284
|
+
|
|
285
|
+
### Adding AI Models
|
|
286
|
+
If you want to use a new model (e.g., `gpt-7`), you can add it in one of the following ways:
|
|
287
|
+
|
|
288
|
+
1. **Add via `vf init`**: Select `Custom` during model selection and enter manually.
|
|
289
|
+
2. **Edit JSON**: Directly edit `_AI_Prompts/ai-models.json`.
|
|
290
|
+
3. **Edit from Obsidian**: Directly edit the prompt in Obsidian.
|
|
291
|
+
4. **Run via command**: Running with an unregistered model like `vf ai -m gpt-7 "test"` will automatically infer the provider and register it.
|
|
292
|
+
```sh
|
|
293
|
+
vf ai -m gpt-7 "Can I use Gpt-7?"
|
|
294
|
+
```
|
|
295
|
+
No need to rewrite code.
|
|
296
|
+
|
|
297
|
+
[↑ Top](#top)
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 📊 Token Management
|
|
301
|
+
AI usage is automatically recorded in `_AI_Prompts/TokenUsage/`.
|
|
302
|
+
It is visualized as Mermaid charts on Obsidian, so cost management is perfect.
|
|
303
|
+
|
|
304
|
+
<img src="assets/tokenusage.png" alt="Demo Image" width="400">
|
|
305
|
+
|
|
306
|
+
[↑ Top](#top)
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## ⌨️ Shell Completion
|
|
310
|
+
Powerful completion is provided by `tabtab`.
|
|
311
|
+
|
|
312
|
+
```sh
|
|
313
|
+
vf completion
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Normally, it is automatically set up at the end of `vf init`, but run the above command if you want to set it up manually.
|
|
317
|
+
This enables completion for commands, presets, options, and **hashtags recorded in `tags.json`**.
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
* **Command Completion**: `vf <TAB>` -> `ai`, `diary`, `search`, `tag`, `init`
|
|
321
|
+
* **Tag Completion**: `vf ai <TAB>` -> List of tags in Vault
|
|
322
|
+
* **Option Completion**: `vf ai -<TAB>` -> `-p`, `-m`, `-i`, `-f` ...
|
|
323
|
+
* **Value Completion**:
|
|
324
|
+
* `vf ai -p <TAB>` -> `general`, `debug`, `xpost`
|
|
325
|
+
* `vf ai -m <TAB>` -> `gpt-4`, `gemini-pro` ...
|
|
326
|
+
* `vf ai -f <TAB>` -> List of files in current directory
|
|
327
|
+
|
|
328
|
+
[↑ Top](#top)
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
### 🤝 Contributing
|
|
332
|
+
|
|
333
|
+
Bug reports and feature suggestions are welcome via Issue or Pull Request.
|
|
334
|
+
|
|
335
|
+
### 📜 License
|
|
336
|
+
MIT License
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dummy.d.ts","sourceRoot":"","sources":["../../src/actions/dummy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dummy.js","sourceRoot":"","sources":["../../src/actions/dummy.ts"],"names":[],"mappings":";AAAA,iCAAiC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mainAction.d.ts","sourceRoot":"","sources":["../../src/actions/mainAction.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,GAAG,iBA2D1E"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fsSync from 'fs';
|
|
4
|
+
import { VaultForge } from '../core/VaultForge.js';
|
|
5
|
+
import { AppMode } from '../types/constants.js';
|
|
6
|
+
import { AIModelService } from '../services/AIModelService.js';
|
|
7
|
+
import { getCandidates } from '../utils/completion.js';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
const masterModelsPath = path.join(__dirname, '../config/ai-models.json');
|
|
12
|
+
/**
|
|
13
|
+
* 内部でタグの # を復元して実行するメインアクション
|
|
14
|
+
*/
|
|
15
|
+
export async function mainAction(inputArg, options) {
|
|
16
|
+
try {
|
|
17
|
+
if (options.detach) {
|
|
18
|
+
const args = process.argv.slice(2).filter(arg => arg !== '-d' && arg !== '--detach');
|
|
19
|
+
const subprocess = spawn(process.argv[0] || 'node', [process.argv[1] || '', ...args], { detached: true, stdio: 'ignore' });
|
|
20
|
+
subprocess.unref();
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
const vaultPath = process.env.OBSIDIAN_VAULT_PATH;
|
|
24
|
+
const aiModelService = new AIModelService(vaultPath);
|
|
25
|
+
const validCandidates = getCandidates();
|
|
26
|
+
let detectedModel = null;
|
|
27
|
+
const userModelsPath = path.join(vaultPath, '_AI_Prompts', 'ai-models.json');
|
|
28
|
+
let allModelsData = {};
|
|
29
|
+
if (fsSync.existsSync(userModelsPath)) {
|
|
30
|
+
allModelsData = JSON.parse(fsSync.readFileSync(userModelsPath, 'utf-8'));
|
|
31
|
+
}
|
|
32
|
+
if (options.model) {
|
|
33
|
+
const modelName = options.model;
|
|
34
|
+
for (const [provider, models] of Object.entries(allModelsData)) {
|
|
35
|
+
if (Array.isArray(models) && models.includes(modelName)) {
|
|
36
|
+
detectedModel = { provider, model: modelName };
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (!detectedModel) {
|
|
41
|
+
detectedModel = { provider: '', model: modelName };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const processedInput = (inputArg || "").split(' ').map(word => {
|
|
45
|
+
if (validCandidates.includes(word)) {
|
|
46
|
+
return `#${word}`;
|
|
47
|
+
}
|
|
48
|
+
return word;
|
|
49
|
+
}).join(' ');
|
|
50
|
+
const config = {
|
|
51
|
+
vaultPath: vaultPath,
|
|
52
|
+
inputData: processedInput,
|
|
53
|
+
mode: options.mode || AppMode.GENERAL,
|
|
54
|
+
instruction: options.instruction,
|
|
55
|
+
overrideModel: detectedModel || undefined
|
|
56
|
+
};
|
|
57
|
+
const app = new VaultForge(config);
|
|
58
|
+
await app.run();
|
|
59
|
+
if (detectedModel && detectedModel.provider) {
|
|
60
|
+
const modelInfo = detectedModel;
|
|
61
|
+
await aiModelService.addModel(modelInfo.provider, modelInfo.model);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=mainAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mainAction.js","sourceRoot":"","sources":["../../src/actions/mainAction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,QAcjD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { mainAction } from '../lib/mainAction.js';
|
|
3
|
+
import { AppMode } from '../types/constants.js';
|
|
4
|
+
import { TEXT } from '../config/text.js';
|
|
5
|
+
export function registerAiCommand(program) {
|
|
6
|
+
program.command('ai')
|
|
7
|
+
.argument('[input...]')
|
|
8
|
+
.option('-p, --preset <preset>', TEXT.commands.ai.options.preset)
|
|
9
|
+
.option('-i, --instruction <instruction>', TEXT.commands.ai.options.instruction)
|
|
10
|
+
.option('-d, --detach', TEXT.commands.ai.options.detach)
|
|
11
|
+
.option('-m, --model <model>', TEXT.commands.ai.options.model)
|
|
12
|
+
.option('-f, --file <path>', TEXT.commands.ai.options.file)
|
|
13
|
+
.option('--stream', TEXT.commands.ai.options.stream)
|
|
14
|
+
.option('--normal', TEXT.commands.ai.options.normal)
|
|
15
|
+
.allowUnknownOption()
|
|
16
|
+
.action(async (parts, opts) => {
|
|
17
|
+
await mainAction(parts.join(' '), opts);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SAChB,QAAQ,CAAC,YAAY,CAAC;SACtB,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SAChE,MAAM,CAAC,iCAAiC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;SAC/E,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACvD,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SAC1D,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACnD,kBAAkB,EAAE;SACpB,MAAM,CAAC,KAAK,EAAE,KAAe,EAAE,IAAS,EAAE,EAAE;QACzC,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAWlD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { mainAction } from '../lib/mainAction.js';
|
|
3
|
+
export function registerAskCommand(program) {
|
|
4
|
+
program.command('ask')
|
|
5
|
+
.argument('[input...]')
|
|
6
|
+
.option('-m, --mode <mode>', '', 'general')
|
|
7
|
+
.option('--model <name>', 'Specify AI model')
|
|
8
|
+
.option('-i, --instruction <text>')
|
|
9
|
+
.option('-d, --detach')
|
|
10
|
+
.allowUnknownOption()
|
|
11
|
+
.action(async (parts, opts) => {
|
|
12
|
+
await mainAction(parts.join(' '), opts);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAC/C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACjB,QAAQ,CAAC,YAAY,CAAC;SACtB,MAAM,CAAC,mBAAmB,EAAE,EAAE,EAAE,SAAS,CAAC;SAC1C,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;SAC5C,MAAM,CAAC,0BAA0B,CAAC;SAClC,MAAM,CAAC,cAAc,CAAC;SACtB,kBAAkB,EAAE;SACpB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* タグのリストを取得する(#を付けない)。
|
|
4
|
+
* Retrieves a list of tags (without the # prefix).
|
|
5
|
+
* @returns {string[]} タグの配列 / Array of tags.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getTags: () => string[];
|
|
8
|
+
/**
|
|
9
|
+
* モデルのリストを取得する。
|
|
10
|
+
* Retrieves a list of AI models.
|
|
11
|
+
* @returns {string[]} モデル名の配列 / Array of model names.
|
|
12
|
+
*/
|
|
13
|
+
export declare const getModels: () => string[];
|
|
14
|
+
/**
|
|
15
|
+
* 従来の getCandidates (互換性のため)。
|
|
16
|
+
* Legacy getCandidates (for compatibility).
|
|
17
|
+
* @returns {string[]} タグとモデルの結合リスト / Combined list of tags and models.
|
|
18
|
+
*/
|
|
19
|
+
export declare const getCandidates: () => string[];
|
|
20
|
+
/**
|
|
21
|
+
* 補完ロジックのセットアップ。
|
|
22
|
+
* 補完リクエストを処理した場合は true を返す。
|
|
23
|
+
* Sets up the completion logic.
|
|
24
|
+
* Returns true if a completion request was handled.
|
|
25
|
+
* @returns {boolean} 処理されたかどうか / Whether it was handled.
|
|
26
|
+
*/
|
|
27
|
+
export declare const setupCompletion: () => boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Commander コマンド定義。
|
|
30
|
+
* Commander command definition.
|
|
31
|
+
* @param {Command} program - Commander プログラムインスタンス / Commander program instance.
|
|
32
|
+
*/
|
|
33
|
+
export declare function registerCompletionCommand(program: Command): void;
|
|
34
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;;;GAIG;AACH,eAAO,MAAM,OAAO,QAAO,MAAM,EAahC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAAO,MAAM,EAelC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,EAEtC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAAO,OAuDlC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,QASzD"}
|