From 1444239eec51e63594d0588f7b0c1c4e05f41d6b Mon Sep 17 00:00:00 2001 From: Haoran Zhang Date: Mon, 27 Jul 2026 17:27:57 -0700 Subject: [PATCH] feat(install): add AdaL CLI install target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Following the hermes/openclaw (#2433) and kimi (#2441) adapter recipe. What's included (adal-project adapter, project kind, ./.adal root, same shape as kimi-project/joycode-project): - scripts/lib/install-targets/adal-project.js — 10-line project-kind adapter targeting ./.adal - Registry + helpers platform-ownership wiring - adal target on the 5 shared modules (rules-core, agents-core, commands-core, platform-configs, workflow-quality) + SUPPORTED_INSTALL_TARGETS + legacy-compat module - .adal in platform-configs paths - Both schema enums (install-modules, ecc-install-config), npm files allowlist, installer help text, .adal/README.md stub AdaL (adalagent.ai) is a terminal-based AI coding agent (by SylphAI) built on AdalFlow, with native MCP support and project-scoped config under ./.adal/ (skills, custom tools, memory) plus a root-level AGENTS.md instructions file — matching the shape ECC already installs into other AGENTS.md-based harnesses (Codex, OpenCode, Kimi). Verified: full suite matches main's baseline (3334 passed, same pre-existing failures unrelated to this change — OpenCode build/npm-pack surface tests requiring build tooling not present in this sandbox); catalog check passes (67 agents / 94 commands / 281 skills); dry-run resolves Target: adal / Adapter: adal-project / root ./.adal with all 5 modules planned; doctor reports OK after a real install; uninstall cleanly reverses all 458 operations. Co-Authored-By: AdaL --- .adal/README.md | 22 +++++++++++++++++++ manifests/install-modules.json | 24 ++++++++++++++------- package.json | 1 + schemas/ecc-install-config.schema.json | 3 ++- schemas/install-modules.schema.json | 3 ++- scripts/install-apply.js | 1 + scripts/lib/install-manifests.js | 9 +++++++- scripts/lib/install-targets/adal-project.js | 10 +++++++++ scripts/lib/install-targets/helpers.js | 1 + scripts/lib/install-targets/registry.js | 2 ++ 10 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 .adal/README.md create mode 100644 scripts/lib/install-targets/adal-project.js diff --git a/.adal/README.md b/.adal/README.md new file mode 100644 index 000000000..56e3a4ad3 --- /dev/null +++ b/.adal/README.md @@ -0,0 +1,22 @@ +# ECC for AdaL CLI + +This directory contains the ECC (Everything Claude Code) configuration for the AdaL CLI harness. + +## What is installed + +- `rules/ecc/` — shared coding rules and guidelines +- `skills/ecc/` — reusable skills +- `commands/` — slash commands +- `AGENTS.md` — agent instructions + +## Manual install + +```bash +bash ./install.sh --target adal --profile minimal +``` + +## Notes + +- The `adal` target installs into the project-level `./.adal/` directory. +- AdaL's own config (`~/.adal/settings.json`, MCP servers, plugins) is **not** touched by ECC install. +- Use `npx ecc doctor --target adal` to check install health. diff --git a/manifests/install-modules.json b/manifests/install-modules.json index 1b5ea5a6d..0e45965a5 100644 --- a/manifests/install-modules.json +++ b/manifests/install-modules.json @@ -19,7 +19,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [], "defaultInstall": true, @@ -47,7 +48,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [], "defaultInstall": true, @@ -75,7 +77,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [], "defaultInstall": true, @@ -121,7 +124,8 @@ "scripts/setup-package-manager.js", ".hermes", ".openclaw", - ".kimi" + ".kimi", + ".adal" ], "targets": [ "claude", @@ -137,7 +141,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [], "defaultInstall": true, @@ -294,7 +299,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [ "platform-configs" @@ -369,7 +375,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [ "skill-unified-memory" @@ -627,7 +634,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ], "dependencies": [ "platform-configs" diff --git a/package.json b/package.json index 8be4b5d3f..80c63f25a 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "url": "https://github.com/affaan-m/ECC/issues" }, "files": [ + ".adal/", ".agents/", ".claude-plugin/", ".codex/", diff --git a/schemas/ecc-install-config.schema.json b/schemas/ecc-install-config.schema.json index d4e4bee96..29b57538f 100644 --- a/schemas/ecc-install-config.schema.json +++ b/schemas/ecc-install-config.schema.json @@ -31,7 +31,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ] }, "profile": { diff --git a/schemas/install-modules.schema.json b/schemas/install-modules.schema.json index 3cff4a892..620f616dc 100644 --- a/schemas/install-modules.schema.json +++ b/schemas/install-modules.schema.json @@ -61,7 +61,8 @@ "zed", "hermes", "openclaw", - "kimi" + "kimi", + "adal" ] } }, diff --git a/scripts/install-apply.js b/scripts/install-apply.js index 97d8279c9..128085c6c 100755 --- a/scripts/install-apply.js +++ b/scripts/install-apply.js @@ -47,6 +47,7 @@ Targets: hermes - Install shared rules/skills/commands into ~/.hermes/ kimi - Install Kimi Code project instructions, skills, and MCP config into ./.kimi-code/ (ECC hooks not configured) openclaw - Install shared rules/skills/commands into ~/.openclaw/ + adal - Install shared rules/skills/commands into ./.adal/ Options: --profile Resolve and install a manifest profile diff --git a/scripts/lib/install-manifests.js b/scripts/lib/install-manifests.js index 2859a9e40..bb16cc93c 100644 --- a/scripts/lib/install-manifests.js +++ b/scripts/lib/install-manifests.js @@ -5,7 +5,7 @@ const { getInstallTargetAdapter, planInstallTargetScaffold } = require('./instal const { resolveInvocationEnvironment } = require('./invocation-environment'); const DEFAULT_REPO_ROOT = path.join(__dirname, '../..'); -const SUPPORTED_INSTALL_TARGETS = ['claude', 'claude-project', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'joycode', 'qwen', 'zed', 'hermes', 'openclaw', 'kimi']; +const SUPPORTED_INSTALL_TARGETS = ['claude', 'claude-project', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'joycode', 'qwen', 'zed', 'hermes', 'openclaw', 'kimi', 'adal']; const COMPONENT_FAMILY_PREFIXES = { baseline: 'baseline:', language: 'lang:', @@ -99,6 +99,13 @@ const LEGACY_COMPAT_BASE_MODULE_IDS_BY_TARGET = Object.freeze({ 'platform-configs', 'workflow-quality', ], + adal: [ + 'rules-core', + 'agents-core', + 'commands-core', + 'platform-configs', + 'workflow-quality', + ], }); const LEGACY_LANGUAGE_ALIAS_TO_CANONICAL = Object.freeze({ c: 'c', diff --git a/scripts/lib/install-targets/adal-project.js b/scripts/lib/install-targets/adal-project.js new file mode 100644 index 000000000..313f5437a --- /dev/null +++ b/scripts/lib/install-targets/adal-project.js @@ -0,0 +1,10 @@ +const { createInstallTargetAdapter } = require('./helpers'); + +module.exports = createInstallTargetAdapter({ + id: 'adal-project', + target: 'adal', + kind: 'project', + rootSegments: ['.adal'], + installStatePathSegments: ['ecc-install-state.json'], + nativeRootRelativePath: '.adal', +}); diff --git a/scripts/lib/install-targets/helpers.js b/scripts/lib/install-targets/helpers.js index cb8f05898..9dedcf50a 100644 --- a/scripts/lib/install-targets/helpers.js +++ b/scripts/lib/install-targets/helpers.js @@ -16,6 +16,7 @@ const PLATFORM_SOURCE_PATH_OWNERS = Object.freeze({ '.codebuddy': 'codebuddy', '.qwen': 'qwen', '.zed': 'zed', + '.adal': 'adal', }); function normalizeRelativePath(relativePath) { diff --git a/scripts/lib/install-targets/registry.js b/scripts/lib/install-targets/registry.js index 6861a63e9..8dd7cf848 100644 --- a/scripts/lib/install-targets/registry.js +++ b/scripts/lib/install-targets/registry.js @@ -1,3 +1,4 @@ +const adalProject = require('./adal-project'); const antigravityProject = require('./antigravity-project'); const claudeHome = require('./claude-home'); const claudeProject = require('./claude-project'); @@ -29,6 +30,7 @@ const ADAPTERS = Object.freeze([ kimiProject, qwenHome, zedProject, + adalProject, ]); function listInstallTargetAdapters() {