oh-my-claudecode 0.1.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/README.md +281 -0
- package/bin/oh-my-claudecode.js +5 -0
- package/dist/agents/azathoth.d.ts +19 -0
- package/dist/agents/azathoth.d.ts.map +1 -0
- package/dist/agents/azathoth.js +105 -0
- package/dist/agents/azathoth.js.map +1 -0
- package/dist/agents/builtin-agents.d.ts +18 -0
- package/dist/agents/builtin-agents.d.ts.map +1 -0
- package/dist/agents/builtin-agents.js +141 -0
- package/dist/agents/builtin-agents.js.map +1 -0
- package/dist/agents/cthulhu.d.ts +21 -0
- package/dist/agents/cthulhu.d.ts.map +1 -0
- package/dist/agents/cthulhu.js +368 -0
- package/dist/agents/cthulhu.js.map +1 -0
- package/dist/agents/dagon.d.ts +17 -0
- package/dist/agents/dagon.d.ts.map +1 -0
- package/dist/agents/dagon.js +190 -0
- package/dist/agents/dagon.js.map +1 -0
- package/dist/agents/hastur.d.ts +18 -0
- package/dist/agents/hastur.d.ts.map +1 -0
- package/dist/agents/hastur.js +92 -0
- package/dist/agents/hastur.js.map +1 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +13 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/ithaqua.d.ts +19 -0
- package/dist/agents/ithaqua.d.ts.map +1 -0
- package/dist/agents/ithaqua.js +254 -0
- package/dist/agents/ithaqua.js.map +1 -0
- package/dist/agents/nyarlathotep.d.ts +18 -0
- package/dist/agents/nyarlathotep.d.ts.map +1 -0
- package/dist/agents/nyarlathotep.js +129 -0
- package/dist/agents/nyarlathotep.js.map +1 -0
- package/dist/agents/shoggoth.d.ts +17 -0
- package/dist/agents/shoggoth.d.ts.map +1 -0
- package/dist/agents/shoggoth.js +123 -0
- package/dist/agents/shoggoth.js.map +1 -0
- package/dist/agents/shub-niggurath.d.ts +18 -0
- package/dist/agents/shub-niggurath.d.ts.map +1 -0
- package/dist/agents/shub-niggurath.js +164 -0
- package/dist/agents/shub-niggurath.js.map +1 -0
- package/dist/agents/the-deep-one.d.ts +17 -0
- package/dist/agents/the-deep-one.d.ts.map +1 -0
- package/dist/agents/the-deep-one.js +114 -0
- package/dist/agents/the-deep-one.js.map +1 -0
- package/dist/agents/tsathoggua.d.ts +19 -0
- package/dist/agents/tsathoggua.d.ts.map +1 -0
- package/dist/agents/tsathoggua.js +177 -0
- package/dist/agents/tsathoggua.js.map +1 -0
- package/dist/agents/types.d.ts +61 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/yog-sothoth.d.ts +17 -0
- package/dist/agents/yog-sothoth.d.ts.map +1 -0
- package/dist/agents/yog-sothoth.js +147 -0
- package/dist/agents/yog-sothoth.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +105 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +53 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.d.ts +5 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +179 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +7406 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +197 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/features/background-agent/index.d.ts +58 -0
- package/dist/features/background-agent/index.d.ts.map +1 -0
- package/dist/features/background-agent/index.js +113 -0
- package/dist/features/background-agent/index.js.map +1 -0
- package/dist/features/mcp-manager/index.d.ts +40 -0
- package/dist/features/mcp-manager/index.d.ts.map +1 -0
- package/dist/features/mcp-manager/index.js +71 -0
- package/dist/features/mcp-manager/index.js.map +1 -0
- package/dist/features/skill-loader/index.d.ts +37 -0
- package/dist/features/skill-loader/index.d.ts.map +1 -0
- package/dist/features/skill-loader/index.js +81 -0
- package/dist/features/skill-loader/index.js.map +1 -0
- package/dist/hooks/comment-checker.d.ts +18 -0
- package/dist/hooks/comment-checker.d.ts.map +1 -0
- package/dist/hooks/comment-checker.js +75 -0
- package/dist/hooks/comment-checker.js.map +1 -0
- package/dist/hooks/elder-loop.d.ts +26 -0
- package/dist/hooks/elder-loop.d.ts.map +1 -0
- package/dist/hooks/elder-loop.js +84 -0
- package/dist/hooks/elder-loop.js.map +1 -0
- package/dist/hooks/index.d.ts +20 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +73 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/rules-injector.d.ts +12 -0
- package/dist/hooks/rules-injector.d.ts.map +1 -0
- package/dist/hooks/rules-injector.js +52 -0
- package/dist/hooks/rules-injector.js.map +1 -0
- package/dist/hooks/todo-continuation.d.ts +25 -0
- package/dist/hooks/todo-continuation.d.ts.map +1 -0
- package/dist/hooks/todo-continuation.js +74 -0
- package/dist/hooks/todo-continuation.js.map +1 -0
- package/dist/hooks/write-guard.d.ts +11 -0
- package/dist/hooks/write-guard.d.ts.map +1 -0
- package/dist/hooks/write-guard.js +39 -0
- package/dist/hooks/write-guard.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-config.d.ts +22 -0
- package/dist/plugin-config.d.ts.map +1 -0
- package/dist/plugin-config.js +133 -0
- package/dist/plugin-config.js.map +1 -0
- package/dist/plugin-handlers/config-handler.d.ts +21 -0
- package/dist/plugin-handlers/config-handler.d.ts.map +1 -0
- package/dist/plugin-handlers/config-handler.js +33 -0
- package/dist/plugin-handlers/config-handler.js.map +1 -0
- package/dist/plugin-handlers/index.d.ts +2 -0
- package/dist/plugin-handlers/index.d.ts.map +1 -0
- package/dist/plugin-handlers/index.js +2 -0
- package/dist/plugin-handlers/index.js.map +1 -0
- package/dist/shared/deep-merge.d.ts +6 -0
- package/dist/shared/deep-merge.d.ts.map +1 -0
- package/dist/shared/deep-merge.js +30 -0
- package/dist/shared/deep-merge.js.map +1 -0
- package/dist/shared/index.d.ts +5 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +5 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/log.d.ts +3 -0
- package/dist/shared/log.d.ts.map +1 -0
- package/dist/shared/log.js +22 -0
- package/dist/shared/log.js.map +1 -0
- package/dist/shared/model-resolution.d.ts +15 -0
- package/dist/shared/model-resolution.d.ts.map +1 -0
- package/dist/shared/model-resolution.js +46 -0
- package/dist/shared/model-resolution.js.map +1 -0
- package/dist/shared/parse-jsonc.d.ts +6 -0
- package/dist/shared/parse-jsonc.d.ts.map +1 -0
- package/dist/shared/parse-jsonc.js +14 -0
- package/dist/shared/parse-jsonc.js.map +1 -0
- package/package.json +42 -0
- package/skills/cancel-elder-loop.md +22 -0
- package/skills/cthulhu.md +45 -0
- package/skills/elder-loop.md +39 -0
- package/skills/exorcise-ai-slop.md +45 -0
- package/skills/invoke-shub.md +32 -0
- package/skills/old-ones-init.md +47 -0
- package/skills/session-handoff.md +57 -0
- package/skills/shoggoth.md +34 -0
- package/skills/yog-sothoth.md +30 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write Guard Hook
|
|
3
|
+
*
|
|
4
|
+
* Mapped from: write-existing-file-guard
|
|
5
|
+
*
|
|
6
|
+
* Warns when Write is used on an existing file (should use Edit instead).
|
|
7
|
+
* Prevents accidental full-file overwrites when only a portion should change.
|
|
8
|
+
*/
|
|
9
|
+
export const WRITE_GUARD_HOOK_SCRIPT = `#!/usr/bin/env bash
|
|
10
|
+
# oh-my-claudecode: Write Guard PreToolUse Hook
|
|
11
|
+
# Fires before Write — warns if writing to an existing file.
|
|
12
|
+
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
TOOL_NAME="\${CLAUDE_TOOL_NAME:-}"
|
|
16
|
+
FILE_PATH="\${CLAUDE_TOOL_INPUT_FILE_PATH:-}"
|
|
17
|
+
|
|
18
|
+
if [ "$TOOL_NAME" != "Write" ] || [ -z "$FILE_PATH" ]; then
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if [ -f "$FILE_PATH" ]; then
|
|
23
|
+
echo "[WRITE GUARD] Warning: Write tool used on existing file: $FILE_PATH"
|
|
24
|
+
echo "Consider using Edit instead to preserve unintended changes."
|
|
25
|
+
echo "If you intend to fully replace this file, proceed."
|
|
26
|
+
fi
|
|
27
|
+
`;
|
|
28
|
+
export function getWriteGuardHookConfig() {
|
|
29
|
+
return {
|
|
30
|
+
matcher: "Write",
|
|
31
|
+
hooks: [
|
|
32
|
+
{
|
|
33
|
+
type: "command",
|
|
34
|
+
command: "~/.claude/hooks/write-guard.sh",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=write-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-guard.js","sourceRoot":"","sources":["../../src/hooks/write-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;CAkBtC,CAAA;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,gCAAgC;aAC1C;SACF;KACF,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-my-claudecode — Elder Gods Agentic Harness for Claude Code
|
|
3
|
+
*
|
|
4
|
+
* Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.
|
|
5
|
+
*
|
|
6
|
+
* This is the main plugin entry point. It exports:
|
|
7
|
+
* - Agent configs for all 11 Elder God agents
|
|
8
|
+
* - Hook definitions for lifecycle behaviors
|
|
9
|
+
* - Config loading and merging utilities
|
|
10
|
+
* - The ClaudeCodePlugin descriptor used by the installer
|
|
11
|
+
*
|
|
12
|
+
* The 11 Elder God agents:
|
|
13
|
+
*
|
|
14
|
+
* | Elder God | Source Agent | Model | Role |
|
|
15
|
+
* |-----------------|----------------|--------|-------------------------|
|
|
16
|
+
* | Cthulhu | Sisyphus | Opus | Main orchestrator |
|
|
17
|
+
* | Nyarlathotep | Hephaestus | Opus | Deep autonomous worker |
|
|
18
|
+
* | Azathoth | Atlas | Opus | First-message planner |
|
|
19
|
+
* | Shub-Niggurath | Prometheus | Opus | Strategic planner |
|
|
20
|
+
* | Yog-Sothoth | Oracle | Opus | Architecture advisor |
|
|
21
|
+
* | Hastur | Sisyphus-Jr | Sonnet | Lightweight orchestrator|
|
|
22
|
+
* | Ithaqua | Metis | Sonnet | Pre-planning consultant |
|
|
23
|
+
* | Tsathoggua | Momus | Sonnet | Quality reviewer |
|
|
24
|
+
* | Dagon | Librarian | Sonnet | Documentation search |
|
|
25
|
+
* | The Deep One | Multimodal | Sonnet | Vision agent |
|
|
26
|
+
* | Shoggoth | Explore | Haiku | Fast codebase search |
|
|
27
|
+
*/
|
|
28
|
+
export { loadPluginConfig, mergeConfigs, loadConfigFromPath } from "./plugin-config.js";
|
|
29
|
+
export { buildBuiltinAgents, AGENT_METADATA_MAP } from "./agents/builtin-agents.js";
|
|
30
|
+
export { getEnabledHooks, buildHooksConfig, ALL_HOOK_DEFINITIONS } from "./hooks/index.js";
|
|
31
|
+
export { applyConfig } from "./plugin-handlers/config-handler.js";
|
|
32
|
+
export type { OhMyClaudeCodeConfig, AgentOverrides, HookName, BuiltinAgentName, BuiltinCommandName, BuiltinSkillName, McpName, ClaudeModel, } from "./config/index.js";
|
|
33
|
+
export type { AgentConfig, AgentMode, AgentPromptMetadata, AvailableAgent, AvailableSkill, AvailableCategory, } from "./agents/types.js";
|
|
34
|
+
export { createCthulhuAgent, createYogSothothAgent, createShoggothAgent, createDagonAgent, createTsathoggua, createIthaquaAgent, createHasturAgent, createNyarlathotepAgent, createAzathothAgent, createShubNiggurathAgent, createDeepOneAgent, } from "./agents/index.js";
|
|
35
|
+
export { MODELS, resolveModel, resolveAgentModel } from "./shared/model-resolution.js";
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACnF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAEjE,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-my-claudecode — Elder Gods Agentic Harness for Claude Code
|
|
3
|
+
*
|
|
4
|
+
* Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.
|
|
5
|
+
*
|
|
6
|
+
* This is the main plugin entry point. It exports:
|
|
7
|
+
* - Agent configs for all 11 Elder God agents
|
|
8
|
+
* - Hook definitions for lifecycle behaviors
|
|
9
|
+
* - Config loading and merging utilities
|
|
10
|
+
* - The ClaudeCodePlugin descriptor used by the installer
|
|
11
|
+
*
|
|
12
|
+
* The 11 Elder God agents:
|
|
13
|
+
*
|
|
14
|
+
* | Elder God | Source Agent | Model | Role |
|
|
15
|
+
* |-----------------|----------------|--------|-------------------------|
|
|
16
|
+
* | Cthulhu | Sisyphus | Opus | Main orchestrator |
|
|
17
|
+
* | Nyarlathotep | Hephaestus | Opus | Deep autonomous worker |
|
|
18
|
+
* | Azathoth | Atlas | Opus | First-message planner |
|
|
19
|
+
* | Shub-Niggurath | Prometheus | Opus | Strategic planner |
|
|
20
|
+
* | Yog-Sothoth | Oracle | Opus | Architecture advisor |
|
|
21
|
+
* | Hastur | Sisyphus-Jr | Sonnet | Lightweight orchestrator|
|
|
22
|
+
* | Ithaqua | Metis | Sonnet | Pre-planning consultant |
|
|
23
|
+
* | Tsathoggua | Momus | Sonnet | Quality reviewer |
|
|
24
|
+
* | Dagon | Librarian | Sonnet | Documentation search |
|
|
25
|
+
* | The Deep One | Multimodal | Sonnet | Vision agent |
|
|
26
|
+
* | Shoggoth | Explore | Haiku | Fast codebase search |
|
|
27
|
+
*/
|
|
28
|
+
export { loadPluginConfig, mergeConfigs, loadConfigFromPath } from "./plugin-config.js";
|
|
29
|
+
export { buildBuiltinAgents, AGENT_METADATA_MAP } from "./agents/builtin-agents.js";
|
|
30
|
+
export { getEnabledHooks, buildHooksConfig, ALL_HOOK_DEFINITIONS } from "./hooks/index.js";
|
|
31
|
+
export { applyConfig } from "./plugin-handlers/config-handler.js";
|
|
32
|
+
// Individual agent creators
|
|
33
|
+
export { createCthulhuAgent, createYogSothothAgent, createShoggothAgent, createDagonAgent, createTsathoggua, createIthaquaAgent, createHasturAgent, createNyarlathotepAgent, createAzathothAgent, createShubNiggurathAgent, createDeepOneAgent, } from "./agents/index.js";
|
|
34
|
+
export { MODELS, resolveModel, resolveAgentModel } from "./shared/model-resolution.js";
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACnF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAsBjE,4BAA4B;AAC5B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type OhMyClaudeCodeConfig } from "./config/schema.js";
|
|
2
|
+
/** Parse config partially — skip invalid sections instead of failing entirely */
|
|
3
|
+
export declare function parseConfigPartially(rawConfig: Record<string, unknown>): OhMyClaudeCodeConfig | null;
|
|
4
|
+
/** Detect config file at a base directory, preferring .jsonc over .json */
|
|
5
|
+
export declare function detectConfigFile(baseDir: string): {
|
|
6
|
+
path: string;
|
|
7
|
+
exists: boolean;
|
|
8
|
+
};
|
|
9
|
+
/** Load and parse a config file from a given path */
|
|
10
|
+
export declare function loadConfigFromPath(configPath: string): OhMyClaudeCodeConfig | null;
|
|
11
|
+
/** Deep merge two configs, with array keys unioned and objects recursively merged */
|
|
12
|
+
export declare function mergeConfigs(base: OhMyClaudeCodeConfig, override: OhMyClaudeCodeConfig): OhMyClaudeCodeConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Load and merge plugin config from:
|
|
15
|
+
* 1. User-level (~/.claude/oh-my-claudecode.json[c])
|
|
16
|
+
* 2. Project-level (.claude/oh-my-claudecode.json[c])
|
|
17
|
+
*
|
|
18
|
+
* Project config overrides user config for scalar/object fields.
|
|
19
|
+
* Array fields (disabled_*) are unioned.
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadPluginConfig(projectDirectory: string): OhMyClaudeCodeConfig;
|
|
22
|
+
//# sourceMappingURL=plugin-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-config.d.ts","sourceRoot":"","sources":["../src/plugin-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAgB1F,iFAAiF;AACjF,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,oBAAoB,GAAG,IAAI,CA6B7B;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAanF;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CA4BlF;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,oBAAoB,GAC7B,oBAAoB,CAoBtB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,oBAAoB,CA6B/E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { OhMyClaudeCodeConfigSchema } from "./config/schema.js";
|
|
4
|
+
import { deepMerge, parseJsonc, log } from "./shared/index.js";
|
|
5
|
+
const CONFIG_BASENAME = "oh-my-claudecode";
|
|
6
|
+
const LEGACY_BASENAME = "elder-gods";
|
|
7
|
+
const PARTIAL_STRING_ARRAY_KEYS = new Set([
|
|
8
|
+
"disabled_mcps",
|
|
9
|
+
"disabled_agents",
|
|
10
|
+
"disabled_skills",
|
|
11
|
+
"disabled_hooks",
|
|
12
|
+
"disabled_commands",
|
|
13
|
+
"disabled_tools",
|
|
14
|
+
"mcp_env_allowlist",
|
|
15
|
+
]);
|
|
16
|
+
/** Parse config partially — skip invalid sections instead of failing entirely */
|
|
17
|
+
export function parseConfigPartially(rawConfig) {
|
|
18
|
+
const fullResult = OhMyClaudeCodeConfigSchema.safeParse(rawConfig);
|
|
19
|
+
if (fullResult.success)
|
|
20
|
+
return fullResult.data;
|
|
21
|
+
const partial = {};
|
|
22
|
+
for (const key of Object.keys(rawConfig)) {
|
|
23
|
+
if (PARTIAL_STRING_ARRAY_KEYS.has(key)) {
|
|
24
|
+
const val = rawConfig[key];
|
|
25
|
+
if (Array.isArray(val) && val.every(v => typeof v === "string")) {
|
|
26
|
+
partial[key] = val;
|
|
27
|
+
}
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const result = OhMyClaudeCodeConfigSchema.safeParse({ [key]: rawConfig[key] });
|
|
31
|
+
if (result.success) {
|
|
32
|
+
const parsed = result.data;
|
|
33
|
+
if (parsed[key] !== undefined) {
|
|
34
|
+
partial[key] = parsed[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
log(`Config section "${key}" is invalid — skipping`, {
|
|
39
|
+
errors: result.error.issues.map(i => `${i.path.join(".")}: ${i.message}`),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return partial;
|
|
44
|
+
}
|
|
45
|
+
/** Detect config file at a base directory, preferring .jsonc over .json */
|
|
46
|
+
export function detectConfigFile(baseDir) {
|
|
47
|
+
const candidates = [
|
|
48
|
+
path.join(baseDir, `${CONFIG_BASENAME}.jsonc`),
|
|
49
|
+
path.join(baseDir, `${CONFIG_BASENAME}.json`),
|
|
50
|
+
path.join(baseDir, `${LEGACY_BASENAME}.jsonc`),
|
|
51
|
+
path.join(baseDir, `${LEGACY_BASENAME}.json`),
|
|
52
|
+
];
|
|
53
|
+
for (const candidate of candidates) {
|
|
54
|
+
if (fs.existsSync(candidate)) {
|
|
55
|
+
return { path: candidate, exists: true };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { path: path.join(baseDir, `${CONFIG_BASENAME}.json`), exists: false };
|
|
59
|
+
}
|
|
60
|
+
/** Load and parse a config file from a given path */
|
|
61
|
+
export function loadConfigFromPath(configPath) {
|
|
62
|
+
try {
|
|
63
|
+
if (!fs.existsSync(configPath))
|
|
64
|
+
return null;
|
|
65
|
+
const content = fs.readFileSync(configPath, "utf-8");
|
|
66
|
+
const rawConfig = parseJsonc(content);
|
|
67
|
+
const result = OhMyClaudeCodeConfigSchema.safeParse(rawConfig);
|
|
68
|
+
if (result.success) {
|
|
69
|
+
log(`Config loaded from ${configPath}`);
|
|
70
|
+
return result.data;
|
|
71
|
+
}
|
|
72
|
+
log(`Config validation errors in ${configPath}`, {
|
|
73
|
+
errors: result.error.issues.map(i => `${i.path.join(".")}: ${i.message}`),
|
|
74
|
+
});
|
|
75
|
+
const partial = parseConfigPartially(rawConfig);
|
|
76
|
+
if (partial) {
|
|
77
|
+
log(`Partial config loaded from ${configPath}`);
|
|
78
|
+
return partial;
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
log(`Error loading config from ${configPath}`, { error: String(err) });
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Deep merge two configs, with array keys unioned and objects recursively merged */
|
|
88
|
+
export function mergeConfigs(base, override) {
|
|
89
|
+
return {
|
|
90
|
+
...base,
|
|
91
|
+
...override,
|
|
92
|
+
agents: deepMerge(base.agents, override.agents),
|
|
93
|
+
categories: deepMerge(base.categories, override.categories),
|
|
94
|
+
disabled_agents: [...new Set([...(base.disabled_agents ?? []), ...(override.disabled_agents ?? [])])],
|
|
95
|
+
disabled_mcps: [...new Set([...(base.disabled_mcps ?? []), ...(override.disabled_mcps ?? [])])],
|
|
96
|
+
disabled_hooks: [...new Set([...(base.disabled_hooks ?? []), ...(override.disabled_hooks ?? [])])],
|
|
97
|
+
disabled_commands: [...new Set([...(base.disabled_commands ?? []), ...(override.disabled_commands ?? [])])],
|
|
98
|
+
disabled_skills: [...new Set([...(base.disabled_skills ?? []), ...(override.disabled_skills ?? [])])],
|
|
99
|
+
disabled_tools: [...new Set([...(base.disabled_tools ?? []), ...(override.disabled_tools ?? [])])],
|
|
100
|
+
mcp_env_allowlist: [...new Set([...(base.mcp_env_allowlist ?? []), ...(override.mcp_env_allowlist ?? [])])],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Load and merge plugin config from:
|
|
105
|
+
* 1. User-level (~/.claude/oh-my-claudecode.json[c])
|
|
106
|
+
* 2. Project-level (.claude/oh-my-claudecode.json[c])
|
|
107
|
+
*
|
|
108
|
+
* Project config overrides user config for scalar/object fields.
|
|
109
|
+
* Array fields (disabled_*) are unioned.
|
|
110
|
+
*/
|
|
111
|
+
export function loadPluginConfig(projectDirectory) {
|
|
112
|
+
// User-level config
|
|
113
|
+
const userConfigDir = path.join(process.env.HOME ?? process.env.USERPROFILE ?? "~", ".claude");
|
|
114
|
+
const userDetected = detectConfigFile(userConfigDir);
|
|
115
|
+
const userConfig = userDetected.exists ? loadConfigFromPath(userDetected.path) : null;
|
|
116
|
+
// Project-level config
|
|
117
|
+
const projectConfigDir = path.join(projectDirectory, ".claude");
|
|
118
|
+
const projectDetected = detectConfigFile(projectConfigDir);
|
|
119
|
+
const projectConfig = projectDetected.exists ? loadConfigFromPath(projectDetected.path) : null;
|
|
120
|
+
// Start from user config (or Zod defaults)
|
|
121
|
+
let config = userConfig ?? OhMyClaudeCodeConfigSchema.parse({});
|
|
122
|
+
// Layer project config on top
|
|
123
|
+
if (projectConfig) {
|
|
124
|
+
config = mergeConfigs(config, projectConfig);
|
|
125
|
+
}
|
|
126
|
+
log("Final merged plugin config", {
|
|
127
|
+
disabled_agents: config.disabled_agents,
|
|
128
|
+
disabled_hooks: config.disabled_hooks,
|
|
129
|
+
disabled_mcps: config.disabled_mcps,
|
|
130
|
+
});
|
|
131
|
+
return config;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=plugin-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-config.js","sourceRoot":"","sources":["../src/plugin-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { OhMyClaudeCodeConfig } from "../config/schema.js";
|
|
2
|
+
import type { AvailableSkill, AvailableCategory } from "../agents/types.js";
|
|
3
|
+
export interface ConfigHandlerDeps {
|
|
4
|
+
pluginConfig: OhMyClaudeCodeConfig;
|
|
5
|
+
projectDirectory: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Applies the full 5-phase config pipeline:
|
|
9
|
+
* Phase 1: providers
|
|
10
|
+
* Phase 2: plugin components (skills, categories)
|
|
11
|
+
* Phase 3: agents — build and register all Elder God agents
|
|
12
|
+
* Phase 4: tools — register/disable tools
|
|
13
|
+
* Phase 5: commands — register built-in commands
|
|
14
|
+
*
|
|
15
|
+
* Returns agent configs for consumption by the plugin host.
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyConfig(deps: ConfigHandlerDeps, discoveredSkills?: AvailableSkill[]): Promise<{
|
|
18
|
+
agents: Record<string, object>;
|
|
19
|
+
availableCategories: AvailableCategory[];
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=config-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-handler.d.ts","sourceRoot":"","sources":["../../src/plugin-handlers/config-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE3E,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,oBAAoB,CAAA;IAClC,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,GAAE,cAAc,EAAO,GACtC,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,mBAAmB,EAAE,iBAAiB,EAAE,CAAA;CACzC,CAAC,CAuBD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { buildBuiltinAgents } from "../agents/builtin-agents.js";
|
|
2
|
+
import { log } from "../shared/log.js";
|
|
3
|
+
/**
|
|
4
|
+
* Applies the full 5-phase config pipeline:
|
|
5
|
+
* Phase 1: providers
|
|
6
|
+
* Phase 2: plugin components (skills, categories)
|
|
7
|
+
* Phase 3: agents — build and register all Elder God agents
|
|
8
|
+
* Phase 4: tools — register/disable tools
|
|
9
|
+
* Phase 5: commands — register built-in commands
|
|
10
|
+
*
|
|
11
|
+
* Returns agent configs for consumption by the plugin host.
|
|
12
|
+
*/
|
|
13
|
+
export async function applyConfig(deps, discoveredSkills = []) {
|
|
14
|
+
const { pluginConfig } = deps;
|
|
15
|
+
// Phase 2: resolve categories
|
|
16
|
+
const availableCategories = Object.entries(pluginConfig.categories ?? {})
|
|
17
|
+
.filter(([, cfg]) => !cfg?.disable)
|
|
18
|
+
.map(([name, cfg]) => ({
|
|
19
|
+
name,
|
|
20
|
+
description: cfg?.description ?? name,
|
|
21
|
+
}));
|
|
22
|
+
// Phase 3: build agents
|
|
23
|
+
const agents = buildBuiltinAgents({
|
|
24
|
+
disabledAgents: pluginConfig.disabled_agents ?? [],
|
|
25
|
+
agentOverrides: pluginConfig.agents ?? {},
|
|
26
|
+
discoveredSkills,
|
|
27
|
+
availableCategories,
|
|
28
|
+
useTaskSystem: pluginConfig.cthulhu_agent?.use_task_system ?? false,
|
|
29
|
+
});
|
|
30
|
+
log("[config-handler] Agents registered", { count: Object.keys(agents).length, names: Object.keys(agents) });
|
|
31
|
+
return { agents, availableCategories };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=config-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-handler.js","sourceRoot":"","sources":["../../src/plugin-handlers/config-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAQtC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAuB,EACvB,mBAAqC,EAAE;IAKvC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;IAE7B,8BAA8B;IAC9B,MAAM,mBAAmB,GAAwB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,IAAI,EAAE,CAAC;SAC3F,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI;QACJ,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,IAAI;KACtC,CAAC,CAAC,CAAA;IAEL,wBAAwB;IACxB,MAAM,MAAM,GAAG,kBAAkB,CAAC;QAChC,cAAc,EAAE,YAAY,CAAC,eAAe,IAAI,EAAE;QAClD,cAAc,EAAE,YAAY,CAAC,MAAM,IAAI,EAAE;QACzC,gBAAgB;QAChB,mBAAmB;QACnB,aAAa,EAAE,YAAY,CAAC,aAAa,EAAE,eAAe,IAAI,KAAK;KACpE,CAAC,CAAA;IAEF,GAAG,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAE5G,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep merges two objects. Arrays are NOT merged — override replaces base.
|
|
3
|
+
* Objects are recursively merged.
|
|
4
|
+
*/
|
|
5
|
+
export declare function deepMerge<T extends Record<string, unknown>>(base: T | undefined, override: T | undefined): T | undefined;
|
|
6
|
+
//# sourceMappingURL=deep-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-merge.d.ts","sourceRoot":"","sources":["../../src/shared/deep-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,IAAI,EAAE,CAAC,GAAG,SAAS,EACnB,QAAQ,EAAE,CAAC,GAAG,SAAS,GACtB,CAAC,GAAG,SAAS,CA6Bf"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep merges two objects. Arrays are NOT merged — override replaces base.
|
|
3
|
+
* Objects are recursively merged.
|
|
4
|
+
*/
|
|
5
|
+
export function deepMerge(base, override) {
|
|
6
|
+
if (!base && !override)
|
|
7
|
+
return undefined;
|
|
8
|
+
if (!base)
|
|
9
|
+
return override;
|
|
10
|
+
if (!override)
|
|
11
|
+
return base;
|
|
12
|
+
const result = { ...base };
|
|
13
|
+
for (const key of Object.keys(override)) {
|
|
14
|
+
const baseVal = base[key];
|
|
15
|
+
const overrideVal = override[key];
|
|
16
|
+
if (baseVal !== null &&
|
|
17
|
+
overrideVal !== null &&
|
|
18
|
+
typeof baseVal === "object" &&
|
|
19
|
+
typeof overrideVal === "object" &&
|
|
20
|
+
!Array.isArray(baseVal) &&
|
|
21
|
+
!Array.isArray(overrideVal)) {
|
|
22
|
+
result[key] = deepMerge(baseVal, overrideVal);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
result[key] = overrideVal;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=deep-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-merge.js","sourceRoot":"","sources":["../../src/shared/deep-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,IAAmB,EACnB,QAAuB;IAEvB,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAA;IAC1B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1B,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAA;IAEnD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAEjC,IACE,OAAO,KAAK,IAAI;YAChB,WAAW,KAAK,IAAI;YACpB,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACvB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,OAAkC,EAClC,WAAsC,CACvC,CAAA;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { log, warn } from "./log.js";
|
|
2
|
+
export { deepMerge } from "./deep-merge.js";
|
|
3
|
+
export { parseJsonc } from "./parse-jsonc.js";
|
|
4
|
+
export { resolveModel, resolveAgentModel, MODELS, DEFAULT_AGENT_MODELS, MODEL_FALLBACK_CHAINS } from "./model-resolution.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { log, warn } from "./log.js";
|
|
2
|
+
export { deepMerge } from "./deep-merge.js";
|
|
3
|
+
export { parseJsonc } from "./parse-jsonc.js";
|
|
4
|
+
export { resolveModel, resolveAgentModel, MODELS, DEFAULT_AGENT_MODELS, MODEL_FALLBACK_CHAINS } from "./model-resolution.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/shared/log.ts"],"names":[],"mappings":"AAEA,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAQzD;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAO1D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const DEBUG = process.env.ELDER_GODS_DEBUG === "1" || process.env.ELDER_GODS_DEBUG === "true";
|
|
2
|
+
export function log(message, data) {
|
|
3
|
+
if (!DEBUG)
|
|
4
|
+
return;
|
|
5
|
+
const ts = new Date().toISOString();
|
|
6
|
+
if (data !== undefined) {
|
|
7
|
+
console.error(`[oh-my-claudecode ${ts}] ${message}`, JSON.stringify(data, null, 2));
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
console.error(`[oh-my-claudecode ${ts}] ${message}`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function warn(message, data) {
|
|
14
|
+
const ts = new Date().toISOString();
|
|
15
|
+
if (data !== undefined) {
|
|
16
|
+
console.error(`[oh-my-claudecode WARN ${ts}] ${message}`, JSON.stringify(data, null, 2));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.error(`[oh-my-claudecode WARN ${ts}] ${message}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/shared/log.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,CAAA;AAE7F,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,IAAc;IACjD,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACrF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,OAAO,EAAE,CAAC,CAAA;IACtD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,IAAc;IAClD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,OAAO,EAAE,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ClaudeModel } from "../config/schema.js";
|
|
2
|
+
/** Canonical model IDs for Claude Code */
|
|
3
|
+
export declare const MODELS: {
|
|
4
|
+
readonly OPUS: "claude-opus-4-6";
|
|
5
|
+
readonly SONNET: "claude-sonnet-4-6";
|
|
6
|
+
readonly HAIKU: "claude-haiku-4-5";
|
|
7
|
+
};
|
|
8
|
+
/** Resolve a short alias or canonical ID to a full model string */
|
|
9
|
+
export declare function resolveModel(model: string | undefined): string;
|
|
10
|
+
/** Default model for each agent tier */
|
|
11
|
+
export declare const DEFAULT_AGENT_MODELS: Record<string, string>;
|
|
12
|
+
/** Fallback chain for each tier if primary model fails */
|
|
13
|
+
export declare const MODEL_FALLBACK_CHAINS: Record<string, string[]>;
|
|
14
|
+
export declare function resolveAgentModel(agentName: string, overrideModel: ClaudeModel | undefined, systemDefaultModel: string | undefined): string;
|
|
15
|
+
//# sourceMappingURL=model-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../../src/shared/model-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,0CAA0C;AAC1C,eAAO,MAAM,MAAM;;;;CAIT,CAAA;AAEV,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQ9D;AAED,wCAAwC;AACxC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAevD,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAI1D,CAAA;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,WAAW,GAAG,SAAS,EACtC,kBAAkB,EAAE,MAAM,GAAG,SAAS,GACrC,MAAM,CAGR"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Canonical model IDs for Claude Code */
|
|
2
|
+
export const MODELS = {
|
|
3
|
+
OPUS: "claude-opus-4-6",
|
|
4
|
+
SONNET: "claude-sonnet-4-6",
|
|
5
|
+
HAIKU: "claude-haiku-4-5",
|
|
6
|
+
};
|
|
7
|
+
/** Resolve a short alias or canonical ID to a full model string */
|
|
8
|
+
export function resolveModel(model) {
|
|
9
|
+
if (!model)
|
|
10
|
+
return MODELS.SONNET;
|
|
11
|
+
const aliases = {
|
|
12
|
+
opus: MODELS.OPUS,
|
|
13
|
+
sonnet: MODELS.SONNET,
|
|
14
|
+
haiku: MODELS.HAIKU,
|
|
15
|
+
};
|
|
16
|
+
return aliases[model] ?? model;
|
|
17
|
+
}
|
|
18
|
+
/** Default model for each agent tier */
|
|
19
|
+
export const DEFAULT_AGENT_MODELS = {
|
|
20
|
+
// Opus-tier: primary orchestrators and deep reasoners
|
|
21
|
+
cthulhu: MODELS.OPUS,
|
|
22
|
+
nyarlathotep: MODELS.OPUS,
|
|
23
|
+
azathoth: MODELS.OPUS,
|
|
24
|
+
"shub-niggurath": MODELS.OPUS,
|
|
25
|
+
"yog-sothoth": MODELS.OPUS,
|
|
26
|
+
// Sonnet-tier: mid-complexity specialists
|
|
27
|
+
hastur: MODELS.SONNET,
|
|
28
|
+
ithaqua: MODELS.SONNET,
|
|
29
|
+
tsathoggua: MODELS.SONNET,
|
|
30
|
+
dagon: MODELS.SONNET,
|
|
31
|
+
"the-deep-one": MODELS.SONNET,
|
|
32
|
+
// Haiku-tier: fast pattern matchers
|
|
33
|
+
shoggoth: MODELS.HAIKU,
|
|
34
|
+
};
|
|
35
|
+
/** Fallback chain for each tier if primary model fails */
|
|
36
|
+
export const MODEL_FALLBACK_CHAINS = {
|
|
37
|
+
[MODELS.OPUS]: [MODELS.SONNET, MODELS.HAIKU],
|
|
38
|
+
[MODELS.SONNET]: [MODELS.HAIKU],
|
|
39
|
+
[MODELS.HAIKU]: [],
|
|
40
|
+
};
|
|
41
|
+
export function resolveAgentModel(agentName, overrideModel, systemDefaultModel) {
|
|
42
|
+
if (overrideModel)
|
|
43
|
+
return resolveModel(overrideModel);
|
|
44
|
+
return DEFAULT_AGENT_MODELS[agentName] ?? systemDefaultModel ?? MODELS.SONNET;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=model-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolution.js","sourceRoot":"","sources":["../../src/shared/model-resolution.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,kBAAkB;CACjB,CAAA;AAEV,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IAChC,MAAM,OAAO,GAA2B;QACtC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAA;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;AAChC,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC,IAAI;IACpB,YAAY,EAAE,MAAM,CAAC,IAAI;IACzB,QAAQ,EAAE,MAAM,CAAC,IAAI;IACrB,gBAAgB,EAAE,MAAM,CAAC,IAAI;IAC7B,aAAa,EAAE,MAAM,CAAC,IAAI;IAC1B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM;IAC7B,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC,KAAK;CACvB,CAAA;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;IAC5C,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC/B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;CACnB,CAAA;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,aAAsC,EACtC,kBAAsC;IAEtC,IAAI,aAAa;QAAE,OAAO,YAAY,CAAC,aAAa,CAAC,CAAA;IACrD,OAAO,oBAAoB,CAAC,SAAS,CAAC,IAAI,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAA;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-jsonc.d.ts","sourceRoot":"","sources":["../../src/shared/parse-jsonc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAQ1D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse JSON with comments (JSONC). Strips line comments (//) and block comments
|
|
3
|
+
* and trailing commas before parsing.
|
|
4
|
+
*/
|
|
5
|
+
export function parseJsonc(content) {
|
|
6
|
+
// Remove line comments
|
|
7
|
+
let stripped = content.replace(/\/\/[^\n]*/g, "");
|
|
8
|
+
// Remove block comments
|
|
9
|
+
stripped = stripped.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
10
|
+
// Remove trailing commas before } or ]
|
|
11
|
+
stripped = stripped.replace(/,\s*([\]}])/g, "$1");
|
|
12
|
+
return JSON.parse(stripped);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=parse-jsonc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-jsonc.js","sourceRoot":"","sources":["../../src/shared/parse-jsonc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAc,OAAe;IACrD,uBAAuB;IACvB,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,wBAAwB;IACxB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;IACpD,uCAAuC;IACvC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAA;AAClC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oh-my-claudecode",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Cthulhu-themed agentic harness for Claude Code — 11 Elder God agents, lifecycle hooks, skill system, and multi-tier orchestration.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js",
|
|
9
|
+
"./cli": "./dist/cli/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"bin",
|
|
14
|
+
"skills"
|
|
15
|
+
],
|
|
16
|
+
"bin": {
|
|
17
|
+
"oh-my-claudecode": "./bin/oh-my-claudecode.js"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"install-plugin": "bun src/cli/index.ts install",
|
|
23
|
+
"doctor": "bun src/cli/index.ts doctor"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/ragingstar2063/oh-my-claudecode.git"
|
|
28
|
+
},
|
|
29
|
+
"keywords": ["claude-code", "claude", "ai-agents", "cthulhu", "agentic", "orchestration"],
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"commander": "^12.0.0",
|
|
33
|
+
"zod": "^3.24.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^22.0.0",
|
|
37
|
+
"typescript": "^5.5.0"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=20.0.0"
|
|
41
|
+
}
|
|
42
|
+
}
|