mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-10 10:13:49 +08:00
Compare commits
11 Commits
dependabot
...
release/1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
710c3e6f18 | ||
|
|
72a3ceeb7a | ||
|
|
7cb0cf0433 | ||
|
|
4d71e8eb1f | ||
|
|
7f3bc8f1e2 | ||
|
|
654c899b56 | ||
|
|
72d95caf68 | ||
|
|
6048821a0f | ||
|
|
3c32a017a2 | ||
|
|
8dc02218db | ||
|
|
d82a37444a |
@@ -9,16 +9,15 @@ Show instinct status from continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Run:
|
||||
Resolve the active ECC plugin root with the same walker `hooks/hooks.json`
|
||||
uses (env var → standard install → known plugin roots → plugin cache →
|
||||
fallback), then run the instinct CLI. This avoids reading a stale legacy
|
||||
`~/.claude/skills/continuous-learning-v2/` install when the plugin is
|
||||
active under `~/.claude/plugins/cache/...` (#2037).
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
ECC_ROOT="${CLAUDE_PLUGIN_ROOT:-$(node -e "var r=(()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplaces','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplaces','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();console.log(r)")}"
|
||||
python3 "$ECC_ROOT/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
## Behavior Notes
|
||||
|
||||
18
CHANGELOG.md
18
CHANGELOG.md
@@ -1,5 +1,23 @@
|
||||
# Changelog
|
||||
|
||||
## 1.10.1 - 2026-05-31
|
||||
|
||||
### Highlights
|
||||
|
||||
- Patch release for the stable `1.10.x` line while ECC 2.0 remains on the prerelease channel.
|
||||
- Backported low-risk reliability fixes for harness auditing, continuous-learning observer defaults, and `/instinct-status` plugin-root resolution.
|
||||
- Refreshed contribution and translated marketplace links to point at the current `affaan-m/ECC` repository surface.
|
||||
|
||||
### Fixes
|
||||
|
||||
- Made `scripts/harness-audit.js` handle missing or malformed `package.json` data more defensively.
|
||||
- Raised the continuous-learning observer default turn budget to better match the 500-line analysis default.
|
||||
- Updated `/instinct-status` to resolve the active plugin root instead of falling back to stale legacy install paths.
|
||||
|
||||
### Notes
|
||||
|
||||
- `1.10.1` intentionally avoids claiming ECC 2.0 GA readiness. The control-plane, dedicated ECC agent, and agentic IDE work continues on the `2.0.0-rc` line.
|
||||
|
||||
## 1.10.0 - 2026-04-05
|
||||
|
||||
### Highlights
|
||||
|
||||
@@ -51,8 +51,8 @@ Slash commands that invoke useful workflows:
|
||||
|
||||
```bash
|
||||
# 1. Fork and clone
|
||||
gh repo fork affaan-m/everything-claude-code --clone
|
||||
cd everything-claude-code
|
||||
gh repo fork affaan-m/ECC --clone
|
||||
cd ECC
|
||||
|
||||
# 2. Create a branch
|
||||
git checkout -b feat/my-contribution
|
||||
@@ -485,7 +485,7 @@ How you tested this.
|
||||
|
||||
## Questions?
|
||||
|
||||
- **Issues:** [github.com/affaan-m/everything-claude-code/issues](https://github.com/affaan-m/everything-claude-code/issues)
|
||||
- **Issues:** [github.com/affaan-m/ECC/issues](https://github.com/affaan-m/ECC/issues)
|
||||
- **X/Twitter:** [@affaanmustafa](https://x.com/affaanmustafa)
|
||||
|
||||
---
|
||||
|
||||
@@ -82,6 +82,13 @@ This repo is the raw code only. The guides explain everything.
|
||||
|
||||
## What's New
|
||||
|
||||
### v1.10.1 — Stable Reliability Patch (May 2026)
|
||||
|
||||
- **Stable-channel momentum while ECC 2.0 remains prerelease** — `1.10.1` keeps the public npm/release lane moving without overstating control-plane GA readiness.
|
||||
- **Continuous-learning reliability** — observer analysis now has a larger default turn budget for the 500-line analysis window.
|
||||
- **Command and audit hardening** — `/instinct-status` resolves the active plugin root more reliably, and harness auditing handles missing package metadata more defensively.
|
||||
- **Repository-surface cleanup** — contribution and translated marketplace links now point at the current `affaan-m/ECC` public repo surface.
|
||||
|
||||
### v1.10.0 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026)
|
||||
|
||||
- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 38 agents, 156 skills, and 72 legacy command shims.
|
||||
@@ -1250,7 +1257,7 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
|
||||
| **Context File** | CLAUDE.md + AGENTS.md | AGENTS.md | AGENTS.md | AGENTS.md |
|
||||
| **Secret Detection** | Hook-based | beforeSubmitPrompt hook | Sandbox-based | Hook-based |
|
||||
| **Auto-Format** | PostToolUse hook | afterFileEdit hook | N/A | file.edited hook |
|
||||
| **Version** | Plugin | Plugin | Reference config | 1.10.0 |
|
||||
| **Version** | Plugin | Plugin | Reference config | 1.10.1 |
|
||||
|
||||
**Key architectural decisions:**
|
||||
- **AGENTS.md** at root is the universal cross-tool file (read by all 4 tools)
|
||||
|
||||
@@ -10,16 +10,16 @@ Shows learned instincts for the current project plus global instincts, grouped b
|
||||
|
||||
## Implementation
|
||||
|
||||
Run the instinct CLI using the plugin root path:
|
||||
Run the instinct CLI, resolving the active ECC plugin root the same way
|
||||
`hooks/hooks.json` and the other slash commands (`/sessions`, `/skill-health`)
|
||||
do — env var → standard install → known plugin roots → plugin cache → fallback.
|
||||
This avoids the divergence that happens when `CLAUDE_PLUGIN_ROOT` is unset
|
||||
while a legacy `~/.claude/skills/continuous-learning-v2/` directory still
|
||||
exists (#2037).
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation), use:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
ECC_ROOT="${CLAUDE_PLUGIN_ROOT:-$(node -e "var r=(()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplaces','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplaces','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();console.log(r)")}"
|
||||
python3 "$ECC_ROOT/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
```bash
|
||||
# マーケットプレイスを追加
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# プラグインをインストール
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
@@ -424,7 +424,7 @@ Duplicate hook file detected: ./hooks/hooks.json is already resolved to a loaded
|
||||
|
||||
```bash
|
||||
# このリポジトリをマーケットプレイスとして追加
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# プラグインをインストール
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
|
||||
@@ -10,16 +10,16 @@ command: true
|
||||
|
||||
## 実装
|
||||
|
||||
プラグインルートパスを使用してインスティンクトCLIを実行します:
|
||||
`hooks/hooks.json` および他のスラッシュコマンド(`/sessions`、`/skill-health`)
|
||||
と同じリゾルバ(環境変数 → 標準インストール → 既知のプラグインルート →
|
||||
プラグインキャッシュ → フォールバック)でインスティンクトCLIを実行します。
|
||||
これにより、`CLAUDE_PLUGIN_ROOT` が未設定で
|
||||
レガシーの `~/.claude/skills/continuous-learning-v2/` ディレクトリが
|
||||
残っているときに発生するパスの分岐を回避します (#2037)。
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
または、`CLAUDE_PLUGIN_ROOT` が設定されていない場合(手動インストール)の場合は:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
ECC_ROOT="${CLAUDE_PLUGIN_ROOT:-$(node -e "var r=(()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplaces','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplaces','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();console.log(r)")}"
|
||||
python3 "$ECC_ROOT/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
## 使用方法
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
```bash
|
||||
# 마켓플레이스 추가
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# 플러그인 설치
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
@@ -356,7 +356,7 @@ Claude Code v2.1+는 설치된 플러그인의 `hooks/hooks.json`을 **자동으
|
||||
|
||||
```bash
|
||||
# 마켓플레이스 추가
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# 플러그인 설치
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
|
||||
@@ -112,7 +112,7 @@ Comece em menos de 2 minutos:
|
||||
|
||||
```bash
|
||||
# Adicionar marketplace
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# Instalar plugin
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
@@ -301,7 +301,7 @@ claude --version
|
||||
|
||||
```bash
|
||||
# Adicionar este repositório como marketplace
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# Instalar o plugin
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
|
||||
40
docs/releases/1.10.1/release-notes.md
Normal file
40
docs/releases/1.10.1/release-notes.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# ECC v1.10.1 Release Notes
|
||||
|
||||
## Positioning
|
||||
|
||||
ECC v1.10.1 is a stable-channel reliability patch.
|
||||
|
||||
This release keeps the public `latest` line moving while the larger ECC 2.0 control-plane, dedicated ECC agent, and agentic IDE work remains on the prerelease track.
|
||||
|
||||
## What Changed
|
||||
|
||||
- Hardened harness auditing around missing or malformed package metadata.
|
||||
- Increased the continuous-learning observer default turn budget so the default 500-line analysis window has enough room to complete.
|
||||
- Fixed `/instinct-status` plugin-root resolution so the command does not fall back to stale legacy install paths.
|
||||
- Updated contribution and translated marketplace links to the current `affaan-m/ECC` public repo surface.
|
||||
|
||||
## ECC 2.0 Status
|
||||
|
||||
ECC 2.0 is still a prerelease lane.
|
||||
|
||||
The stable `1.10.x` line remains the right public install surface for users who want the current meta-harness, skills, rules, hooks, commands, and cross-harness install story without opting into the next control-plane generation.
|
||||
|
||||
The `2.0.0-rc` line is where the larger product vision belongs:
|
||||
|
||||
- meta-harness
|
||||
- dedicated ECC agent
|
||||
- control pane / agentic IDE
|
||||
- multi-harness operating layer
|
||||
- stronger evaluation, memory, and permission boundaries
|
||||
|
||||
## Upgrade
|
||||
|
||||
```bash
|
||||
npm install -g ecc-universal@1.10.1
|
||||
```
|
||||
|
||||
or:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@1.10.1 install --profile developer
|
||||
```
|
||||
@@ -113,7 +113,7 @@ Bu repository yalnızca ham kodu içerir. Rehberler her şeyi açıklıyor.
|
||||
|
||||
```bash
|
||||
# Marketplace ekle
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# Plugin'i kur
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
|
||||
@@ -10,16 +10,16 @@ Mevcut proje için öğrenilen içgüdüleri ve global içgüdüleri, domain'e g
|
||||
|
||||
## Uygulama
|
||||
|
||||
Plugin root path kullanarak instinct CLI'ı çalıştır:
|
||||
`hooks/hooks.json` ve diğer slash komutlarının (`/sessions`, `/skill-health`)
|
||||
kullandığı çözümleyiciyle (env var → standart kurulum → bilinen plugin
|
||||
kökleri → plugin önbelleği → fallback) instinct CLI'ı çalıştır.
|
||||
Bu, `CLAUDE_PLUGIN_ROOT` ayarlanmamışken eski bir
|
||||
`~/.claude/skills/continuous-learning-v2/` dizini hâlâ varsa oluşan
|
||||
yol sapmasını önler (#2037).
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
Veya `CLAUDE_PLUGIN_ROOT` ayarlanmamışsa (manuel kurulum):
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
ECC_ROOT="${CLAUDE_PLUGIN_ROOT:-$(node -e "var r=(()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplaces','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplaces','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();console.log(r)")}"
|
||||
python3 "$ECC_ROOT/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
## Kullanım
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
|
||||
```bash
|
||||
# Add marketplace
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# Install plugin
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
@@ -582,7 +582,7 @@ Claude Code v2.1+ **会自动加载** 任何已安装插件中的 `hooks/hooks.j
|
||||
|
||||
```bash
|
||||
# Add this repo as a marketplace
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# Install the plugin
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
|
||||
@@ -10,16 +10,14 @@ command: true
|
||||
|
||||
## 实现
|
||||
|
||||
使用插件根路径运行本能 CLI:
|
||||
以与 `hooks/hooks.json` 和其他斜杠命令(`/sessions`、`/skill-health`)
|
||||
相同的解析器运行本能 CLI——环境变量 → 标准安装 → 已知插件根 → 插件缓存 → 回退。
|
||||
这样可以避免当 `CLAUDE_PLUGIN_ROOT` 未设置而旧的
|
||||
`~/.claude/skills/continuous-learning-v2/` 目录仍然存在时发生的路径分歧 (#2037)。
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
或者,如果未设置 `CLAUDE_PLUGIN_ROOT`(手动安装),则使用:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
ECC_ROOT="${CLAUDE_PLUGIN_ROOT:-$(node -e "var r=(()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplaces','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplaces','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();console.log(r)")}"
|
||||
python3 "$ECC_ROOT/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
## 用法
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
```bash
|
||||
# 新增市集
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# 安裝外掛程式
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
@@ -267,7 +267,7 @@ everything-claude-code/
|
||||
|
||||
```bash
|
||||
# 將此儲存庫新增為市集
|
||||
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
|
||||
/plugin marketplace add https://github.com/affaan-m/ECC
|
||||
|
||||
# 安裝外掛程式
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
|
||||
10
package-lock.json
generated
10
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "1.10.0",
|
||||
"version": "1.10.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ecc-universal",
|
||||
"version": "1.10.0",
|
||||
"version": "1.10.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -998,9 +998,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/fast-uri": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
|
||||
"integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "1.10.0",
|
||||
"version": "1.10.1",
|
||||
"description": "Complete collection of battle-tested Claude Code configs — agents, skills, hooks, rules, and legacy command shims evolved over 10+ months of intensive daily use by an Anthropic hackathon winner",
|
||||
"keywords": [
|
||||
"claude-code",
|
||||
|
||||
@@ -199,7 +199,7 @@ function findPluginInstall(rootDir) {
|
||||
}
|
||||
|
||||
function getRepoChecks(rootDir) {
|
||||
const packageJson = JSON.parse(readText(rootDir, 'package.json'));
|
||||
const packageJson = safeParseJson(safeRead(rootDir, 'package.json'));
|
||||
const commandPrimary = safeRead(rootDir, 'commands/harness-audit.md').trim();
|
||||
const commandParity = safeRead(rootDir, '.opencode/commands/harness-audit.md').trim();
|
||||
const hooksJson = safeRead(rootDir, 'hooks/hooks.json');
|
||||
@@ -312,7 +312,7 @@ function getRepoChecks(rootDir) {
|
||||
scopes: ['repo'],
|
||||
path: 'package.json',
|
||||
description: 'Test script runs validator chain before tests',
|
||||
pass: typeof packageJson.scripts?.test === 'string' && packageJson.scripts.test.includes('validate-commands.js') && packageJson.scripts.test.includes('tests/run-all.js'),
|
||||
pass: typeof packageJson?.scripts?.test === 'string' && packageJson?.scripts?.test.includes('validate-commands.js') && packageJson?.scripts?.test.includes('tests/run-all.js'),
|
||||
fix: 'Update package.json test script to run validators plus tests/run-all.js.',
|
||||
},
|
||||
{
|
||||
|
||||
@@ -170,17 +170,20 @@ Rules:
|
||||
PROMPT
|
||||
|
||||
timeout_seconds="${ECC_OBSERVER_TIMEOUT_SECONDS:-120}"
|
||||
max_turns="${ECC_OBSERVER_MAX_TURNS:-10}"
|
||||
# Default MAX_TURNS=50 to pair with the MAX_ANALYSIS_LINES=500 default (#2035).
|
||||
# A 500-observation batch consistently exhausted the previous 20-turn budget,
|
||||
# forcing every first-cycle analysis to fail with "Reached max turns".
|
||||
max_turns="${ECC_OBSERVER_MAX_TURNS:-50}"
|
||||
exit_code=0
|
||||
|
||||
case "$max_turns" in
|
||||
''|*[!0-9]*)
|
||||
max_turns=10
|
||||
max_turns=50
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$max_turns" -lt 4 ]; then
|
||||
max_turns=10
|
||||
max_turns=50
|
||||
fi
|
||||
|
||||
# Ensure CWD is PROJECT_DIR so the relative analysis_relpath resolves correctly
|
||||
|
||||
@@ -2461,7 +2461,7 @@ async function runTests() {
|
||||
const observerLoopSource = fs.readFileSync(path.join(__dirname, '..', '..', 'skills', 'continuous-learning-v2', 'agents', 'observer-loop.sh'), 'utf8');
|
||||
|
||||
assert.ok(observerLoopSource.includes('ECC_OBSERVER_MAX_TURNS'), 'observer-loop should allow max-turn overrides');
|
||||
assert.ok(observerLoopSource.includes('max_turns="${ECC_OBSERVER_MAX_TURNS:-10}"'), 'observer-loop should default to 10 turns');
|
||||
assert.ok(observerLoopSource.includes('max_turns="${ECC_OBSERVER_MAX_TURNS:-50}"'), 'observer-loop should default to 50 turns to pair with MAX_ANALYSIS_LINES=500 (#2035)');
|
||||
assert.ok(!observerLoopSource.includes('--max-turns 3'), 'observer-loop should not hardcode a 3-turn limit');
|
||||
assert.ok(observerLoopSource.includes('ECC_SKIP_OBSERVE=1'), 'observer-loop should suppress observe.sh for automated sessions');
|
||||
assert.ok(observerLoopSource.includes('ECC_HOOK_PROFILE=minimal'), 'observer-loop should run automated analysis with the minimal hook profile');
|
||||
|
||||
40
tests/lib/command-plugin-root.test.js
Normal file
40
tests/lib/command-plugin-root.test.js
Normal file
@@ -0,0 +1,40 @@
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const assert = require('assert');
|
||||
|
||||
let passed = 0;
|
||||
let failed = 0;
|
||||
|
||||
function test(name, fn) {
|
||||
try {
|
||||
fn();
|
||||
console.log(`PASS ${name}`);
|
||||
passed += 1;
|
||||
} catch (error) {
|
||||
console.error(`FAIL ${name}`);
|
||||
console.error(error.stack || error.message || String(error));
|
||||
failed += 1;
|
||||
}
|
||||
}
|
||||
|
||||
const instinctStatusDoc = fs.readFileSync(path.join(__dirname, '..', '..', 'commands', 'instinct-status.md'), 'utf8');
|
||||
|
||||
test('instinct-status command uses shared inline resolver (no stale legacy fallback) (#2037)', () => {
|
||||
assert.strictEqual((instinctStatusDoc.match(/var r=/g) || []).length, 1);
|
||||
assert.strictEqual((instinctStatusDoc.match(/\['marketplaces','ecc'\]/g) || []).length, 1);
|
||||
assert.strictEqual((instinctStatusDoc.match(/\['marketplaces','everything-claude-code'\]/g) || []).length, 1);
|
||||
assert.strictEqual((instinctStatusDoc.match(/\['ecc','everything-claude-code'\]/g) || []).length, 1);
|
||||
// The pre-fix template hard-coded the legacy path as a fallback when
|
||||
// CLAUDE_PLUGIN_ROOT was unset. Asserting its absence prevents regression.
|
||||
assert.ok(
|
||||
!instinctStatusDoc.includes('python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py'),
|
||||
'instinct-status should not hard-code the legacy ~/.claude install path as a fallback'
|
||||
);
|
||||
});
|
||||
|
||||
console.log(`Passed: ${passed}`);
|
||||
console.log(`Failed: ${failed}`);
|
||||
|
||||
process.exit(failed > 0 ? 1 : 0);
|
||||
Reference in New Issue
Block a user