aether-colony 5.1.0 → 5.3.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/.aether/aether-utils.sh +157 -42
- package/.aether/agents/aether-ambassador.md +140 -0
- package/.aether/agents/aether-archaeologist.md +108 -0
- package/.aether/agents/aether-architect.md +133 -0
- package/.aether/agents/aether-auditor.md +144 -0
- package/.aether/agents/aether-builder.md +184 -0
- package/.aether/agents/aether-chaos.md +115 -0
- package/.aether/agents/aether-chronicler.md +122 -0
- package/.aether/agents/aether-gatekeeper.md +116 -0
- package/.aether/agents/aether-includer.md +117 -0
- package/.aether/agents/aether-keeper.md +177 -0
- package/.aether/agents/aether-measurer.md +128 -0
- package/.aether/agents/aether-oracle.md +137 -0
- package/.aether/agents/aether-probe.md +133 -0
- package/.aether/agents/aether-queen.md +286 -0
- package/.aether/agents/aether-route-setter.md +130 -0
- package/.aether/agents/aether-sage.md +106 -0
- package/.aether/agents/aether-scout.md +101 -0
- package/.aether/agents/aether-surveyor-disciplines.md +391 -0
- package/.aether/agents/aether-surveyor-nest.md +329 -0
- package/.aether/agents/aether-surveyor-pathogens.md +264 -0
- package/.aether/agents/aether-surveyor-provisions.md +334 -0
- package/.aether/agents/aether-tracker.md +137 -0
- package/.aether/agents/aether-watcher.md +174 -0
- package/.aether/agents/aether-weaver.md +130 -0
- package/.aether/commands/claude/archaeology.md +334 -0
- package/.aether/commands/claude/build.md +65 -0
- package/.aether/commands/claude/chaos.md +336 -0
- package/.aether/commands/claude/colonize.md +259 -0
- package/.aether/commands/claude/continue.md +60 -0
- package/.aether/commands/claude/council.md +507 -0
- package/.aether/commands/claude/data-clean.md +81 -0
- package/.aether/commands/claude/dream.md +268 -0
- package/.aether/commands/claude/entomb.md +498 -0
- package/.aether/commands/claude/export-signals.md +57 -0
- package/.aether/commands/claude/feedback.md +96 -0
- package/.aether/commands/claude/flag.md +151 -0
- package/.aether/commands/claude/flags.md +169 -0
- package/.aether/commands/claude/focus.md +76 -0
- package/.aether/commands/claude/help.md +154 -0
- package/.aether/commands/claude/history.md +140 -0
- package/.aether/commands/claude/import-signals.md +71 -0
- package/.aether/commands/claude/init.md +505 -0
- package/.aether/commands/claude/insert-phase.md +105 -0
- package/.aether/commands/claude/interpret.md +278 -0
- package/.aether/commands/claude/lay-eggs.md +210 -0
- package/.aether/commands/claude/maturity.md +113 -0
- package/.aether/commands/claude/memory-details.md +77 -0
- package/.aether/commands/claude/migrate-state.md +171 -0
- package/.aether/commands/claude/oracle.md +642 -0
- package/.aether/commands/claude/organize.md +232 -0
- package/.aether/commands/claude/patrol.md +620 -0
- package/.aether/commands/claude/pause-colony.md +233 -0
- package/.aether/commands/claude/phase.md +115 -0
- package/.aether/commands/claude/pheromones.md +156 -0
- package/.aether/commands/claude/plan.md +693 -0
- package/.aether/commands/claude/preferences.md +65 -0
- package/.aether/commands/claude/quick.md +100 -0
- package/.aether/commands/claude/redirect.md +76 -0
- package/.aether/commands/claude/resume-colony.md +197 -0
- package/.aether/commands/claude/resume.md +388 -0
- package/.aether/commands/claude/run.md +231 -0
- package/.aether/commands/claude/seal.md +774 -0
- package/.aether/commands/claude/skill-create.md +286 -0
- package/.aether/commands/claude/status.md +410 -0
- package/.aether/commands/claude/swarm.md +349 -0
- package/.aether/commands/claude/tunnels.md +426 -0
- package/.aether/commands/claude/update.md +132 -0
- package/.aether/commands/claude/verify-castes.md +143 -0
- package/.aether/commands/claude/watch.md +239 -0
- package/.aether/commands/colonize.yaml +4 -0
- package/.aether/commands/council.yaml +205 -0
- package/.aether/commands/init.yaml +46 -13
- package/.aether/commands/insert-phase.yaml +4 -0
- package/.aether/commands/opencode/archaeology.md +331 -0
- package/.aether/commands/opencode/build.md +1168 -0
- package/.aether/commands/opencode/chaos.md +329 -0
- package/.aether/commands/opencode/colonize.md +195 -0
- package/.aether/commands/opencode/continue.md +1436 -0
- package/.aether/commands/opencode/council.md +437 -0
- package/.aether/commands/opencode/data-clean.md +77 -0
- package/.aether/commands/opencode/dream.md +260 -0
- package/.aether/commands/opencode/entomb.md +377 -0
- package/.aether/commands/opencode/export-signals.md +54 -0
- package/.aether/commands/opencode/feedback.md +99 -0
- package/.aether/commands/opencode/flag.md +149 -0
- package/.aether/commands/opencode/flags.md +167 -0
- package/.aether/commands/opencode/focus.md +73 -0
- package/.aether/commands/opencode/help.md +157 -0
- package/.aether/commands/opencode/history.md +136 -0
- package/.aether/commands/opencode/import-signals.md +68 -0
- package/.aether/commands/opencode/init.md +518 -0
- package/.aether/commands/opencode/insert-phase.md +111 -0
- package/.aether/commands/opencode/interpret.md +272 -0
- package/.aether/commands/opencode/lay-eggs.md +213 -0
- package/.aether/commands/opencode/maturity.md +108 -0
- package/.aether/commands/opencode/memory-details.md +83 -0
- package/.aether/commands/opencode/migrate-state.md +165 -0
- package/.aether/commands/opencode/oracle.md +593 -0
- package/.aether/commands/opencode/organize.md +226 -0
- package/.aether/commands/opencode/patrol.md +626 -0
- package/.aether/commands/opencode/pause-colony.md +203 -0
- package/.aether/commands/opencode/phase.md +113 -0
- package/.aether/commands/opencode/pheromones.md +162 -0
- package/.aether/commands/opencode/plan.md +684 -0
- package/.aether/commands/opencode/preferences.md +71 -0
- package/.aether/commands/opencode/quick.md +91 -0
- package/.aether/commands/opencode/redirect.md +84 -0
- package/.aether/commands/opencode/resume-colony.md +190 -0
- package/.aether/commands/opencode/resume.md +394 -0
- package/.aether/commands/opencode/run.md +237 -0
- package/.aether/commands/opencode/seal.md +452 -0
- package/.aether/commands/opencode/skill-create.md +63 -0
- package/.aether/commands/opencode/status.md +307 -0
- package/.aether/commands/opencode/swarm.md +15 -0
- package/.aether/commands/opencode/tunnels.md +400 -0
- package/.aether/commands/opencode/update.md +127 -0
- package/.aether/commands/opencode/verify-castes.md +139 -0
- package/.aether/commands/opencode/watch.md +227 -0
- package/.aether/commands/plan.yaml +53 -2
- package/.aether/commands/quick.yaml +104 -0
- package/.aether/commands/resume-colony.yaml +6 -4
- package/.aether/commands/resume.yaml +9 -0
- package/.aether/commands/run.yaml +37 -1
- package/.aether/commands/seal.yaml +9 -0
- package/.aether/commands/status.yaml +45 -1
- package/.aether/docs/command-playbooks/build-full.md +3 -2
- package/.aether/docs/command-playbooks/build-prep.md +12 -4
- package/.aether/docs/command-playbooks/build-verify.md +51 -0
- package/.aether/docs/command-playbooks/continue-advance.md +115 -6
- package/.aether/docs/command-playbooks/continue-full.md +1 -0
- package/.aether/docs/command-playbooks/continue-verify.md +33 -0
- package/.aether/utils/clash-detect.sh +239 -0
- package/.aether/utils/council.sh +425 -0
- package/.aether/utils/error-handler.sh +3 -3
- package/.aether/utils/flag.sh +23 -12
- package/.aether/utils/hive.sh +2 -2
- package/.aether/utils/hooks/clash-pre-tool-use.js +99 -0
- package/.aether/utils/immune.sh +508 -0
- package/.aether/utils/learning.sh +2 -2
- package/.aether/utils/merge-driver-lockfile.sh +35 -0
- package/.aether/utils/midden.sh +712 -0
- package/.aether/utils/pheromone.sh +1376 -108
- package/.aether/utils/queen.sh +31 -21
- package/.aether/utils/session.sh +264 -0
- package/.aether/utils/spawn-tree.sh +7 -7
- package/.aether/utils/spawn.sh +2 -2
- package/.aether/utils/state-api.sh +216 -5
- package/.aether/utils/swarm.sh +1 -1
- package/.aether/utils/worktree.sh +189 -0
- package/.claude/commands/ant/colonize.md +2 -0
- package/.claude/commands/ant/council.md +205 -0
- package/.claude/commands/ant/init.md +53 -14
- package/.claude/commands/ant/insert-phase.md +4 -0
- package/.claude/commands/ant/plan.md +27 -1
- package/.claude/commands/ant/quick.md +100 -0
- package/.claude/commands/ant/resume-colony.md +3 -2
- package/.claude/commands/ant/resume.md +9 -0
- package/.claude/commands/ant/run.md +37 -1
- package/.claude/commands/ant/seal.md +9 -0
- package/.claude/commands/ant/status.md +45 -1
- package/.opencode/commands/ant/colonize.md +2 -0
- package/.opencode/commands/ant/council.md +143 -0
- package/.opencode/commands/ant/init.md +53 -13
- package/.opencode/commands/ant/insert-phase.md +4 -0
- package/.opencode/commands/ant/plan.md +26 -1
- package/.opencode/commands/ant/quick.md +91 -0
- package/.opencode/commands/ant/resume-colony.md +3 -2
- package/.opencode/commands/ant/resume.md +9 -0
- package/.opencode/commands/ant/run.md +37 -1
- package/.opencode/commands/ant/status.md +2 -0
- package/CHANGELOG.md +116 -0
- package/README.md +34 -8
- package/bin/cli.js +103 -61
- package/bin/lib/banner.js +14 -0
- package/bin/lib/init.js +8 -7
- package/bin/lib/interactive-setup.js +251 -0
- package/bin/npx-entry.js +21 -0
- package/bin/npx-install.js +9 -167
- package/bin/validate-package.sh +23 -0
- package/package.json +11 -3
- package/.aether/docs/plans/pheromone-display-plan.md +0 -257
- package/.aether/schemas/example-prompt-builder.xml +0 -234
- package/.aether/scripts/incident-test-add.sh +0 -47
- package/.aether/scripts/weekly-audit.sh +0 -79
package/bin/npx-install.js
CHANGED
|
@@ -1,177 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* npx-install.js —
|
|
4
|
+
* npx-install.js — Legacy installer for Aether Colony (deprecated)
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Creates the global hub at ~/.aether/ with all system files,
|
|
9
|
-
* slash commands, and agent definitions.
|
|
6
|
+
* This entry point has been superseded by npx-entry.js.
|
|
7
|
+
* It now redirects to the interactive setup.
|
|
10
8
|
*/
|
|
11
9
|
|
|
12
|
-
const fs = require('fs');
|
|
13
|
-
const path = require('path');
|
|
14
|
-
const os = require('os');
|
|
15
|
-
|
|
16
|
-
const BANNER = `
|
|
17
|
-
█████╗ ███████╗████████╗██╗ ██╗███████╗██████╗
|
|
18
|
-
██╔══██╗██╔════╝╚══██╔══╝██║ ██║██╔════╝██╔══██╗
|
|
19
|
-
███████║█████╗ ██║ ███████║█████╗ ██████╔╝
|
|
20
|
-
██╔══██║██╔══╝ ██║ ██╔══██║██╔══╝ ██╔══██╗
|
|
21
|
-
██║ ██║███████╗ ██║ ██║ ██║███████╗██║ ██║
|
|
22
|
-
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
|
|
23
|
-
`;
|
|
24
|
-
|
|
25
|
-
const AETHER_VERSION = require('../package.json').version;
|
|
26
|
-
const HOME_DIR = os.homedir();
|
|
27
|
-
const HUB_DIR = path.join(HOME_DIR, '.aether');
|
|
28
|
-
const CLAUDE_COMMANDS_DIR = path.join(HOME_DIR, '.claude', 'commands', 'ant');
|
|
29
|
-
const CLAUDE_AGENTS_DIR = path.join(HOME_DIR, '.claude', 'agents', 'ant');
|
|
30
|
-
|
|
31
|
-
// Get the package root (where this script is located)
|
|
32
|
-
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
33
|
-
const AETHER_SRC = path.join(PACKAGE_ROOT, '.aether');
|
|
34
|
-
const CLAUDE_COMMANDS_SRC = path.join(PACKAGE_ROOT, '.claude', 'commands', 'ant');
|
|
35
|
-
const OPENCODE_AGENTS_SRC = path.join(PACKAGE_ROOT, '.opencode', 'agents');
|
|
36
|
-
const OPENCODE_COMMANDS_SRC = path.join(PACKAGE_ROOT, '.opencode', 'commands', 'ant');
|
|
37
|
-
|
|
38
|
-
function log(message, type = 'info') {
|
|
39
|
-
const icons = {
|
|
40
|
-
info: 'ℹ',
|
|
41
|
-
success: '✓',
|
|
42
|
-
warning: '⚠',
|
|
43
|
-
error: '✗',
|
|
44
|
-
ant: '🐜'
|
|
45
|
-
};
|
|
46
|
-
console.log(`${icons[type] || '•'} ${message}`);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function ensureDir(dir) {
|
|
50
|
-
if (!fs.existsSync(dir)) {
|
|
51
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function copyDir(src, dest, options = {}) {
|
|
58
|
-
const { exclude = [] } = options;
|
|
59
|
-
ensureDir(dest);
|
|
60
|
-
|
|
61
|
-
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
62
|
-
let copied = 0;
|
|
63
|
-
|
|
64
|
-
for (const entry of entries) {
|
|
65
|
-
const srcPath = path.join(src, entry.name);
|
|
66
|
-
const destPath = path.join(dest, entry.name);
|
|
67
|
-
|
|
68
|
-
// Skip excluded directories
|
|
69
|
-
if (exclude.includes(entry.name)) {
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (entry.isDirectory()) {
|
|
74
|
-
copied += copyDir(srcPath, destPath, options);
|
|
75
|
-
} else {
|
|
76
|
-
fs.copyFileSync(srcPath, destPath);
|
|
77
|
-
copied++;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return copied;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function copyFile(src, dest) {
|
|
85
|
-
const destDir = path.dirname(dest);
|
|
86
|
-
ensureDir(destDir);
|
|
87
|
-
fs.copyFileSync(src, dest);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
10
|
function install() {
|
|
91
|
-
console.log(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
log('Creating hub directory structure...', 'ant');
|
|
98
|
-
const hubDirs = [
|
|
99
|
-
path.join(HUB_DIR, 'system'),
|
|
100
|
-
path.join(HUB_DIR, 'system', 'docs'),
|
|
101
|
-
path.join(HUB_DIR, 'system', 'utils'),
|
|
102
|
-
path.join(HUB_DIR, 'system', 'templates'),
|
|
103
|
-
path.join(HUB_DIR, 'system', 'schemas'),
|
|
104
|
-
path.join(HUB_DIR, 'system', 'exchange'),
|
|
105
|
-
path.join(HUB_DIR, 'system', 'rules'),
|
|
106
|
-
path.join(HUB_DIR, 'data'),
|
|
107
|
-
path.join(HUB_DIR, 'chambers')
|
|
108
|
-
];
|
|
109
|
-
|
|
110
|
-
for (const dir of hubDirs) {
|
|
111
|
-
if (ensureDir(dir)) {
|
|
112
|
-
log(` Created ${path.relative(HOME_DIR, dir)}`, 'info');
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Step 2: Copy system files from .aether/
|
|
117
|
-
log('Copying system files to hub...', 'ant');
|
|
118
|
-
if (fs.existsSync(AETHER_SRC)) {
|
|
119
|
-
// Private directories to exclude
|
|
120
|
-
const excludeDirs = ['data', 'dreams', 'oracle', 'checkpoints', 'locks', 'temp', 'archive', 'chambers'];
|
|
121
|
-
filesCopied += copyDir(AETHER_SRC, path.join(HUB_DIR, 'system'), { exclude: excludeDirs });
|
|
122
|
-
log(` Copied ${filesCopied} files from .aether/`, 'success');
|
|
123
|
-
} else {
|
|
124
|
-
log(' Warning: .aether/ source not found', 'warning');
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Step 3: Copy Claude Code commands
|
|
128
|
-
log('Installing Claude Code commands...', 'ant');
|
|
129
|
-
if (fs.existsSync(CLAUDE_COMMANDS_SRC)) {
|
|
130
|
-
const cmdCount = copyDir(CLAUDE_COMMANDS_SRC, CLAUDE_COMMANDS_DIR);
|
|
131
|
-
log(` Installed ${cmdCount} slash commands to ~/.claude/commands/ant/`, 'success');
|
|
132
|
-
filesCopied += cmdCount;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Step 4: Copy Claude Code agents (from OpenCode agents)
|
|
136
|
-
log('Installing Claude Code agents...', 'ant');
|
|
137
|
-
if (fs.existsSync(OPENCODE_AGENTS_SRC)) {
|
|
138
|
-
const agentCount = copyDir(OPENCODE_AGENTS_SRC, CLAUDE_AGENTS_DIR);
|
|
139
|
-
log(` Installed ${agentCount} agents to ~/.claude/agents/ant/`, 'success');
|
|
140
|
-
filesCopied += agentCount;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Step 5: Write version file
|
|
144
|
-
const versionData = {
|
|
145
|
-
version: AETHER_VERSION,
|
|
146
|
-
installed_at: new Date().toISOString(),
|
|
147
|
-
package_root: PACKAGE_ROOT
|
|
148
|
-
};
|
|
149
|
-
fs.writeFileSync(
|
|
150
|
-
path.join(HUB_DIR, 'version.json'),
|
|
151
|
-
JSON.stringify(versionData, null, 2)
|
|
152
|
-
);
|
|
153
|
-
log(' Version info written', 'success');
|
|
154
|
-
|
|
155
|
-
// Step 6: Create global QUEEN.md if missing
|
|
156
|
-
const globalQueen = path.join(HUB_DIR, 'QUEEN.md');
|
|
157
|
-
if (!fs.existsSync(globalQueen)) {
|
|
158
|
-
const queenTemplate = path.join(HUB_DIR, 'system', 'templates', 'QUEEN.md.template');
|
|
159
|
-
if (fs.existsSync(queenTemplate)) {
|
|
160
|
-
let content = fs.readFileSync(queenTemplate, 'utf8');
|
|
161
|
-
content = content.replace(/{TIMESTAMP}/g, new Date().toISOString());
|
|
162
|
-
fs.writeFileSync(globalQueen, content);
|
|
163
|
-
log(' Created global QUEEN.md', 'success');
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Summary
|
|
168
|
-
console.log('\n ─────────────────────────────────────────────\n');
|
|
169
|
-
log(`Installation complete! ${filesCopied} files installed.`, 'success');
|
|
170
|
-
console.log('\n Next steps:\n');
|
|
171
|
-
console.log(' 1. Run /ant:init "your goal" in any project');
|
|
172
|
-
console.log(' 2. Use /ant:build to execute phases');
|
|
173
|
-
console.log(' 3. Run /ant:help for command reference\n');
|
|
174
|
-
console.log(' ─────────────────────────────────────────────\n');
|
|
11
|
+
console.log('\n ⚠ This installer has moved. Redirecting...\n');
|
|
12
|
+
const { interactiveSetup } = require('./lib/interactive-setup');
|
|
13
|
+
interactiveSetup().catch(err => {
|
|
14
|
+
console.error('Setup failed:', err.message);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
});
|
|
175
17
|
}
|
|
176
18
|
|
|
177
19
|
// Run installer
|
package/bin/validate-package.sh
CHANGED
|
@@ -51,6 +51,29 @@ REQUIRED_FILES=(
|
|
|
51
51
|
"skills/colony/.manifest.json"
|
|
52
52
|
"skills/domain/.manifest.json"
|
|
53
53
|
"utils/file-lock.sh"
|
|
54
|
+
"utils/chamber-compare.sh"
|
|
55
|
+
"utils/chamber-utils.sh"
|
|
56
|
+
"utils/clash-detect.sh"
|
|
57
|
+
"utils/colorize-log.sh"
|
|
58
|
+
"utils/council.sh"
|
|
59
|
+
"utils/emoji-audit.sh"
|
|
60
|
+
"utils/immune.sh"
|
|
61
|
+
"utils/merge-driver-lockfile.sh"
|
|
62
|
+
"utils/scan.sh"
|
|
63
|
+
"utils/semantic-cli.sh"
|
|
64
|
+
"utils/spawn-tree.sh"
|
|
65
|
+
"utils/state-loader.sh"
|
|
66
|
+
"utils/swarm-display.sh"
|
|
67
|
+
"utils/watch-spawn-tree.sh"
|
|
68
|
+
"utils/worktree.sh"
|
|
69
|
+
"utils/xml-compose.sh"
|
|
70
|
+
"utils/xml-convert.sh"
|
|
71
|
+
"utils/xml-core.sh"
|
|
72
|
+
"utils/xml-query.sh"
|
|
73
|
+
"utils/xml-utils.sh"
|
|
74
|
+
"utils/hooks/clash-pre-tool-use.js"
|
|
75
|
+
"utils/oracle/oracle.sh"
|
|
76
|
+
"utils/queen-to-md.xsl"
|
|
54
77
|
"templates/QUEEN.md.template"
|
|
55
78
|
"templates/colony-state.template.json"
|
|
56
79
|
"templates/constraints.template.json"
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aether-colony",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Multi-agent system using ant colony intelligence for Claude Code and OpenCode — workers self-organize via pheromone signals",
|
|
5
5
|
"bin": {
|
|
6
6
|
"aether": "bin/cli.js",
|
|
7
|
-
"aether-colony": "bin/npx-
|
|
7
|
+
"aether-colony": "bin/npx-entry.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"bin/",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"test:intelligence": "bash tests/bash/test-intelligence.sh",
|
|
32
32
|
"generate": "node bin/generate-commands.js",
|
|
33
33
|
"lint:shell": "shellcheck --severity=error .aether/aether-utils.sh bin/generate-commands.sh .aether/utils/file-lock.sh .aether/utils/atomic-write.sh .aether/utils/colorize-log.sh .aether/utils/watch-spawn-tree.sh",
|
|
34
|
-
"lint:json": "node -e \"const fs=require('fs'); const files=['.aether/data/constraints.json','.aether/data/COLONY_STATE.json']; files.filter(f=>fs.existsSync(f)).forEach(f=>{
|
|
34
|
+
"lint:json": "node -e \"const fs=require('fs'); const files=['.aether/data/constraints.json','.aether/data/COLONY_STATE.json']; files.filter(f=>fs.existsSync(f)).forEach(f=>{const s=fs.readFileSync(f,'utf8'); if(s.trim()) JSON.parse(s)}); console.log('JSON valid')\"",
|
|
35
35
|
"lint:sync": "bash bin/generate-commands.sh check",
|
|
36
36
|
"lint": "npm run lint:shell && npm run lint:json && npm run lint:sync"
|
|
37
37
|
},
|
|
@@ -69,5 +69,13 @@
|
|
|
69
69
|
"commander": "^12.1.0",
|
|
70
70
|
"js-yaml": "^4.1.0",
|
|
71
71
|
"picocolors": "^1.1.1"
|
|
72
|
+
},
|
|
73
|
+
"overrides": {
|
|
74
|
+
"minimatch": "^9.0.7",
|
|
75
|
+
"brace-expansion": "^2.0.3",
|
|
76
|
+
"path-to-regexp": "^8.4.0",
|
|
77
|
+
"picomatch": "^4.0.4",
|
|
78
|
+
"tar": "^7.5.11",
|
|
79
|
+
"diff": "^8.0.3"
|
|
72
80
|
}
|
|
73
81
|
}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
# Pheromone Display Enhancement Plan
|
|
2
|
-
|
|
3
|
-
**Created:** 2026-02-21
|
|
4
|
-
**Status:** ✅ COMPLETED
|
|
5
|
-
**Priority:** High - User-requested feature gap
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Problem Statement
|
|
10
|
-
|
|
11
|
-
The pheromone system works but is invisible:
|
|
12
|
-
|
|
13
|
-
1. **Council command exists** - `/ant:council` proposes pheromones via multiple choice
|
|
14
|
-
2. **Pheromone signals exist** - Stored in `.aether/data/pheromones.json`
|
|
15
|
-
3. **Colony-prime loads them** - But only shows a count like "Primed: 2 signals"
|
|
16
|
-
4. **User never sees them** - The actual content is hidden
|
|
17
|
-
|
|
18
|
-
**User's exact words:** "I think it's important to create a significant plan here for how to display the pheromones that are being injected."
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## What Exists (Don't Rebuild)
|
|
23
|
-
|
|
24
|
-
| Component | Location | Status |
|
|
25
|
-
|-----------|----------|--------|
|
|
26
|
-
| Council command | `.claude/commands/ant/council.md` | ✅ Works - multi-choice pheromone proposal |
|
|
27
|
-
| Focus command | `.claude/commands/ant/focus.md` | ✅ Works - emits FOCUS signal |
|
|
28
|
-
| Redirect command | `.claude/commands/ant/redirect.md` | ✅ Works - emits REDIRECT signal |
|
|
29
|
-
| Feedback command | `.claude/commands/ant/feedback.md` | ✅ Works - emits FEEDBACK signal |
|
|
30
|
-
| Pheromone storage | `.aether/data/pheromones.json` | ✅ Works - stores signals |
|
|
31
|
-
| Pheromone-prime | `aether-utils.sh:6211` | ✅ Works - loads signals with decay |
|
|
32
|
-
| Colony-prime | `aether-utils.sh:6337` | ✅ Works - combines wisdom + signals |
|
|
33
|
-
| Pheromone-count | `aether-utils.sh:6036` | ✅ Works - counts active signals |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## What's Missing
|
|
38
|
-
|
|
39
|
-
### 1. **Pheromone Display Function** (aether-utils.sh)
|
|
40
|
-
|
|
41
|
-
A new `pheromone-display` function that outputs a formatted table:
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
45
|
-
A C T I V E P H E R O M O N E S
|
|
46
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
47
|
-
|
|
48
|
-
🎯 FOCUS (Pay attention here)
|
|
49
|
-
1. [85%] "security" — injected 2d ago
|
|
50
|
-
2. [72%] "performance optimization" — injected 5d ago
|
|
51
|
-
|
|
52
|
-
🚫 REDIRECT (Hard constraints - DO NOT do this)
|
|
53
|
-
1. [90%] "use ORM" — injected 1d ago
|
|
54
|
-
2. [68%] "jQuery" — injected 7d ago
|
|
55
|
-
|
|
56
|
-
💬 FEEDBACK (Guidance to consider)
|
|
57
|
-
1. [65%] "prefer composition over inheritance" — injected 3d ago
|
|
58
|
-
|
|
59
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
60
|
-
Total: 5 active signals | Decay: FOCUS 30d, REDIRECT 60d, FEEDBACK 90d
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### 2. **Build Command Enhancement** (build.md)
|
|
64
|
-
|
|
65
|
-
After Step 4 (Load Colony Context), add Step 4.1:
|
|
66
|
-
|
|
67
|
-
```markdown
|
|
68
|
-
### Step 4.1: Display Active Pheromones
|
|
69
|
-
|
|
70
|
-
Run using the Bash tool:
|
|
71
|
-
```bash
|
|
72
|
-
bash .aether/aether-utils.sh pheromone-display
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
This displays the formatted pheromone table to the user so they can see what guidance is active.
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 3. **Status Command Enhancement** (status.md)
|
|
79
|
-
|
|
80
|
-
Add pheromone summary to `/ant:status` output:
|
|
81
|
-
|
|
82
|
-
```markdown
|
|
83
|
-
### Pheromones Active
|
|
84
|
-
|
|
85
|
-
🎯 FOCUS: 2 signals
|
|
86
|
-
🚫 REDIRECT: 1 signal
|
|
87
|
-
💬 FEEDBACK: 1 signal
|
|
88
|
-
|
|
89
|
-
Run /ant:pheromones for full details
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### 4. **New Pheromones Command** (pheromones.md)
|
|
93
|
-
|
|
94
|
-
A dedicated command for viewing/managing pheromones:
|
|
95
|
-
|
|
96
|
-
```markdown
|
|
97
|
-
---
|
|
98
|
-
name: ant:pheromones
|
|
99
|
-
description: "🎯🐜🚫🐜💬 View and manage active pheromone signals"
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
Usage:
|
|
103
|
-
/ant:pheromones # Display all active signals
|
|
104
|
-
/ant:pheromones focus # Show only FOCUS signals
|
|
105
|
-
/ant:pheromones redirect # Show only REDIRECT signals
|
|
106
|
-
/ant:pheromones feedback # Show only FEEDBACK signals
|
|
107
|
-
/ant:pheromones clear # Clear all expired signals
|
|
108
|
-
/ant:pheromones expire <id> # Expire a specific signal
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## Implementation Plan
|
|
114
|
-
|
|
115
|
-
### Phase 1: pheromone-display Function (aether-utils.sh)
|
|
116
|
-
|
|
117
|
-
**Location:** After `pheromone-count` (~line 6058)
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
pheromone-display)
|
|
121
|
-
# Display active pheromones in formatted table
|
|
122
|
-
# Usage: pheromone-display [type]
|
|
123
|
-
# type: Optional filter (focus/redirect/feedback)
|
|
124
|
-
# Returns: Formatted table string
|
|
125
|
-
|
|
126
|
-
pd_file="$DATA_DIR/pheromones.json"
|
|
127
|
-
pd_type="${1:-all}"
|
|
128
|
-
pd_now=$(date +%s)
|
|
129
|
-
|
|
130
|
-
if [[ ! -f "$pd_file" ]]; then
|
|
131
|
-
echo "No pheromones file found. Run /ant:init to initialize colony."
|
|
132
|
-
exit 0
|
|
133
|
-
fi
|
|
134
|
-
|
|
135
|
-
# Build display using same decay logic as pheromone-read
|
|
136
|
-
# ... (implementation details)
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
**Output format:**
|
|
140
|
-
- Header with box drawing
|
|
141
|
-
- Grouped by type (FOCUS, REDIRECT, FEEDBACK)
|
|
142
|
-
- Each signal shows: effective strength %, content, age
|
|
143
|
-
- Footer with totals and decay info
|
|
144
|
-
|
|
145
|
-
### Phase 2: Update build.md
|
|
146
|
-
|
|
147
|
-
Add Step 4.1 after colony-prime call to display pheromones visibly.
|
|
148
|
-
|
|
149
|
-
### Phase 3: Update status.md
|
|
150
|
-
|
|
151
|
-
Add pheromone summary section after memory health display.
|
|
152
|
-
|
|
153
|
-
### Phase 4: Create pheromones.md Command
|
|
154
|
-
|
|
155
|
-
New slash command for dedicated pheromone viewing and management.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## Display Locations
|
|
160
|
-
|
|
161
|
-
| Where | What | When |
|
|
162
|
-
|-------|------|------|
|
|
163
|
-
| `/ant:build` | Full table | Before spawning workers |
|
|
164
|
-
| `/ant:status` | Summary counts | In colony overview |
|
|
165
|
-
| `/ant:council` | After injection | Show what was added |
|
|
166
|
-
| `/ant:pheromones` | Full table + management | On demand |
|
|
167
|
-
| `/ant:continue` | Summary | After phase completion |
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Visual Design
|
|
172
|
-
|
|
173
|
-
### Full Table (for /ant:build, /ant:pheromones)
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
177
|
-
A C T I V E P H E R O M O N E S
|
|
178
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
179
|
-
|
|
180
|
-
🎯 FOCUS (Pay attention here)
|
|
181
|
-
1. [85%] "security"
|
|
182
|
-
└── injected 2d ago, expires in 28d
|
|
183
|
-
2. [72%] "performance optimization"
|
|
184
|
-
└── injected 5d ago, expires in 25d
|
|
185
|
-
|
|
186
|
-
🚫 REDIRECT (Hard constraints - DO NOT do this)
|
|
187
|
-
1. [90%] "use ORM"
|
|
188
|
-
└── injected 1d ago, expires in 59d
|
|
189
|
-
2. [68%] "jQuery"
|
|
190
|
-
└── injected 7d ago, expires in 53d
|
|
191
|
-
|
|
192
|
-
💬 FEEDBACK (Guidance to consider)
|
|
193
|
-
1. [65%] "prefer composition over inheritance"
|
|
194
|
-
└── injected 3d ago, expires in 87d
|
|
195
|
-
|
|
196
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
197
|
-
5 signals active | Decay rates: FOCUS 30d, REDIRECT 60d, FEEDBACK 90d
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### Summary (for /ant:status)
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
┌─────────────────────────────────────────────────────────┐
|
|
204
|
-
│ PHEROMONES │
|
|
205
|
-
├─────────────────────────────────────────────────────────┤
|
|
206
|
-
│ 🎯 FOCUS: 2 🚫 REDIRECT: 1 💬 FEEDBACK: 1 │
|
|
207
|
-
│ │
|
|
208
|
-
│ Strongest: "use ORM" [90%] │
|
|
209
|
-
│ Newest: "security" [85%] - 2d ago │
|
|
210
|
-
│ │
|
|
211
|
-
│ Run /ant:pheromones for details │
|
|
212
|
-
└─────────────────────────────────────────────────────────┘
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Injection Confirmation (for /ant:council, /ant:focus, etc.)
|
|
216
|
-
|
|
217
|
-
```
|
|
218
|
-
✓ Pheromone injected:
|
|
219
|
-
🎯 FOCUS: "security"
|
|
220
|
-
Strength: 0.8 | Expires: 30d
|
|
221
|
-
|
|
222
|
-
Active signals: 5
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## Files to Create/Modify
|
|
228
|
-
|
|
229
|
-
| File | Action | Purpose |
|
|
230
|
-
|------|--------|---------|
|
|
231
|
-
| `.aether/aether-utils.sh` | Modify | Add `pheromone-display` function |
|
|
232
|
-
| `.claude/commands/ant/build.md` | Modify | Add Step 4.1 - display pheromones |
|
|
233
|
-
| `.claude/commands/ant/status.md` | Modify | Add pheromone summary section |
|
|
234
|
-
| `.claude/commands/ant/pheromones.md` | Create | New command for viewing/managing |
|
|
235
|
-
| `.opencode/commands/ant/pheromones.md` | Create | OpenCode version |
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## Testing
|
|
240
|
-
|
|
241
|
-
1. Run `/ant:focus "test signal"` and verify it appears in display
|
|
242
|
-
2. Run `/ant:redirect "avoid this"` and verify it appears in display
|
|
243
|
-
3. Run `/ant:build 1` and verify pheromone table shows before workers spawn
|
|
244
|
-
4. Run `/ant:status` and verify pheromone summary appears
|
|
245
|
-
5. Test decay: Create signal, wait, verify strength decreases
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Success Criteria
|
|
250
|
-
|
|
251
|
-
- [x] `/ant:build` displays full pheromone table before spawning workers
|
|
252
|
-
- [x] `/ant:status` shows pheromone counts and strongest/newest
|
|
253
|
-
- [x] `/ant:pheromones` command exists for dedicated viewing
|
|
254
|
-
- [x] `/ant:council` displays what was injected after session (already existed)
|
|
255
|
-
- [x] All signal types (FOCUS/REDIRECT/FEEDBACK) visible
|
|
256
|
-
- [x] Decay strength shown as percentage
|
|
257
|
-
- [x] Age and expiry shown per signal
|