miii-cli 0.1.2 โ†’ 0.1.4

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.
@@ -0,0 +1,55 @@
1
+ # Contributing to miii-cli
2
+
3
+ We welcome contributions! miii-cli is a community-driven project, and your help is invaluable whether you're fixing a bug, adding a feature, or improving documentation.
4
+
5
+ ---
6
+
7
+ ### ๐Ÿš€ How to Contribute
8
+
9
+ 1. **Fork** the repository.
10
+ 2. **Clone** your fork locally.
11
+ 3. **Create a new branch** (`git checkout -b feature/my-awesome-feature`).
12
+ 4. **Commit** your changes and **Push** to the branch.
13
+ 5. **Open a Pull Request (PR)** against the `main` branch.
14
+
15
+ ### ๐Ÿค Guidelines
16
+
17
+ * **Code Style:** Please follow standard JavaScript/TypeScript best practices.
18
+ * **Testing:** All new features must include accompanying unit or integration tests.
19
+ * **Documentation:** If you change an API or add complex logic, please update the relevant documentation files.
20
+
21
+ ### ๐Ÿ“ Workflow
22
+
23
+ * **Bugs:** If you find a bug, please report it on the Issues page with a clear reproduction guide and expected behavior.
24
+ * **Features:** Before starting a large feature, please open an Issue to discuss the scope and design with the core team.
25
+
26
+ ### ๐Ÿ› Bug Reporting
27
+
28
+ When reporting a bug, please include:
29
+
30
+ 1. **Title:** A concise summary of the issue.
31
+ 2. **Environment:** (e.g., Node.js version, OS, browser)
32
+ 3. **Steps to Reproduce:** A numbered list of exact steps to trigger the bug.
33
+ 4. **Expected Result:** What should have happened.
34
+ 5. **Actual Result:** What actually happened.
35
+
36
+ ***
37
+
38
+ ### ๐Ÿ›  Development Setup
39
+
40
+ To work on miii-cli locally, please ensure you have the necessary dependencies installed.
41
+
42
+ 1. **Install Dependencies:**
43
+ `npm install`
44
+
45
+ 2. **Common Commands:**
46
+ We use a Makefile to streamline common tasks:
47
+
48
+ Development/Live Run: `make dev` (Runs the application in development mode)
49
+ Build Project: `make build` (Compiles the TypeScript source code)
50
+ Install Globally: `make install` (Links the project using `npm link`)
51
+ Clean Build: `make clean` (Removes compiled output)
52
+
53
+ ### ๐Ÿงช Testing
54
+
55
+ When writing tests, please ensure they cover both the happy path and expected edge cases.
package/README.md CHANGED
@@ -80,6 +80,9 @@ Type `/` to open the command palette.
80
80
  | `/session <name>` | Switch to or create a named session |
81
81
  | `/sessions` | List all sessions with message counts |
82
82
  | `/clear` | Clear current session history |
83
+ | `/mkdir <path>` | Create a folder (and any missing parents) |
84
+ | `/touch <path>` | Create an empty file |
85
+ | `/mv <from> <to>` | Move or rename a file or folder |
83
86
  | `/list` | Show loaded skills |
84
87
  | `/exit` | Exit miii |
85
88
 
@@ -93,7 +96,9 @@ The model can call these tools automatically โ€” no setup needed.
93
96
  |---|---|
94
97
  | `read_file` | Read any file |
95
98
  | `list_files` | List directory contents |
96
- | `edit_file` | Create or overwrite a file |
99
+ | `edit_file` | Create or overwrite a file (auto-creates parent dirs) |
100
+ | `create_folder` | Create a directory and any missing parents |
101
+ | `move_file` | Move or rename a file or directory |
97
102
  | `delete_file` | Delete a file |
98
103
  | `run_command` | Run a shell command in the current directory |
99
104
 
@@ -1,6 +1,8 @@
1
1
  export declare function readFile(p: string): string;
2
2
  export declare function writeFile(p: string, content: string): void;
3
3
  export declare function deleteFile(p: string): void;
4
+ export declare function createDir(p: string): void;
5
+ export declare function moveFile(from: string, to: string): void;
4
6
  export interface FileEntry {
5
7
  name: string;
6
8
  path: string;
package/dist/files/ops.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readFileSync, writeFileSync, unlinkSync, mkdirSync, readdirSync, statSync, existsSync, } from 'fs';
1
+ import { readFileSync, writeFileSync, unlinkSync, mkdirSync, readdirSync, statSync, existsSync, renameSync, } from 'fs';
2
2
  import { join, dirname, relative, extname } from 'path';
3
3
  const SKIP_DIRS = new Set([
4
4
  'node_modules', 'dist', 'build', '.git', '.next', '.nuxt', '.svelte-kit',
@@ -31,6 +31,13 @@ export function writeFile(p, content) {
31
31
  export function deleteFile(p) {
32
32
  unlinkSync(p);
33
33
  }
34
+ export function createDir(p) {
35
+ mkdirSync(p, { recursive: true });
36
+ }
37
+ export function moveFile(from, to) {
38
+ mkdirSync(dirname(to), { recursive: true });
39
+ renameSync(from, to);
40
+ }
34
41
  export function listFiles(dir, recursive = false, cwd = process.cwd()) {
35
42
  if (!existsSync(dir))
36
43
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/files/ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/files/ops.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { readFileSync, existsSync, readdirSync } from 'fs';
2
2
  import { join, basename } from 'path';
3
3
  import { homedir } from 'os';
4
+ import { createDir, moveFile, writeFile } from '../files/ops.js';
4
5
  const builtin = [
5
6
  {
6
7
  name: 'caveman',
@@ -33,7 +34,7 @@ const builtin = [
33
34
  ns: 'default',
34
35
  description: 'Show available commands',
35
36
  execute: (_, ctx) => {
36
- return 'Built-in skills: /caveman:caveman /caveman:normal /review /help\nType /list for all loaded skills.';
37
+ return 'Built-in: /review /mkdir /mv /touch /models /sessions /session /clear /list /help\nType /list for all loaded skills.';
37
38
  },
38
39
  },
39
40
  {
@@ -48,6 +49,43 @@ const builtin = [
48
49
  description: 'Choose or pull Ollama models',
49
50
  // execute handled specially in App.tsx before skill lookup
50
51
  },
52
+ {
53
+ name: 'mkdir',
54
+ ns: 'default',
55
+ description: 'Create a folder โ€” usage: /mkdir <path>',
56
+ execute: (args) => {
57
+ const p = args.trim();
58
+ if (!p)
59
+ return 'Usage: /mkdir <path>';
60
+ createDir(p);
61
+ return `created: ${p}`;
62
+ },
63
+ },
64
+ {
65
+ name: 'mv',
66
+ ns: 'default',
67
+ description: 'Move or rename file/folder โ€” usage: /mv <from> <to>',
68
+ execute: (args) => {
69
+ const parts = args.trim().split(/\s+/);
70
+ if (parts.length < 2)
71
+ return 'Usage: /mv <from> <to>';
72
+ const [from, to] = parts;
73
+ moveFile(from, to);
74
+ return `moved: ${from} โ†’ ${to}`;
75
+ },
76
+ },
77
+ {
78
+ name: 'touch',
79
+ ns: 'default',
80
+ description: 'Create empty file โ€” usage: /touch <path>',
81
+ execute: (args) => {
82
+ const p = args.trim();
83
+ if (!p)
84
+ return 'Usage: /touch <path>';
85
+ writeFile(p, '');
86
+ return `created: ${p}`;
87
+ },
88
+ },
51
89
  ];
52
90
  export class SkillLoader {
53
91
  map = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { readFile, writeFile, deleteFile, listFiles } from '../files/ops.js';
1
+ import { readFile, writeFile, deleteFile, listFiles, createDir, moveFile } from '../files/ops.js';
2
2
  import { exec } from 'child_process';
3
3
  import { promisify } from 'util';
4
4
  const run = promisify(exec);
@@ -54,6 +54,24 @@ export const tools = [
54
54
  return [stdout, stderr ? `stderr: ${stderr}` : ''].filter(Boolean).join('\n').trim();
55
55
  },
56
56
  },
57
+ {
58
+ name: 'create_folder',
59
+ description: 'Create a directory (and any missing parents)',
60
+ params: '{"path": "string"}',
61
+ execute: async ({ path }) => {
62
+ createDir(path);
63
+ return `created: ${path}`;
64
+ },
65
+ },
66
+ {
67
+ name: 'move_file',
68
+ description: 'Move or rename a file or directory',
69
+ params: '{"from": "string", "to": "string"}',
70
+ execute: async ({ from, to }) => {
71
+ moveFile(from, to);
72
+ return `moved: ${from} โ†’ ${to}`;
73
+ },
74
+ },
57
75
  ];
58
76
  export function getSystemPrompt(extra = '') {
59
77
  const toolDocs = tools.map(t => `- ${t.name}(${t.params}): ${t.description}`).join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,29 @@
1
1
  {
2
2
  "name": "miii-cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
+ "description": "Local AI coding assistant for your terminal. No cloud. No API keys.",
5
6
  "license": "MIT",
6
7
  "engines": {
7
8
  "node": ">=18"
8
9
  },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/maruakshay/miii-cli.git"
13
+ },
14
+ "homepage": "https://github.com/maruakshay/miii-cli#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/maruakshay/miii-cli/issues"
17
+ },
18
+ "keywords": [
19
+ "ai",
20
+ "cli",
21
+ "ollama",
22
+ "llm",
23
+ "coding-assistant",
24
+ "terminal",
25
+ "local-ai"
26
+ ],
9
27
  "bin": {
10
28
  "miii": "dist/index.js"
11
29
  },
package/src/files/ops.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readFileSync, writeFileSync, unlinkSync,
3
- mkdirSync, readdirSync, statSync, existsSync,
3
+ mkdirSync, readdirSync, statSync, existsSync, renameSync,
4
4
  } from 'fs'
5
5
  import { join, dirname, relative, extname } from 'path'
6
6
 
@@ -40,6 +40,15 @@ export function deleteFile(p: string): void {
40
40
  unlinkSync(p)
41
41
  }
42
42
 
43
+ export function createDir(p: string): void {
44
+ mkdirSync(p, { recursive: true })
45
+ }
46
+
47
+ export function moveFile(from: string, to: string): void {
48
+ mkdirSync(dirname(to), { recursive: true })
49
+ renameSync(from, to)
50
+ }
51
+
43
52
  export interface FileEntry {
44
53
  name: string
45
54
  path: string
@@ -1,6 +1,7 @@
1
1
  import { readFileSync, existsSync, readdirSync } from 'fs'
2
2
  import { join, basename } from 'path'
3
3
  import { homedir } from 'os'
4
+ import { createDir, moveFile, writeFile } from '../files/ops.js'
4
5
 
5
6
  export interface SkillContext {
6
7
  messages: Array<{ role: string; content: string }>
@@ -49,7 +50,7 @@ const builtin: Skill[] = [
49
50
  ns: 'default',
50
51
  description: 'Show available commands',
51
52
  execute: (_, ctx) => {
52
- return 'Built-in skills: /caveman:caveman /caveman:normal /review /help\nType /list for all loaded skills.'
53
+ return 'Built-in: /review /mkdir /mv /touch /models /sessions /session /clear /list /help\nType /list for all loaded skills.'
53
54
  },
54
55
  },
55
56
  {
@@ -64,6 +65,40 @@ const builtin: Skill[] = [
64
65
  description: 'Choose or pull Ollama models',
65
66
  // execute handled specially in App.tsx before skill lookup
66
67
  },
68
+ {
69
+ name: 'mkdir',
70
+ ns: 'default',
71
+ description: 'Create a folder โ€” usage: /mkdir <path>',
72
+ execute: (args) => {
73
+ const p = args.trim()
74
+ if (!p) return 'Usage: /mkdir <path>'
75
+ createDir(p)
76
+ return `created: ${p}`
77
+ },
78
+ },
79
+ {
80
+ name: 'mv',
81
+ ns: 'default',
82
+ description: 'Move or rename file/folder โ€” usage: /mv <from> <to>',
83
+ execute: (args) => {
84
+ const parts = args.trim().split(/\s+/)
85
+ if (parts.length < 2) return 'Usage: /mv <from> <to>'
86
+ const [from, to] = parts
87
+ moveFile(from, to)
88
+ return `moved: ${from} โ†’ ${to}`
89
+ },
90
+ },
91
+ {
92
+ name: 'touch',
93
+ ns: 'default',
94
+ description: 'Create empty file โ€” usage: /touch <path>',
95
+ execute: (args) => {
96
+ const p = args.trim()
97
+ if (!p) return 'Usage: /touch <path>'
98
+ writeFile(p, '')
99
+ return `created: ${p}`
100
+ },
101
+ },
67
102
  ]
68
103
 
69
104
  export class SkillLoader {
@@ -1,4 +1,4 @@
1
- import { readFile, writeFile, deleteFile, listFiles } from '../files/ops.js'
1
+ import { readFile, writeFile, deleteFile, listFiles, createDir, moveFile } from '../files/ops.js'
2
2
  import { exec } from 'child_process'
3
3
  import { promisify } from 'util'
4
4
 
@@ -58,6 +58,24 @@ export const tools: Tool[] = [
58
58
  return [stdout, stderr ? `stderr: ${stderr}` : ''].filter(Boolean).join('\n').trim()
59
59
  },
60
60
  },
61
+ {
62
+ name: 'create_folder',
63
+ description: 'Create a directory (and any missing parents)',
64
+ params: '{"path": "string"}',
65
+ execute: async ({ path }) => {
66
+ createDir(path as string)
67
+ return `created: ${path}`
68
+ },
69
+ },
70
+ {
71
+ name: 'move_file',
72
+ description: 'Move or rename a file or directory',
73
+ params: '{"from": "string", "to": "string"}',
74
+ execute: async ({ from, to }) => {
75
+ moveFile(from as string, to as string)
76
+ return `moved: ${from} โ†’ ${to}`
77
+ },
78
+ },
61
79
  ]
62
80
 
63
81
  export function getSystemPrompt(extra = ''): string {