@kolisachint/hoocode-agent 0.2.4 → 0.2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.5] - 2026-05-15
4
+
5
+ ### Fixed
6
+
7
+ - Fixed `init.ts` seeding the global extensions directory at the wrong path. It created `~/.hoocode/extensions/` while the extension loader (`core/extensions/loader.ts` and `core/resource-loader.ts`) reads from `agentDir/extensions` = `~/.hoocode/agent/extensions/`. As a result, extensions placed in the freshly seeded directory were silently invisible. `initConfig()` now creates `~/.hoocode/agent/extensions/` directly, and the redundant `mkdir("agent")` call was dropped since the recursive mkdir on `agent/extensions` already covers it.
8
+
3
9
  ## [0.2.4] - 2026-05-15
4
10
 
5
11
  ### Fixed
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAqBA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBhD","sourcesContent":["import { mkdir, stat, writeFile } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { getHooCodeDir } from \"./config.js\";\nimport { EMBEDDED_DEFAULT_CONFIG, EMBEDDED_MODES, EMBEDDED_PROFILES } from \"./init-templates.generated.js\";\n\nconst HOOCODE_DIR = getHooCodeDir();\n\nasync function exists(p: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(p);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function writeSeedFile(dest: string, contents: string): Promise<void> {\n\tawait mkdir(dirname(dest), { recursive: true });\n\tawait writeFile(dest, contents);\n}\n\nexport async function initConfig(): Promise<void> {\n\tconst configPath = join(HOOCODE_DIR, \"agent\", \"hoo-config.json\");\n\n\tif (await exists(configPath)) {\n\t\treturn;\n\t}\n\n\tawait mkdir(join(HOOCODE_DIR, \"modes\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"profiles\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"mcp-servers\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"extensions\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"agent\"), { recursive: true });\n\n\tawait writeSeedFile(configPath, EMBEDDED_DEFAULT_CONFIG);\n\n\tfor (const [modeName, content] of Object.entries(EMBEDDED_MODES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"modes\", modeName, \"system.md\"), content);\n\t}\n\n\tfor (const [profileName, content] of Object.entries(EMBEDDED_PROFILES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"profiles\", profileName, \"context.md\"), content);\n\t}\n}\n"]}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAqBA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBhD","sourcesContent":["import { mkdir, stat, writeFile } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { getHooCodeDir } from \"./config.js\";\nimport { EMBEDDED_DEFAULT_CONFIG, EMBEDDED_MODES, EMBEDDED_PROFILES } from \"./init-templates.generated.js\";\n\nconst HOOCODE_DIR = getHooCodeDir();\n\nasync function exists(p: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(p);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function writeSeedFile(dest: string, contents: string): Promise<void> {\n\tawait mkdir(dirname(dest), { recursive: true });\n\tawait writeFile(dest, contents);\n}\n\nexport async function initConfig(): Promise<void> {\n\tconst configPath = join(HOOCODE_DIR, \"agent\", \"hoo-config.json\");\n\n\tif (await exists(configPath)) {\n\t\treturn;\n\t}\n\n\tawait mkdir(join(HOOCODE_DIR, \"modes\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"profiles\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"mcp-servers\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"agent\", \"extensions\"), { recursive: true });\n\n\tawait writeSeedFile(configPath, EMBEDDED_DEFAULT_CONFIG);\n\n\tfor (const [modeName, content] of Object.entries(EMBEDDED_MODES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"modes\", modeName, \"system.md\"), content);\n\t}\n\n\tfor (const [profileName, content] of Object.entries(EMBEDDED_PROFILES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"profiles\", profileName, \"context.md\"), content);\n\t}\n}\n"]}
package/dist/init.js CHANGED
@@ -24,8 +24,7 @@ export async function initConfig() {
24
24
  await mkdir(join(HOOCODE_DIR, "modes"), { recursive: true });
25
25
  await mkdir(join(HOOCODE_DIR, "profiles"), { recursive: true });
26
26
  await mkdir(join(HOOCODE_DIR, "mcp-servers"), { recursive: true });
27
- await mkdir(join(HOOCODE_DIR, "extensions"), { recursive: true });
28
- await mkdir(join(HOOCODE_DIR, "agent"), { recursive: true });
27
+ await mkdir(join(HOOCODE_DIR, "agent", "extensions"), { recursive: true });
29
28
  await writeSeedFile(configPath, EMBEDDED_DEFAULT_CONFIG);
30
29
  for (const [modeName, content] of Object.entries(EMBEDDED_MODES)) {
31
30
  await writeSeedFile(join(HOOCODE_DIR, "modes", modeName, "system.md"), content);
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAE3G,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;AAEpC,KAAK,UAAU,MAAM,CAAC,CAAS,EAAoB;IAClD,IAAI,CAAC;QACJ,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,QAAgB,EAAiB;IAC3E,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,CAChC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,GAAkB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEjE,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO;IACR,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,MAAM,aAAa,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAEzD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAClE,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxE,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;IACxF,CAAC;AAAA,CACD","sourcesContent":["import { mkdir, stat, writeFile } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { getHooCodeDir } from \"./config.js\";\nimport { EMBEDDED_DEFAULT_CONFIG, EMBEDDED_MODES, EMBEDDED_PROFILES } from \"./init-templates.generated.js\";\n\nconst HOOCODE_DIR = getHooCodeDir();\n\nasync function exists(p: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(p);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function writeSeedFile(dest: string, contents: string): Promise<void> {\n\tawait mkdir(dirname(dest), { recursive: true });\n\tawait writeFile(dest, contents);\n}\n\nexport async function initConfig(): Promise<void> {\n\tconst configPath = join(HOOCODE_DIR, \"agent\", \"hoo-config.json\");\n\n\tif (await exists(configPath)) {\n\t\treturn;\n\t}\n\n\tawait mkdir(join(HOOCODE_DIR, \"modes\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"profiles\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"mcp-servers\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"extensions\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"agent\"), { recursive: true });\n\n\tawait writeSeedFile(configPath, EMBEDDED_DEFAULT_CONFIG);\n\n\tfor (const [modeName, content] of Object.entries(EMBEDDED_MODES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"modes\", modeName, \"system.md\"), content);\n\t}\n\n\tfor (const [profileName, content] of Object.entries(EMBEDDED_PROFILES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"profiles\", profileName, \"context.md\"), content);\n\t}\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAE3G,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;AAEpC,KAAK,UAAU,MAAM,CAAC,CAAS,EAAoB;IAClD,IAAI,CAAC;QACJ,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,QAAgB,EAAiB;IAC3E,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,CAChC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,GAAkB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEjE,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO;IACR,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,MAAM,aAAa,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAEzD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAClE,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxE,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;IACxF,CAAC;AAAA,CACD","sourcesContent":["import { mkdir, stat, writeFile } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { getHooCodeDir } from \"./config.js\";\nimport { EMBEDDED_DEFAULT_CONFIG, EMBEDDED_MODES, EMBEDDED_PROFILES } from \"./init-templates.generated.js\";\n\nconst HOOCODE_DIR = getHooCodeDir();\n\nasync function exists(p: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(p);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function writeSeedFile(dest: string, contents: string): Promise<void> {\n\tawait mkdir(dirname(dest), { recursive: true });\n\tawait writeFile(dest, contents);\n}\n\nexport async function initConfig(): Promise<void> {\n\tconst configPath = join(HOOCODE_DIR, \"agent\", \"hoo-config.json\");\n\n\tif (await exists(configPath)) {\n\t\treturn;\n\t}\n\n\tawait mkdir(join(HOOCODE_DIR, \"modes\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"profiles\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"mcp-servers\"), { recursive: true });\n\tawait mkdir(join(HOOCODE_DIR, \"agent\", \"extensions\"), { recursive: true });\n\n\tawait writeSeedFile(configPath, EMBEDDED_DEFAULT_CONFIG);\n\n\tfor (const [modeName, content] of Object.entries(EMBEDDED_MODES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"modes\", modeName, \"system.md\"), content);\n\t}\n\n\tfor (const [profileName, content] of Object.entries(EMBEDDED_PROFILES)) {\n\t\tawait writeSeedFile(join(HOOCODE_DIR, \"profiles\", profileName, \"context.md\"), content);\n\t}\n}\n"]}
@@ -1,22 +1,22 @@
1
1
  {
2
- "name": "@kolisachint/hoocode-extension-custom-provider-anthropic",
3
- "private": true,
4
- "version": "0.1.5",
5
- "type": "module",
6
- "engines": {
7
- "bun": ">=1.0.0"
8
- },
9
- "scripts": {
10
- "clean": "echo 'nothing to clean'",
11
- "build": "echo 'nothing to build'",
12
- "check": "echo 'nothing to check'"
13
- },
14
- "hoocode": {
15
- "extensions": [
16
- "./index.ts"
17
- ]
18
- },
19
- "dependencies": {
20
- "@anthropic-ai/sdk": "^0.52.0"
21
- }
2
+ "name": "@kolisachint/hoocode-extension-custom-provider-anthropic",
3
+ "private": true,
4
+ "version": "0.1.6",
5
+ "type": "module",
6
+ "engines": {
7
+ "bun": ">=1.0.0"
8
+ },
9
+ "scripts": {
10
+ "clean": "echo 'nothing to clean'",
11
+ "build": "echo 'nothing to build'",
12
+ "check": "echo 'nothing to check'"
13
+ },
14
+ "hoocode": {
15
+ "extensions": [
16
+ "./index.ts"
17
+ ]
18
+ },
19
+ "dependencies": {
20
+ "@anthropic-ai/sdk": "^0.52.0"
21
+ }
22
22
  }
@@ -1,19 +1,19 @@
1
1
  {
2
- "name": "@kolisachint/hoocode-extension-custom-provider-gitlab-duo",
3
- "private": true,
4
- "version": "0.1.5",
5
- "type": "module",
6
- "engines": {
7
- "bun": ">=1.0.0"
8
- },
9
- "scripts": {
10
- "clean": "echo 'nothing to clean'",
11
- "build": "echo 'nothing to build'",
12
- "check": "echo 'nothing to check'"
13
- },
14
- "hoocode": {
15
- "extensions": [
16
- "./index.ts"
17
- ]
18
- }
2
+ "name": "@kolisachint/hoocode-extension-custom-provider-gitlab-duo",
3
+ "private": true,
4
+ "version": "0.1.6",
5
+ "type": "module",
6
+ "engines": {
7
+ "bun": ">=1.0.0"
8
+ },
9
+ "scripts": {
10
+ "clean": "echo 'nothing to clean'",
11
+ "build": "echo 'nothing to build'",
12
+ "check": "echo 'nothing to check'"
13
+ },
14
+ "hoocode": {
15
+ "extensions": [
16
+ "./index.ts"
17
+ ]
18
+ }
19
19
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-extension-sandbox",
3
3
  "private": true,
4
- "version": "0.1.5",
4
+ "version": "0.1.6",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "bun": ">=1.0.0"
@@ -1,25 +1,25 @@
1
1
  {
2
- "name": "@kolisachint/hoocode-extension-with-deps",
3
- "private": true,
4
- "version": "0.1.5",
5
- "type": "module",
6
- "engines": {
7
- "bun": ">=1.0.0"
8
- },
9
- "scripts": {
10
- "clean": "echo 'nothing to clean'",
11
- "build": "echo 'nothing to build'",
12
- "check": "echo 'nothing to check'"
13
- },
14
- "hoocode": {
15
- "extensions": [
16
- "./index.ts"
17
- ]
18
- },
19
- "dependencies": {
20
- "ms": "^2.1.3"
21
- },
22
- "devDependencies": {
23
- "@types/ms": "^2.1.0"
24
- }
2
+ "name": "@kolisachint/hoocode-extension-with-deps",
3
+ "private": true,
4
+ "version": "0.1.6",
5
+ "type": "module",
6
+ "engines": {
7
+ "bun": ">=1.0.0"
8
+ },
9
+ "scripts": {
10
+ "clean": "echo 'nothing to clean'",
11
+ "build": "echo 'nothing to build'",
12
+ "check": "echo 'nothing to check'"
13
+ },
14
+ "hoocode": {
15
+ "extensions": [
16
+ "./index.ts"
17
+ ]
18
+ },
19
+ "dependencies": {
20
+ "ms": "^2.1.3"
21
+ },
22
+ "devDependencies": {
23
+ "@types/ms": "^2.1.0"
24
+ }
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-agent",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "hoocodeConfig": {
@@ -43,9 +43,9 @@
43
43
  "prepublishOnly": "npm run clean && npm run build"
44
44
  },
45
45
  "dependencies": {
46
- "@kolisachint/hoocode-agent-core": "^0.2.4",
47
- "@kolisachint/hoocode-ai": "^0.2.4",
48
- "@kolisachint/hoocode-tui": "^0.2.4",
46
+ "@kolisachint/hoocode-agent-core": "^0.2.5",
47
+ "@kolisachint/hoocode-ai": "^0.2.5",
48
+ "@kolisachint/hoocode-tui": "^0.2.5",
49
49
  "@silvia-odwyer/photon-node": "^0.3.4",
50
50
  "chalk": "^5.5.0",
51
51
  "cli-highlight": "^2.1.11",