mirror of
https://github.com/affaan-m/ECC.git
synced 2026-10-17 13:45:34 +02:00
Merge branch 'affaan-m:main' into main
This commit is contained in:
@@ -133,6 +133,7 @@ function determineInstallCwd(record, repoRoot) {
|
||||
// install-apply.js if its package.json identifies it as ECC — otherwise a
|
||||
// cloned project that ships a nested `evil/{package.json,scripts/install-apply.js}`
|
||||
// could drive auto-update into executing attacker code (GHSA-hfpv-w6mp-5g95).
|
||||
// 'everything-claude-code' is the legacy 1.x package name, kept for existing checkouts.
|
||||
const ECC_PACKAGE_NAMES = new Set(['ecc-universal', 'everything-claude-code']);
|
||||
|
||||
function validateRepoRoot(repoRoot) {
|
||||
|
||||
@@ -172,7 +172,7 @@ const descChars = skillDescriptions.reduce((n, d) => n + d.length, 0);
|
||||
|
||||
fs.writeFileSync(path.join(tmpDir, 'README.md'), `# ecc-pi-core
|
||||
|
||||
A curated, Pi-native profile of ECC (Everything Claude Code): ${skillCount} portable
|
||||
A curated, Pi-native profile of ECC: ${skillCount} portable
|
||||
engineering skills and ${commandCount} pure prompt-workflow commands, with no extensions,
|
||||
no hooks, no runtime downloads, and no network or SaaS dependencies.
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* NanoClaw v2 — Barebones Agent REPL for Everything Claude Code
|
||||
* NanoClaw v2 — Barebones Agent REPL for ECC
|
||||
*
|
||||
* Zero external dependencies. Session-aware REPL around `claude -p`.
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* scripts/codemaps/generate.ts
|
||||
*
|
||||
* Codemap Generator for everything-claude-code (ECC)
|
||||
* Codemap Generator for ECC
|
||||
*
|
||||
* Scans the current working directory and generates architectural
|
||||
* codemap documentation under docs/CODEMAPS/ as specified by the
|
||||
|
||||
@@ -81,7 +81,9 @@ require_file "$CONFIG_FILE" "Global config.toml"
|
||||
require_file "$AGENTS_FILE" "Global AGENTS.md"
|
||||
|
||||
if [[ -f "$AGENTS_FILE" ]]; then
|
||||
if search_file '^# Everything Claude Code \(ECC\)' "$AGENTS_FILE"; then
|
||||
# Accept the current "# ECC" heading and the legacy expanded-name heading
|
||||
# that older syncs wrote into existing ~/.codex/AGENTS.md files.
|
||||
if search_file '^# (ECC|Everything Claude Code \(ECC\))( |$)' "$AGENTS_FILE"; then
|
||||
ok "AGENTS contains ECC root instructions"
|
||||
else
|
||||
fail "AGENTS missing ECC root instructions"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Slash commands: /ecc /help /skill /docs /release
|
||||
//
|
||||
// Env: DISCORD_BOT_TOKEN (required), DISCORD_APP_ID (required),
|
||||
// ECC_REPO (path to local clone, default ~/GitHub/ECC/everything-claude-code),
|
||||
// ECC_REPO (path to local clone, default ~/GitHub/ECC),
|
||||
// DISCORD_INVITE (optional, shown in /ecc)
|
||||
//
|
||||
// Crash-only design: any gateway close, error, or missed heartbeat ack exits
|
||||
@@ -21,7 +21,12 @@ if (!TOKEN || !APP_ID) {
|
||||
console.error('missing DISCORD_BOT_TOKEN / DISCORD_APP_ID');
|
||||
process.exit(1);
|
||||
}
|
||||
const REPO = process.env.ECC_REPO || join(homedir(), 'GitHub/ECC/everything-claude-code');
|
||||
// Prefer ~/GitHub/ECC. The nested legacy checkout path is still accepted so
|
||||
// existing hosts keep working without setting ECC_REPO.
|
||||
const REPO = process.env.ECC_REPO || [
|
||||
join(homedir(), 'GitHub/ECC'),
|
||||
join(homedir(), 'GitHub/ECC/everything-claude-code'),
|
||||
].find(dir => existsSync(join(dir, 'package.json'))) || join(homedir(), 'GitHub/ECC');
|
||||
const REPO_URL = 'https://github.com/affaan-m/ECC';
|
||||
const INVITE = process.env.DISCORD_INVITE || '';
|
||||
const API = 'https://discord.com/api/v10';
|
||||
@@ -133,12 +138,12 @@ const HELP = [
|
||||
|
||||
const handlers = {
|
||||
ecc: () => [
|
||||
'**Everything Claude Code (ECC)** — the agent harness performance system.',
|
||||
'**ECC** — the agent harness performance system.',
|
||||
'Skills, agents, rules, hooks, MCP conventions, and operator workflows that move across Claude Code, Codex, OpenCode, Cursor, Gemini, and Zed.',
|
||||
'',
|
||||
`- repo: ${REPO_URL}`,
|
||||
'- site: https://ecc.tools',
|
||||
`- install: \`/plugin marketplace add affaan-m/everything-claude-code\` then \`/plugin install ecc\``,
|
||||
`- install: \`/plugin marketplace add affaan-m/ECC\` then \`/plugin install ecc\``,
|
||||
INVITE ? `- invite a friend: ${INVITE}` : '',
|
||||
].filter(Boolean).join('\n'),
|
||||
|
||||
|
||||
@@ -216,7 +216,8 @@ function hasFileWithExtension(rootDir, relativeDir, extensions) {
|
||||
|
||||
function detectTargetMode(rootDir) {
|
||||
const packageJson = safeParseJson(safeRead(rootDir, 'package.json'));
|
||||
if (packageJson?.name === 'everything-claude-code') {
|
||||
// 'everything-claude-code' is the legacy package name, kept for older checkouts.
|
||||
if (['ecc-universal', 'everything-claude-code'].includes(packageJson?.name)) {
|
||||
return 'repo';
|
||||
}
|
||||
|
||||
@@ -232,6 +233,8 @@ function detectTargetMode(rootDir) {
|
||||
return 'consumer';
|
||||
}
|
||||
|
||||
// The everything-claude-code entries below are legacy install ids, kept so
|
||||
// existing 1.x installs are still detected.
|
||||
const ECC_PLUGIN_KEY_PATTERNS = [
|
||||
/^ecc@/i,
|
||||
/^everything-claude-code@/i,
|
||||
@@ -831,7 +834,7 @@ function getConsumerChecks(rootDir) {
|
||||
points: 4,
|
||||
scopes: ['repo'],
|
||||
path: '~/.claude/plugins/ecc/ (legacy everything-claude-code paths also supported)',
|
||||
description: 'Everything Claude Code is installed for the active user or project',
|
||||
description: 'ECC is installed for the active user or project',
|
||||
pass: Boolean(pluginInstall),
|
||||
fix: 'Install the ECC plugin for this user or project before auditing project-specific harness quality.',
|
||||
},
|
||||
|
||||
@@ -722,7 +722,7 @@ async function main() {
|
||||
// compaction resume the model would re-run /fw-task-new (or any
|
||||
// ARGUMENTS-bearing slash skill) with the last ARGUMENTS it saw,
|
||||
// duplicating issues/branches/Notion tasks. Tracking upstream at
|
||||
// https://github.com/affaan-m/everything-claude-code/issues/1534
|
||||
// https://github.com/affaan-m/ECC/issues/1534
|
||||
const guarded = [
|
||||
'HISTORICAL REFERENCE ONLY — NOT LIVE INSTRUCTIONS.',
|
||||
'The block below is a frozen summary of a PRIOR conversation that',
|
||||
|
||||
@@ -97,6 +97,7 @@ function parsePluginList(stdout) {
|
||||
plugin.id === CURRENT_PLUGIN_ID
|
||||
|| String(plugin.id || '').startsWith('ecc@')
|
||||
|| LEGACY_PLUGIN_IDS.has(plugin.id)
|
||||
// Legacy install id prefix, kept for existing installs.
|
||||
|| String(plugin.id || '').startsWith('everything-claude-code@')
|
||||
);
|
||||
if (!isRelevant) continue;
|
||||
@@ -400,6 +401,7 @@ function currentEccPlugins(plugins) {
|
||||
function assertNoConflictingEccPlugins(plugins) {
|
||||
const legacy = plugins.find(plugin => (
|
||||
LEGACY_PLUGIN_IDS.has(plugin?.id)
|
||||
// Legacy install id prefix, kept for existing installs.
|
||||
|| String(plugin?.id || '').startsWith('everything-claude-code@')
|
||||
));
|
||||
if (legacy) {
|
||||
|
||||
@@ -6,6 +6,7 @@ const path = require('path');
|
||||
const { isWithinRoot, realpathNearestExisting } = require('../path-safety');
|
||||
|
||||
const CURRENT_PLUGIN_ID = 'ecc@ecc';
|
||||
// Legacy plugin ids, kept so existing installs are still recognized.
|
||||
const LEGACY_PLUGIN_IDS = new Set([
|
||||
'everything-claude-code@everything-claude-code',
|
||||
'everything-claude-code@ecc',
|
||||
@@ -49,6 +50,7 @@ function findManualClaudePlugin(options = {}) {
|
||||
['ecc', 'plugin.json'],
|
||||
['ecc@ecc', '.claude-plugin', 'plugin.json'],
|
||||
['ecc@ecc', 'plugin.json'],
|
||||
// Legacy install dir, kept for existing installs.
|
||||
['everything-claude-code', '.claude-plugin', 'plugin.json'],
|
||||
['everything-claude-code', 'plugin.json'],
|
||||
];
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* ranking degrades to confidence-only (unchanged behaviour).
|
||||
*
|
||||
* Resolves part (b) of:
|
||||
* https://github.com/affaan-m/everything-claude-code/issues/2371
|
||||
* https://github.com/affaan-m/ECC/issues/2371
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Cross-platform (Windows, macOS, Linux) project type detection
|
||||
* by inspecting files in the working directory.
|
||||
*
|
||||
* Resolves: https://github.com/affaan-m/everything-claude-code/issues/293
|
||||
* Resolves: https://github.com/affaan-m/ECC/issues/293
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
@@ -5,6 +5,7 @@ const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
const CURRENT_PLUGIN_SLUG = 'ecc';
|
||||
// Legacy install id, kept for existing installs.
|
||||
const LEGACY_PLUGIN_SLUG = 'everything-claude-code';
|
||||
const CURRENT_PLUGIN_HANDLE = `${CURRENT_PLUGIN_SLUG}@${CURRENT_PLUGIN_SLUG}`;
|
||||
const LEGACY_PLUGIN_HANDLE = `${LEGACY_PLUGIN_SLUG}@${LEGACY_PLUGIN_SLUG}`;
|
||||
|
||||
@@ -167,7 +167,7 @@ ${chalk.yellow('4.')} Evolve into skills: ${chalk.cyan('/evolve')}
|
||||
|
||||
footer() {
|
||||
console.log(chalk.gray('─'.repeat(60)));
|
||||
console.log(chalk.dim(` Powered by Everything Claude Code • ecc.tools`));
|
||||
console.log(chalk.dim(` Powered by ECC • ecc.tools`));
|
||||
console.log(chalk.dim(` GitHub App: github.com/apps/skill-creator`));
|
||||
console.log('\n');
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Sync Everything Claude Code (ECC) assets into a local Codex CLI setup.
|
||||
# Sync ECC assets into a local Codex CLI setup.
|
||||
# - Backs up ~/.codex config and AGENTS.md
|
||||
# - Merges ECC AGENTS.md into existing AGENTS.md (marker-based, preserves user content)
|
||||
# - Generates prompt files from commands/*.md
|
||||
|
||||
Reference in New Issue
Block a user