context-bank 0.0.4 → 0.0.5

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.
@@ -1,6 +1,7 @@
1
1
  import { intro, outro, confirm, spinner } from "@clack/prompts";
2
2
  import fs from "fs-extra";
3
3
  import path from "path";
4
+ import os from "os";
4
5
  import { fileURLToPath } from "url";
5
6
  import chalk from "chalk";
6
7
  // Get __dirname equivalent in ESM
@@ -26,9 +27,6 @@ export async function initCommand(options) {
26
27
  process.exit(0);
27
28
  }
28
29
  // Determine paths
29
- // When running from source (ts-node), templates are in ../../templates
30
- // When running from dist (node), templates are in ../../templates (copied during build)
31
- // We need to ensure templates are included in the build or package.
32
30
  const templateDir = path.resolve(__dirname, "../../templates");
33
31
  const targetDir = process.cwd();
34
32
  const s = spinner();
@@ -54,15 +52,7 @@ export async function initCommand(options) {
54
52
  const srcPath = path.join(templateDir, item);
55
53
  const destPath = path.join(targetDir, item);
56
54
  if (fs.existsSync(srcPath)) {
57
- // Check if destination exists
58
55
  if (fs.existsSync(destPath)) {
59
- // For now, we skip existing files to be safe, or we could ask.
60
- // Let's just overwrite for MVP or maybe log it.
61
- // A better UX would be to ask, but let's stick to simple first.
62
- // We will use overwrite=false logic effectively by checking existence.
63
- // Actually, let's just copy and overwrite for now as this is "init",
64
- // but maybe backup?
65
- // Let's stick to standard "copy" behavior (overwrite).
66
56
  await fs.copy(srcPath, destPath, { overwrite: true });
67
57
  }
68
58
  else {
@@ -90,28 +80,32 @@ export async function initCommand(options) {
90
80
  const projectName = path.basename(targetDir);
91
81
  await fs.writeFile(readmePath, `${aiContextMarker}\n\n# ${projectName}\n`);
92
82
  }
93
- // Gemini CLI Integration
94
- const geminiDir = path.join(targetDir, ".gemini");
95
- const geminiMemoryPath = path.join(geminiDir, "GEMINI.md");
96
- const geminiRule = "- [Context Bank] Always check and follow the instructions in .ai/rules.md and .ai/active-context.md.";
97
- if (!fs.existsSync(geminiDir)) {
98
- await fs.ensureDir(geminiDir);
99
- }
100
- if (fs.existsSync(geminiMemoryPath)) {
101
- const memoryContent = await fs.readFile(geminiMemoryPath, "utf-8");
83
+ s.stop(chalk.green("Context initialized!"));
84
+ // Gemini CLI Global Memory Integration
85
+ const globalGeminiDir = path.join(os.homedir(), ".gemini");
86
+ const globalGeminiMemoryPath = path.join(globalGeminiDir, "GEMINI.md");
87
+ if (fs.existsSync(globalGeminiMemoryPath)) {
88
+ const memoryContent = await fs.readFile(globalGeminiMemoryPath, "utf-8");
89
+ // Only ask if the rule is not already present
102
90
  if (!memoryContent.includes("[Context Bank]")) {
103
- // Append to existing memory
104
- const newContent = memoryContent.endsWith("\n")
105
- ? `${memoryContent}${geminiRule}\n`
106
- : `${memoryContent}\n${geminiRule}\n`;
107
- await fs.writeFile(geminiMemoryPath, newContent);
91
+ const addGlobalContext = await confirm({
92
+ message: "Found Gemini CLI global memory. Enable automatic context detection for all Context Bank projects?",
93
+ initialValue: true
94
+ });
95
+ if (addGlobalContext === true) {
96
+ const genericContextRule = "- [Context Bank] Always check the current working directory for '.ai/rules.md' and '.ai/active-context.md'. If they exist, follow their instructions as the primary source of truth.";
97
+ const newContent = memoryContent.endsWith("\n")
98
+ ? `${memoryContent}${genericContextRule}\n`
99
+ : `${memoryContent}\n${genericContextRule}\n`;
100
+ await fs.writeFile(globalGeminiMemoryPath, newContent);
101
+ console.log(chalk.green(`✔ Enabled global context awareness for Context Bank.`));
102
+ }
103
+ }
104
+ else {
105
+ // Optional: Let the user know it's already active
106
+ // console.log(chalk.gray(`ℹ Global context awareness is already active.`));
108
107
  }
109
108
  }
110
- else {
111
- // Create new memory file
112
- await fs.writeFile(geminiMemoryPath, `${geminiRule}\n`);
113
- }
114
- s.stop(chalk.green("Context initialized!"));
115
109
  outro(chalk.green(`
116
110
  Context Bank setup complete! 🚀
117
111
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-bank",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "A CLI tool to standardise AI context in projects.",
5
5
  "type": "module",
6
6
  "bin": {