aether-colony 5.0.0 → 5.2.1
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 +3226 -3345
- package/.aether/agents-claude/aether-ambassador.md +265 -0
- package/.aether/agents-claude/aether-archaeologist.md +327 -0
- package/.aether/agents-claude/aether-architect.md +236 -0
- package/.aether/agents-claude/aether-auditor.md +271 -0
- package/.aether/agents-claude/aether-builder.md +224 -0
- package/.aether/agents-claude/aether-chaos.md +269 -0
- package/.aether/agents-claude/aether-chronicler.md +305 -0
- package/.aether/agents-claude/aether-gatekeeper.md +330 -0
- package/.aether/agents-claude/aether-includer.md +374 -0
- package/.aether/agents-claude/aether-keeper.md +272 -0
- package/.aether/agents-claude/aether-measurer.md +322 -0
- package/.aether/agents-claude/aether-oracle.md +237 -0
- package/.aether/agents-claude/aether-probe.md +211 -0
- package/.aether/agents-claude/aether-queen.md +330 -0
- package/.aether/agents-claude/aether-route-setter.md +178 -0
- package/.aether/agents-claude/aether-sage.md +418 -0
- package/.aether/agents-claude/aether-scout.md +179 -0
- package/.aether/agents-claude/aether-surveyor-disciplines.md +417 -0
- package/.aether/agents-claude/aether-surveyor-nest.md +355 -0
- package/.aether/agents-claude/aether-surveyor-pathogens.md +289 -0
- package/.aether/agents-claude/aether-surveyor-provisions.md +360 -0
- package/.aether/agents-claude/aether-tracker.md +270 -0
- package/.aether/agents-claude/aether-watcher.md +280 -0
- package/.aether/agents-claude/aether-weaver.md +248 -0
- package/.aether/commands/archaeology.yaml +653 -0
- package/.aether/commands/build.yaml +1221 -0
- package/.aether/commands/chaos.yaml +653 -0
- package/.aether/commands/colonize.yaml +442 -0
- package/.aether/commands/continue.yaml +1484 -0
- package/.aether/commands/council.yaml +509 -0
- package/.aether/commands/data-clean.yaml +80 -0
- package/.aether/commands/dream.yaml +275 -0
- package/.aether/commands/entomb.yaml +863 -0
- package/.aether/commands/export-signals.yaml +64 -0
- package/.aether/commands/feedback.yaml +158 -0
- package/.aether/commands/flag.yaml +160 -0
- package/.aether/commands/flags.yaml +177 -0
- package/.aether/commands/focus.yaml +112 -0
- package/.aether/commands/help.yaml +167 -0
- package/.aether/commands/history.yaml +137 -0
- package/.aether/commands/import-signals.yaml +79 -0
- package/.aether/commands/init.yaml +502 -0
- package/.aether/commands/insert-phase.yaml +102 -0
- package/.aether/commands/interpret.yaml +285 -0
- package/.aether/commands/lay-eggs.yaml +224 -0
- package/.aether/commands/maturity.yaml +122 -0
- package/.aether/commands/memory-details.yaml +74 -0
- package/.aether/commands/migrate-state.yaml +174 -0
- package/.aether/commands/oracle.yaml +1224 -0
- package/.aether/commands/organize.yaml +446 -0
- package/.aether/commands/patrol.yaml +621 -0
- package/.aether/commands/pause-colony.yaml +424 -0
- package/.aether/commands/phase.yaml +124 -0
- package/.aether/commands/pheromones.yaml +153 -0
- package/.aether/commands/plan.yaml +1364 -0
- package/.aether/commands/preferences.yaml +63 -0
- package/.aether/commands/quick.yaml +104 -0
- package/.aether/commands/redirect.yaml +123 -0
- package/.aether/commands/resume-colony.yaml +375 -0
- package/.aether/commands/resume.yaml +407 -0
- package/.aether/commands/run.yaml +229 -0
- package/.aether/commands/seal.yaml +1214 -0
- package/.aether/commands/skill-create.yaml +337 -0
- package/.aether/commands/status.yaml +408 -0
- package/.aether/commands/swarm.yaml +352 -0
- package/.aether/commands/tunnels.yaml +814 -0
- package/.aether/commands/update.yaml +131 -0
- package/.aether/commands/verify-castes.yaml +159 -0
- package/.aether/commands/watch.yaml +454 -0
- package/.aether/docs/INCIDENT_TEMPLATE.md +32 -0
- package/.aether/docs/QUEEN-SYSTEM.md +11 -11
- package/.aether/docs/README.md +32 -2
- package/.aether/docs/command-playbooks/README.md +23 -0
- package/.aether/docs/command-playbooks/build-complete.md +349 -0
- package/.aether/docs/command-playbooks/build-context.md +282 -0
- package/.aether/docs/command-playbooks/build-full.md +1683 -0
- package/.aether/docs/command-playbooks/build-prep.md +284 -0
- package/.aether/docs/command-playbooks/build-verify.md +405 -0
- package/.aether/docs/command-playbooks/build-wave.md +749 -0
- package/.aether/docs/command-playbooks/continue-advance.md +524 -0
- package/.aether/docs/command-playbooks/continue-finalize.md +447 -0
- package/.aether/docs/command-playbooks/continue-full.md +1725 -0
- package/.aether/docs/command-playbooks/continue-gates.md +686 -0
- package/.aether/docs/command-playbooks/continue-verify.md +407 -0
- package/.aether/docs/context-continuity.md +84 -0
- package/.aether/docs/disciplines/DISCIPLINES.md +9 -7
- package/.aether/docs/error-codes.md +1 -1
- package/.aether/docs/known-issues.md +34 -173
- package/.aether/docs/pheromones.md +86 -6
- package/.aether/docs/plans/pheromone-display-plan.md +257 -0
- package/.aether/docs/queen-commands.md +10 -9
- package/.aether/docs/source-of-truth-map.md +132 -0
- package/.aether/docs/xml-utilities.md +47 -0
- package/.aether/rules/aether-colony.md +23 -13
- package/.aether/scripts/incident-test-add.sh +47 -0
- package/.aether/scripts/weekly-audit.sh +79 -0
- package/.aether/skills/.index.json +649 -0
- package/.aether/skills/colony/.manifest.json +16 -0
- package/.aether/skills/colony/build-discipline/SKILL.md +78 -0
- package/.aether/skills/colony/colony-interaction/SKILL.md +56 -0
- package/.aether/skills/colony/colony-lifecycle/SKILL.md +77 -0
- package/.aether/skills/colony/colony-visuals/SKILL.md +112 -0
- package/.aether/skills/colony/context-management/SKILL.md +80 -0
- package/.aether/skills/colony/error-presentation/SKILL.md +99 -0
- package/.aether/skills/colony/pheromone-protocol/SKILL.md +79 -0
- package/.aether/skills/colony/pheromone-visibility/SKILL.md +81 -0
- package/.aether/skills/colony/state-safety/SKILL.md +84 -0
- package/.aether/skills/colony/worker-priming/SKILL.md +82 -0
- package/.aether/skills/domain/.manifest.json +24 -0
- package/.aether/skills/domain/README.md +33 -0
- package/.aether/skills/domain/django/SKILL.md +49 -0
- package/.aether/skills/domain/docker/SKILL.md +52 -0
- package/.aether/skills/domain/golang/SKILL.md +52 -0
- package/.aether/skills/domain/graphql/SKILL.md +51 -0
- package/.aether/skills/domain/html-css/SKILL.md +48 -0
- package/.aether/skills/domain/nextjs/SKILL.md +45 -0
- package/.aether/skills/domain/nodejs/SKILL.md +53 -0
- package/.aether/skills/domain/postgresql/SKILL.md +53 -0
- package/.aether/skills/domain/prisma/SKILL.md +59 -0
- package/.aether/skills/domain/python/SKILL.md +50 -0
- package/.aether/skills/domain/rails/SKILL.md +52 -0
- package/.aether/skills/domain/react/SKILL.md +45 -0
- package/.aether/skills/domain/rest-api/SKILL.md +58 -0
- package/.aether/skills/domain/svelte/SKILL.md +47 -0
- package/.aether/skills/domain/tailwind/SKILL.md +45 -0
- package/.aether/skills/domain/testing/SKILL.md +53 -0
- package/.aether/skills/domain/typescript/SKILL.md +58 -0
- package/.aether/skills/domain/vue/SKILL.md +49 -0
- package/.aether/templates/QUEEN.md.template +23 -41
- package/.aether/templates/colony-state-reset.jq.template +1 -0
- package/.aether/templates/colony-state.template.json +4 -0
- package/.aether/templates/learning-observations.template.json +6 -0
- package/.aether/templates/midden.template.json +13 -0
- package/.aether/templates/pheromones.template.json +6 -0
- package/.aether/templates/session.template.json +9 -0
- package/.aether/utils/atomic-write.sh +63 -17
- package/.aether/utils/chamber-utils.sh +145 -2
- package/.aether/utils/council.sh +425 -0
- package/.aether/utils/emoji-audit.sh +166 -0
- package/.aether/utils/error-handler.sh +21 -7
- package/.aether/utils/file-lock.sh +182 -27
- package/.aether/utils/flag.sh +278 -0
- package/.aether/utils/hive.sh +572 -0
- package/.aether/utils/immune.sh +508 -0
- package/.aether/utils/learning.sh +1928 -0
- package/.aether/utils/midden.sh +520 -0
- package/.aether/utils/oracle/oracle.md +168 -0
- package/.aether/utils/oracle/oracle.sh +1023 -0
- package/.aether/utils/pheromone.sh +2029 -0
- package/.aether/utils/queen.sh +1710 -0
- package/.aether/utils/scan.sh +860 -0
- package/.aether/utils/semantic-cli.sh +10 -8
- package/.aether/utils/session.sh +816 -0
- package/.aether/utils/skills.sh +509 -0
- package/.aether/utils/spawn-tree.sh +103 -271
- package/.aether/utils/spawn.sh +260 -0
- package/.aether/utils/state-api.sh +389 -0
- package/.aether/utils/state-loader.sh +8 -6
- package/.aether/utils/suggest.sh +611 -0
- package/.aether/utils/swarm-display.sh +10 -1
- package/.aether/utils/swarm.sh +1004 -0
- package/.aether/utils/watch-spawn-tree.sh +11 -2
- package/.aether/utils/xml-compose.sh +2 -2
- package/.aether/utils/xml-convert.sh +9 -5
- package/.aether/utils/xml-core.sh +5 -9
- package/.aether/utils/xml-query.sh +4 -4
- package/.aether/workers.md +86 -67
- package/.claude/agents/ant/aether-ambassador.md +2 -1
- package/.claude/agents/ant/aether-archaeologist.md +6 -1
- package/.claude/agents/ant/aether-architect.md +236 -0
- package/.claude/agents/ant/aether-auditor.md +6 -1
- package/.claude/agents/ant/aether-builder.md +38 -1
- package/.claude/agents/ant/aether-chaos.md +2 -1
- package/.claude/agents/ant/aether-chronicler.md +1 -0
- package/.claude/agents/ant/aether-gatekeeper.md +6 -1
- package/.claude/agents/ant/aether-includer.md +1 -0
- package/.claude/agents/ant/aether-keeper.md +1 -0
- package/.claude/agents/ant/aether-measurer.md +6 -1
- package/.claude/agents/ant/aether-oracle.md +237 -0
- package/.claude/agents/ant/aether-probe.md +2 -1
- package/.claude/agents/ant/aether-queen.md +6 -1
- package/.claude/agents/ant/aether-route-setter.md +6 -1
- package/.claude/agents/ant/aether-sage.md +68 -3
- package/.claude/agents/ant/aether-scout.md +38 -1
- package/.claude/agents/ant/aether-surveyor-disciplines.md +2 -1
- package/.claude/agents/ant/aether-surveyor-nest.md +2 -1
- package/.claude/agents/ant/aether-surveyor-pathogens.md +2 -1
- package/.claude/agents/ant/aether-surveyor-provisions.md +2 -1
- package/.claude/agents/ant/aether-tracker.md +6 -1
- package/.claude/agents/ant/aether-watcher.md +37 -1
- package/.claude/agents/ant/aether-weaver.md +2 -1
- package/.claude/commands/ant/archaeology.md +1 -8
- package/.claude/commands/ant/build.md +43 -1159
- package/.claude/commands/ant/chaos.md +1 -14
- package/.claude/commands/ant/colonize.md +3 -14
- package/.claude/commands/ant/continue.md +40 -1026
- package/.claude/commands/ant/council.md +213 -15
- package/.claude/commands/ant/data-clean.md +81 -0
- package/.claude/commands/ant/dream.md +12 -9
- package/.claude/commands/ant/entomb.md +62 -87
- package/.claude/commands/ant/export-signals.md +57 -0
- package/.claude/commands/ant/feedback.md +18 -0
- package/.claude/commands/ant/flag.md +12 -0
- package/.claude/commands/ant/flags.md +22 -8
- package/.claude/commands/ant/focus.md +18 -0
- package/.claude/commands/ant/help.md +40 -8
- package/.claude/commands/ant/history.md +3 -0
- package/.claude/commands/ant/import-signals.md +71 -0
- package/.claude/commands/ant/init.md +349 -191
- package/.claude/commands/ant/insert-phase.md +105 -0
- package/.claude/commands/ant/interpret.md +11 -0
- package/.claude/commands/ant/lay-eggs.md +167 -158
- package/.claude/commands/ant/maturity.md +22 -11
- package/.claude/commands/ant/memory-details.md +77 -0
- package/.claude/commands/ant/migrate-state.md +6 -0
- package/.claude/commands/ant/oracle.md +317 -62
- package/.claude/commands/ant/organize.md +10 -5
- package/.claude/commands/ant/patrol.md +620 -0
- package/.claude/commands/ant/pause-colony.md +8 -22
- package/.claude/commands/ant/phase.md +26 -37
- package/.claude/commands/ant/pheromones.md +156 -0
- package/.claude/commands/ant/plan.md +199 -50
- package/.claude/commands/ant/preferences.md +65 -0
- package/.claude/commands/ant/quick.md +100 -0
- package/.claude/commands/ant/redirect.md +18 -0
- package/.claude/commands/ant/resume-colony.md +37 -22
- package/.claude/commands/ant/resume.md +60 -7
- package/.claude/commands/ant/run.md +231 -0
- package/.claude/commands/ant/seal.md +506 -78
- package/.claude/commands/ant/skill-create.md +286 -0
- package/.claude/commands/ant/status.md +171 -1
- package/.claude/commands/ant/swarm.md +11 -23
- package/.claude/commands/ant/tunnels.md +1 -0
- package/.claude/commands/ant/update.md +58 -135
- package/.claude/commands/ant/verify-castes.md +90 -42
- package/.claude/commands/ant/watch.md +1 -0
- package/.opencode/agents/aether-ambassador.md +1 -1
- package/.opencode/agents/aether-architect.md +133 -0
- package/.opencode/agents/aether-builder.md +3 -3
- package/.opencode/agents/aether-oracle.md +137 -0
- package/.opencode/agents/aether-queen.md +1 -1
- package/.opencode/agents/aether-route-setter.md +1 -1
- package/.opencode/agents/aether-scout.md +1 -1
- package/.opencode/agents/aether-surveyor-disciplines.md +6 -1
- package/.opencode/agents/aether-surveyor-nest.md +6 -1
- package/.opencode/agents/aether-surveyor-pathogens.md +6 -1
- package/.opencode/agents/aether-surveyor-provisions.md +6 -1
- package/.opencode/agents/aether-tracker.md +1 -1
- package/.opencode/agents/aether-watcher.md +1 -1
- package/.opencode/agents/aether-weaver.md +1 -1
- package/.opencode/commands/ant/archaeology.md +7 -14
- package/.opencode/commands/ant/build.md +54 -88
- package/.opencode/commands/ant/chaos.md +7 -24
- package/.opencode/commands/ant/colonize.md +10 -17
- package/.opencode/commands/ant/continue.md +595 -66
- package/.opencode/commands/ant/council.md +150 -18
- package/.opencode/commands/ant/data-clean.md +77 -0
- package/.opencode/commands/ant/dream.md +15 -17
- package/.opencode/commands/ant/entomb.md +28 -18
- package/.opencode/commands/ant/export-signals.md +54 -0
- package/.opencode/commands/ant/feedback.md +24 -5
- package/.opencode/commands/ant/flag.md +16 -4
- package/.opencode/commands/ant/flags.md +24 -10
- package/.opencode/commands/ant/focus.md +22 -5
- package/.opencode/commands/ant/help.md +41 -8
- package/.opencode/commands/ant/history.md +9 -0
- package/.opencode/commands/ant/import-signals.md +68 -0
- package/.opencode/commands/ant/init.md +396 -154
- package/.opencode/commands/ant/insert-phase.md +111 -0
- package/.opencode/commands/ant/interpret.md +16 -0
- package/.opencode/commands/ant/lay-eggs.md +184 -112
- package/.opencode/commands/ant/maturity.md +18 -2
- package/.opencode/commands/ant/memory-details.md +83 -0
- package/.opencode/commands/ant/migrate-state.md +12 -0
- package/.opencode/commands/ant/oracle.md +322 -67
- package/.opencode/commands/ant/organize.md +14 -12
- package/.opencode/commands/ant/patrol.md +626 -0
- package/.opencode/commands/ant/pause-colony.md +12 -29
- package/.opencode/commands/ant/phase.md +30 -40
- package/.opencode/commands/ant/pheromones.md +162 -0
- package/.opencode/commands/ant/plan.md +210 -57
- package/.opencode/commands/ant/preferences.md +71 -0
- package/.opencode/commands/ant/quick.md +91 -0
- package/.opencode/commands/ant/redirect.md +22 -5
- package/.opencode/commands/ant/resume-colony.md +41 -29
- package/.opencode/commands/ant/resume.md +80 -20
- package/.opencode/commands/ant/run.md +237 -0
- package/.opencode/commands/ant/seal.md +230 -25
- package/.opencode/commands/ant/skill-create.md +63 -0
- package/.opencode/commands/ant/status.md +125 -30
- package/.opencode/commands/ant/swarm.md +3 -345
- package/.opencode/commands/ant/tunnels.md +3 -9
- package/.opencode/commands/ant/update.md +63 -127
- package/.opencode/commands/ant/verify-castes.md +96 -42
- package/.opencode/commands/ant/watch.md +7 -0
- package/CHANGELOG.md +368 -1
- package/README.md +195 -324
- package/bin/cli.js +236 -429
- package/bin/generate-commands.js +186 -0
- package/bin/generate-commands.sh +128 -89
- package/bin/lib/spawn-logger.js +0 -15
- package/bin/lib/update-transaction.js +285 -35
- package/bin/npx-install.js +178 -0
- package/bin/validate-package.sh +85 -3
- package/package.json +16 -4
- package/.aether/CONTEXT.md +0 -160
- package/.aether/docs/QUEEN.md +0 -84
- package/.aether/exchange/colony-registry.xml +0 -11
- package/.aether/exchange/pheromones.xml +0 -87
- package/.aether/exchange/queen-wisdom.xml +0 -14
- package/.aether/model-profiles.yaml +0 -100
- package/.aether/utils/spawn-with-model.sh +0 -56
- package/bin/lib/model-profiles.js +0 -445
- package/bin/lib/model-verify.js +0 -288
- package/bin/lib/proxy-health.js +0 -253
- package/bin/lib/telemetry.js +0 -441
|
@@ -1,34 +1,23 @@
|
|
|
1
|
+
<!-- Generated from .aether/commands/seal.yaml - DO NOT EDIT DIRECTLY -->
|
|
1
2
|
---
|
|
2
3
|
name: ant:seal
|
|
3
4
|
description: "🏺🐜🏺 Seal the colony with Crowned Anthill milestone"
|
|
4
5
|
---
|
|
5
6
|
|
|
6
|
-
You are the **Queen**. Seal the colony when all work is complete.
|
|
7
|
-
|
|
8
|
-
## Instructions
|
|
9
|
-
|
|
10
7
|
### Step -1: Normalize Arguments
|
|
11
8
|
|
|
12
9
|
Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
|
|
13
10
|
|
|
14
11
|
This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
|
|
15
12
|
|
|
13
|
+
You are the **Queen**. Seal the colony when all work is complete.
|
|
14
|
+
|
|
15
|
+
## Instructions
|
|
16
|
+
|
|
16
17
|
Parse `$normalized_args`:
|
|
17
18
|
- If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
|
|
18
19
|
- Otherwise: set `visual_mode = true`
|
|
19
20
|
|
|
20
|
-
### Step 0: Initialize Visual Mode (if enabled)
|
|
21
|
-
|
|
22
|
-
If `visual_mode` is true:
|
|
23
|
-
```bash
|
|
24
|
-
# Generate session ID
|
|
25
|
-
seal_id="seal-$(date +%s)"
|
|
26
|
-
|
|
27
|
-
# Initialize swarm display
|
|
28
|
-
bash .aether/aether-utils.sh swarm-display-init "$seal_id"
|
|
29
|
-
bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Sealing colony" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
|
|
30
|
-
```
|
|
31
|
-
|
|
32
21
|
### Step 1: Read State
|
|
33
22
|
|
|
34
23
|
Read `.aether/data/COLONY_STATE.json`.
|
|
@@ -139,6 +128,31 @@ Create archive manifest file `$archive_dir/manifest.json`:
|
|
|
139
128
|
}
|
|
140
129
|
```
|
|
141
130
|
|
|
131
|
+
### Step 4.5: Increment Colony Version
|
|
132
|
+
|
|
133
|
+
Before writing the Crowned Anthill milestone, increment `colony_version` in COLONY_STATE.json.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Read current colony_version (default to 0 for backward compat with older colonies)
|
|
137
|
+
current_colony_version=$(jq -r '.colony_version // 0' .aether/data/COLONY_STATE.json 2>/dev/null || echo 0)
|
|
138
|
+
# Guard against non-integer values (floats, strings)
|
|
139
|
+
[[ "$current_colony_version" =~ ^[0-9]+$ ]] || current_colony_version=0
|
|
140
|
+
new_colony_version=$(( current_colony_version + 1 ))
|
|
141
|
+
|
|
142
|
+
# Write incremented value back — guard against empty output destroying the file
|
|
143
|
+
updated=$(jq --argjson v "$new_colony_version" '.colony_version = $v' .aether/data/COLONY_STATE.json 2>/dev/null)
|
|
144
|
+
if [[ -n "$updated" && ${#updated} -gt 10 ]]; then
|
|
145
|
+
echo "$updated" > .aether/data/COLONY_STATE.json
|
|
146
|
+
else
|
|
147
|
+
echo "Warning: jq update failed — colony_version defaults to 1, state file unchanged"
|
|
148
|
+
new_colony_version=1
|
|
149
|
+
fi
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Use `new_colony_version` as `{colony_version}` throughout the rest of the seal ceremony (e.g., display as "Crowned Anthill v{colony_version}").
|
|
153
|
+
|
|
154
|
+
**Error handling:** If jq fails or produces empty/short output, COLONY_STATE.json is NOT overwritten and `new_colony_version` defaults to 1. Never let version increment failures block the seal.
|
|
155
|
+
|
|
142
156
|
### Step 5: Update Milestone to Crowned Anthill
|
|
143
157
|
|
|
144
158
|
Update COLONY_STATE.json:
|
|
@@ -146,6 +160,99 @@ Update COLONY_STATE.json:
|
|
|
146
160
|
2. Set `milestone_updated_at` to current ISO-8601 timestamp
|
|
147
161
|
3. Append event: `"<timestamp>|milestone_reached|archive|Achieved Crowned Anthill milestone - colony archived"`
|
|
148
162
|
|
|
163
|
+
### Step 5.1: Update Changelog
|
|
164
|
+
|
|
165
|
+
**MANDATORY: Record the seal in the project changelog. This step is never skipped.**
|
|
166
|
+
|
|
167
|
+
If no `CHANGELOG.md` exists, `changelog-append` creates one automatically.
|
|
168
|
+
|
|
169
|
+
Build a summary of what the colony accomplished across all phases:
|
|
170
|
+
- Collect completed phase names from COLONY_STATE.json
|
|
171
|
+
- Summarize the goal and key outcomes in one line
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
bash .aether/aether-utils.sh changelog-append \
|
|
175
|
+
"$(date +%Y-%m-%d)" \
|
|
176
|
+
"seal-crowned-anthill" \
|
|
177
|
+
"00" \
|
|
178
|
+
"{key_files_csv}" \
|
|
179
|
+
"Colony sealed at Crowned Anthill;{goal}" \
|
|
180
|
+
"{phases_completed} phases completed;Colony wisdom promoted to QUEEN.md" \
|
|
181
|
+
""
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
- `{key_files_csv}` — list the most significant files created or modified across the colony's lifetime (derive from phase plans or git log)
|
|
185
|
+
- `{goal}` — the colony goal from COLONY_STATE.json
|
|
186
|
+
|
|
187
|
+
**Error handling:** If `changelog-append` fails, log to midden and continue — changelog failure never blocks sealing.
|
|
188
|
+
|
|
189
|
+
### Step 5.2: Update Registry (Silent)
|
|
190
|
+
|
|
191
|
+
Mark the colony as inactive in the global registry. This is silent on failure — registry is not required for the colony to work.
|
|
192
|
+
|
|
193
|
+
Run using the Bash tool (ignore errors):
|
|
194
|
+
```bash
|
|
195
|
+
bash .aether/aether-utils.sh registry-add "$(pwd)" "$(jq -r '.version // "unknown"' ~/.aether/version.json 2>/dev/null || echo 'unknown')" --active false 2>/dev/null || true
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
If the command fails, proceed silently. This is optional bookkeeping.
|
|
199
|
+
|
|
200
|
+
### Step 5.25: Hive Promotion (NON-BLOCKING)
|
|
201
|
+
|
|
202
|
+
After wisdom promotion, promote abstracted instincts to the cross-colony hive.
|
|
203
|
+
|
|
204
|
+
**Extract high-confidence instincts for hive promotion:**
|
|
205
|
+
```bash
|
|
206
|
+
# Get instincts with confidence >= 0.8
|
|
207
|
+
high_conf_instincts=$(jq -r '.memory.instincts[] | select(.confidence >= 0.8) | @base64' .aether/data/COLONY_STATE.json 2>/dev/null || echo "")
|
|
208
|
+
|
|
209
|
+
# Derive source repo name from current directory
|
|
210
|
+
source_repo="$(pwd)"
|
|
211
|
+
|
|
212
|
+
# Read domain tags from registry (NOT from instinct.domain which is a category, not a repo domain)
|
|
213
|
+
repo_domain_tags=$(jq -r --arg repo "$(pwd)" \
|
|
214
|
+
'[.repos[] | select(.path == $repo) | .domain_tags // []] | .[0] // [] | join(",")' \
|
|
215
|
+
"$HOME/.aether/registry.json" 2>/dev/null || echo "")
|
|
216
|
+
|
|
217
|
+
hive_promoted_count=0
|
|
218
|
+
hive_errors=0
|
|
219
|
+
for encoded in $high_conf_instincts; do
|
|
220
|
+
[[ -z "$encoded" ]] && continue
|
|
221
|
+
|
|
222
|
+
# Extract trigger and action fields from the instinct object
|
|
223
|
+
trigger=$(echo "$encoded" | base64 -d | jq -r '.trigger // empty')
|
|
224
|
+
action=$(echo "$encoded" | base64 -d | jq -r '.action // empty')
|
|
225
|
+
confidence=$(echo "$encoded" | base64 -d | jq -r '.confidence // 0.7')
|
|
226
|
+
|
|
227
|
+
[[ -z "$trigger" || -z "$action" ]] && continue
|
|
228
|
+
|
|
229
|
+
# Strip leading "When " or "when " from trigger to avoid "When When..." stutter
|
|
230
|
+
trigger_clean=$(echo "$trigger" | sed 's/^[Ww]hen //')
|
|
231
|
+
|
|
232
|
+
# Build the promotion text in "When {trigger}: {action}" format
|
|
233
|
+
promote_text="When ${trigger_clean}: ${action}"
|
|
234
|
+
|
|
235
|
+
# Build hive-promote args with --text and --source-repo (required)
|
|
236
|
+
promote_args=(hive-promote --text "$promote_text" --source-repo "$source_repo" --confidence "$confidence")
|
|
237
|
+
[[ -n "$repo_domain_tags" ]] && promote_args+=(--domain "$repo_domain_tags")
|
|
238
|
+
|
|
239
|
+
# Call hive-promote which orchestrates abstract + store
|
|
240
|
+
result=$(bash .aether/aether-utils.sh "${promote_args[@]}" 2>/dev/null || echo '{}')
|
|
241
|
+
was_promoted=$(echo "$result" | jq -r '.result.action // "skipped"' 2>/dev/null || echo "skipped")
|
|
242
|
+
|
|
243
|
+
if [[ "$was_promoted" == "promoted" || "$was_promoted" == "merged" ]]; then
|
|
244
|
+
hive_promoted_count=$((hive_promoted_count + 1))
|
|
245
|
+
fi
|
|
246
|
+
done
|
|
247
|
+
|
|
248
|
+
if [[ "$hive_promoted_count" -gt 0 ]]; then
|
|
249
|
+
echo "Hive promotion: $hive_promoted_count instinct(s) promoted to cross-colony hive"
|
|
250
|
+
fi
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Continue to Step 5.5 (non-blocking):**
|
|
254
|
+
Proceed to Step 5.5 regardless of hive promotion results — hive promotion is strictly non-blocking.
|
|
255
|
+
|
|
149
256
|
### Step 5.5: Write Final Handoff
|
|
150
257
|
|
|
151
258
|
After archiving, write the final handoff documenting the completed colony:
|
|
@@ -171,7 +278,7 @@ This handoff serves as the final record of the completed colony.
|
|
|
171
278
|
|
|
172
279
|
### Step 5.75: Export XML Archive (best-effort)
|
|
173
280
|
|
|
174
|
-
Export colony data as a combined XML archive.
|
|
281
|
+
Export colony data as a combined XML archive and a standalone pheromones.xml. Both are best-effort — seal proceeds even if XML export fails.
|
|
175
282
|
|
|
176
283
|
```bash
|
|
177
284
|
# Check if xmllint is available
|
|
@@ -184,30 +291,57 @@ if command -v xmllint >/dev/null 2>&1; then
|
|
|
184
291
|
else
|
|
185
292
|
xml_export_line="XML Archive: export failed (non-blocking)"
|
|
186
293
|
fi
|
|
294
|
+
|
|
295
|
+
# Also export standalone pheromones.xml for cross-colony sharing
|
|
296
|
+
pher_result=$(bash .aether/aether-utils.sh pheromone-export-xml ".aether/exchange/pheromones.xml" 2>&1)
|
|
297
|
+
pher_ok=$(echo "$pher_result" | jq -r '.ok // false' 2>/dev/null)
|
|
298
|
+
if [[ "$pher_ok" == "true" ]]; then
|
|
299
|
+
pher_signal_count=$(jq '[.signals[] | select(.active != false)] | length' .aether/data/pheromones.json 2>/dev/null || echo "0")
|
|
300
|
+
pher_export_line="Signal Export: pheromones.xml (${pher_signal_count} signals, importable by other colonies)"
|
|
301
|
+
else
|
|
302
|
+
pher_export_line="Signal Export: failed (non-blocking)"
|
|
303
|
+
fi
|
|
304
|
+
|
|
305
|
+
# Export standalone queen-wisdom.xml for cross-colony wisdom sharing
|
|
306
|
+
wisdom_result=$(bash .aether/aether-utils.sh wisdom-export-xml ".aether/exchange/queen-wisdom.xml" 2>&1)
|
|
307
|
+
wisdom_ok=$(echo "$wisdom_result" | jq -r '.ok // false' 2>/dev/null)
|
|
308
|
+
if [[ "$wisdom_ok" == "true" ]]; then
|
|
309
|
+
wisdom_count=$(echo "$wisdom_result" | jq -r '.result.entries // 0' 2>/dev/null)
|
|
310
|
+
wisdom_export_line="Wisdom Export: queen-wisdom.xml (${wisdom_count} entries)"
|
|
311
|
+
else
|
|
312
|
+
wisdom_export_line="Wisdom Export: failed (non-blocking)"
|
|
313
|
+
fi
|
|
314
|
+
|
|
315
|
+
# Export standalone colony-registry.xml for lineage tracking
|
|
316
|
+
registry_result=$(bash .aether/aether-utils.sh registry-export-xml ".aether/exchange/colony-registry.xml" 2>&1)
|
|
317
|
+
registry_ok=$(echo "$registry_result" | jq -r '.ok // false' 2>/dev/null)
|
|
318
|
+
if [[ "$registry_ok" == "true" ]]; then
|
|
319
|
+
registry_count=$(echo "$registry_result" | jq -r '.result.colonies // 0' 2>/dev/null)
|
|
320
|
+
registry_export_line="Registry Export: colony-registry.xml (${registry_count} colonies)"
|
|
321
|
+
else
|
|
322
|
+
registry_export_line="Registry Export: failed (non-blocking)"
|
|
323
|
+
fi
|
|
187
324
|
else
|
|
188
325
|
xml_export_line="XML Archive: skipped (xmllint not available)"
|
|
326
|
+
pher_export_line="Signal Export: skipped (xmllint not available)"
|
|
327
|
+
wisdom_export_line="Wisdom Export: skipped (xmllint not available)"
|
|
328
|
+
registry_export_line="Registry Export: skipped (xmllint not available)"
|
|
189
329
|
fi
|
|
190
330
|
```
|
|
191
331
|
|
|
192
332
|
### Step 6: Display Result
|
|
193
333
|
|
|
194
|
-
**If visual_mode is true, render final swarm display:**
|
|
195
|
-
```bash
|
|
196
|
-
bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Colony sealed" "Colony" '{"read":3,"grep":0,"edit":2,"bash":3}' 100 "fungus_garden" 100
|
|
197
|
-
bash .aether/aether-utils.sh swarm-display-render "$seal_id"
|
|
198
|
-
```
|
|
199
|
-
|
|
200
334
|
Output:
|
|
201
335
|
```
|
|
202
336
|
🏺 ════════════════════════════════════════════════════
|
|
203
|
-
C R O W N E D A N T H I L L
|
|
337
|
+
C R O W N E D A N T H I L L v{colony_version}
|
|
204
338
|
══════════════════════════════════════════════════ 🏺
|
|
205
339
|
|
|
206
340
|
✅ Colony archived successfully!
|
|
207
341
|
|
|
208
342
|
👑 Goal: {goal (truncated to 60 chars)}
|
|
209
343
|
📍 Phases: {total_phases} completed
|
|
210
|
-
🏆 Milestone: Crowned Anthill
|
|
344
|
+
🏆 Milestone: Crowned Anthill v{colony_version}
|
|
211
345
|
|
|
212
346
|
📦 Archive Location: {archive_dir}
|
|
213
347
|
- COLONY_STATE.json
|
|
@@ -216,6 +350,9 @@ Output:
|
|
|
216
350
|
- flags.json (if existed)
|
|
217
351
|
- constraints.json (if existed)
|
|
218
352
|
{xml_export_line}
|
|
353
|
+
{pher_export_line}
|
|
354
|
+
{wisdom_export_line}
|
|
355
|
+
{registry_export_line}
|
|
219
356
|
|
|
220
357
|
🐜 The colony has reached its final form.
|
|
221
358
|
The anthill stands crowned and sealed.
|
|
@@ -235,6 +372,74 @@ If option 2 selected: run /ant:tunnels
|
|
|
235
372
|
If option 3 selected: display "Run /ant:lay-eggs to begin anew after clearing"
|
|
236
373
|
```
|
|
237
374
|
|
|
375
|
+
### Step 6.5: Commit Suggestion (Non-blocking)
|
|
376
|
+
|
|
377
|
+
After the ceremony, offer to commit all colony work.
|
|
378
|
+
|
|
379
|
+
**Gate check — skip silently if any fail:**
|
|
380
|
+
1. Not a git repo: `git rev-parse --git-dir 2>/dev/null` fails -> skip
|
|
381
|
+
2. Clean working tree: `git status --porcelain 2>/dev/null` is empty -> skip to Step 6.6
|
|
382
|
+
|
|
383
|
+
**If uncommitted changes exist:**
|
|
384
|
+
|
|
385
|
+
Generate a seal commit message:
|
|
386
|
+
```bash
|
|
387
|
+
seal_commit=$(bash .aether/aether-utils.sh generate-commit-message seal "$phases_completed" "$goal" "$colony_age_days" 2>/dev/null)
|
|
388
|
+
seal_message=$(echo "$seal_commit" | jq -r '.result.message // "aether-seal: colony sealed"')
|
|
389
|
+
seal_body=$(echo "$seal_commit" | jq -r '.result.body // ""')
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
Display the suggestion:
|
|
393
|
+
```
|
|
394
|
+
Commit suggestion:
|
|
395
|
+
$seal_message
|
|
396
|
+
$seal_body
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Prompt with AskUserQuestion (3 options):
|
|
400
|
+
1. **Commit with this message** — Run `git add -A && git commit -m "$seal_message" -m "$seal_body"`
|
|
401
|
+
2. **Edit message** — Ask user for their preferred message, then commit with that
|
|
402
|
+
3. **Skip** — Do not commit
|
|
403
|
+
|
|
404
|
+
If the user chooses option 1 or 2 and the commit succeeds, set `seal_committed = true`.
|
|
405
|
+
If the commit fails or user skips, set `seal_committed = false`.
|
|
406
|
+
|
|
407
|
+
**Error handling:** If `generate-commit-message` fails, fall back to message `"aether-seal: colony sealed"`. Never let commit suggestion failures stop the seal flow.
|
|
408
|
+
|
|
409
|
+
### Step 6.6: Push Suggestion (Non-blocking)
|
|
410
|
+
|
|
411
|
+
Only show if a commit was just made in Step 6.5 (`seal_committed == true`) OR if there are unpushed commits.
|
|
412
|
+
|
|
413
|
+
**Gate check — skip silently if any fail:**
|
|
414
|
+
1. Not a git repo -> skip
|
|
415
|
+
2. No remote configured: `git remote -v 2>/dev/null` is empty -> skip
|
|
416
|
+
|
|
417
|
+
**Check for unpushed commits:**
|
|
418
|
+
```bash
|
|
419
|
+
unpushed=$(git log --oneline @{u}..HEAD 2>/dev/null | wc -l | tr -d ' ')
|
|
420
|
+
```
|
|
421
|
+
If `unpushed == 0` and `seal_committed == false` -> skip
|
|
422
|
+
|
|
423
|
+
**If there are commits to push:**
|
|
424
|
+
|
|
425
|
+
Detect current branch and upstream status:
|
|
426
|
+
```bash
|
|
427
|
+
current_branch=$(git branch --show-current)
|
|
428
|
+
has_upstream=$(git rev-parse --abbrev-ref @{u} 2>/dev/null && echo "yes" || echo "no")
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Display: `Push {unpushed} commit(s) to remote? Branch: {current_branch}`
|
|
432
|
+
|
|
433
|
+
Prompt with AskUserQuestion (2 options):
|
|
434
|
+
1. **Push now** — If upstream exists: `git push`. If no upstream: `git push -u origin $current_branch`
|
|
435
|
+
2. **I'll push later** — Skip
|
|
436
|
+
|
|
437
|
+
Display result on success or skip.
|
|
438
|
+
|
|
439
|
+
**Error handling:** If push fails, display the error but do not stop the seal flow.
|
|
440
|
+
|
|
441
|
+
**Safety:** Never auto-push. Always require explicit user approval.
|
|
442
|
+
|
|
238
443
|
### Edge Cases
|
|
239
444
|
|
|
240
445
|
**If milestone is already "Sealed Chambers" but phases are complete:**
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<!-- Generated from .aether/commands/skill-create.yaml - DO NOT EDIT DIRECTLY -->
|
|
2
|
+
---
|
|
3
|
+
name: ant:skill-create
|
|
4
|
+
description: "Create a custom domain skill using Oracle mini-research and a guided wizard"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### Step -1: Normalize Arguments
|
|
8
|
+
|
|
9
|
+
Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
|
|
10
|
+
|
|
11
|
+
This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
|
|
12
|
+
|
|
13
|
+
You are the **Builder**. Create a custom domain skill by researching best practices and guiding the user through a wizard.
|
|
14
|
+
|
|
15
|
+
## Instructions
|
|
16
|
+
|
|
17
|
+
### Step 0: Parse Arguments
|
|
18
|
+
|
|
19
|
+
If `$normalized_args` is empty:
|
|
20
|
+
```
|
|
21
|
+
Usage: /ant:skill-create "<topic>"
|
|
22
|
+
|
|
23
|
+
Creates a custom domain skill using Oracle mini-research.
|
|
24
|
+
|
|
25
|
+
Examples:
|
|
26
|
+
/ant:skill-create "tailwind"
|
|
27
|
+
/ant:skill-create "react native"
|
|
28
|
+
/ant:skill-create "kubernetes"
|
|
29
|
+
```
|
|
30
|
+
Stop here.
|
|
31
|
+
|
|
32
|
+
### Step 1: Oracle Mini-Research
|
|
33
|
+
|
|
34
|
+
Launch a focused research session on the topic (5 iterations max):
|
|
35
|
+
1. Web search for best practices, common patterns, and gotchas
|
|
36
|
+
2. Codebase scan for existing usage of the technology
|
|
37
|
+
3. Compile findings into structured notes
|
|
38
|
+
|
|
39
|
+
### Step 2: Wizard Questions
|
|
40
|
+
|
|
41
|
+
Ask the user:
|
|
42
|
+
1. What aspect to focus on? (provide 2-4 options based on findings)
|
|
43
|
+
2. Experience level? (beginner / intermediate / advanced)
|
|
44
|
+
3. Any specific rules or constraints? (free text)
|
|
45
|
+
|
|
46
|
+
### Step 3: Generate SKILL.md
|
|
47
|
+
|
|
48
|
+
Create the skill file with proper frontmatter and body:
|
|
49
|
+
- name: derived from topic
|
|
50
|
+
- description: "Use when working with {topic}"
|
|
51
|
+
- type: domain
|
|
52
|
+
- domains: inferred from research
|
|
53
|
+
- agent_roles: [builder]
|
|
54
|
+
- detect_files / detect_packages: inferred from research
|
|
55
|
+
- Body: practical best-practices guide from research + wizard answers
|
|
56
|
+
|
|
57
|
+
### Step 4: Write and Verify
|
|
58
|
+
|
|
59
|
+
1. Write to `~/.aether/skills/domain/{name}/SKILL.md`
|
|
60
|
+
2. Run: `bash .aether/aether-utils.sh skill-parse-frontmatter ~/.aether/skills/domain/{name}/SKILL.md`
|
|
61
|
+
3. Run: `bash .aether/aether-utils.sh skill-cache-rebuild`
|
|
62
|
+
4. Show the generated skill to the user
|
|
63
|
+
5. Ask if they want to adjust anything
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
+
<!-- Generated from .aether/commands/status.yaml - DO NOT EDIT DIRECTLY -->
|
|
1
2
|
---
|
|
2
3
|
name: ant:status
|
|
3
4
|
description: "📈🐜🏘️🐜📈 Show colony status at a glance"
|
|
4
5
|
---
|
|
5
6
|
|
|
7
|
+
### Step -1: Normalize Arguments
|
|
8
|
+
|
|
9
|
+
Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
|
|
10
|
+
|
|
11
|
+
This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
|
|
12
|
+
|
|
6
13
|
You are the **Queen**. Show colony status.
|
|
7
14
|
|
|
8
15
|
## Instructions
|
|
9
16
|
|
|
10
17
|
### Step 0: Version Check (Non-blocking)
|
|
11
18
|
|
|
12
|
-
Run
|
|
19
|
+
Run: `bash .aether/aether-utils.sh version-check-cached 2>/dev/null || true`
|
|
13
20
|
|
|
14
21
|
If the command succeeds and the JSON result contains a non-empty string, display it as a one-line notice. Proceed regardless of outcome.
|
|
15
22
|
|
|
@@ -51,7 +58,7 @@ If `version` field is missing, "1.0", or "2.0":
|
|
|
51
58
|
|
|
52
59
|
### Step 1.5: Load State and Show Resumption Context
|
|
53
60
|
|
|
54
|
-
Run
|
|
61
|
+
Run: `bash .aether/aether-utils.sh load-state`
|
|
55
62
|
|
|
56
63
|
If successful and goal is not null:
|
|
57
64
|
1. Extract current_phase from state
|
|
@@ -75,22 +82,44 @@ Run: `bash .aether/aether-utils.sh unload-state` to release lock.
|
|
|
75
82
|
|
|
76
83
|
From state, extract:
|
|
77
84
|
|
|
85
|
+
### Step 2.4: Survey Freshness (Advisory)
|
|
86
|
+
|
|
87
|
+
Run:
|
|
88
|
+
```bash
|
|
89
|
+
survey_docs=$(ls -1 .aether/data/survey/*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
90
|
+
survey_latest=$(ls -t .aether/data/survey/*.md 2>/dev/null | head -1)
|
|
91
|
+
if [[ -n "$survey_latest" ]]; then
|
|
92
|
+
now_epoch=$(date +%s)
|
|
93
|
+
modified_epoch=$(stat -f %m "$survey_latest" 2>/dev/null || stat -c %Y "$survey_latest" 2>/dev/null || echo 0)
|
|
94
|
+
survey_age_days=$(( (now_epoch - modified_epoch) / 86400 ))
|
|
95
|
+
else
|
|
96
|
+
survey_age_days=-1
|
|
97
|
+
fi
|
|
98
|
+
echo "survey_docs=$survey_docs"
|
|
99
|
+
echo "survey_age_days=$survey_age_days"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Interpretation:
|
|
103
|
+
- If `survey_docs == 0`: `survey_status = "missing"`
|
|
104
|
+
- If `survey_age_days > 14`: `survey_status = "stale"`
|
|
105
|
+
- Otherwise: `survey_status = "fresh"`
|
|
106
|
+
|
|
78
107
|
### Step 2.5: Gather Dream Information
|
|
79
108
|
|
|
80
|
-
Run
|
|
109
|
+
Run: `ls -1 .aether/dreams/*.md 2>/dev/null | wc -l`
|
|
81
110
|
|
|
82
111
|
Capture:
|
|
83
112
|
- Dream count: number of .md files in .aether/dreams/
|
|
84
113
|
- Latest dream: most recent file by name (files are timestamped: YYYY-MM-DD-HHMM.md)
|
|
85
114
|
|
|
86
|
-
To get latest dream timestamp:
|
|
115
|
+
To get latest dream timestamp, Run:
|
|
87
116
|
```bash
|
|
88
117
|
ls -1 .aether/dreams/*.md 2>/dev/null | sort | tail -1 | sed 's/.*\/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)-\([0-9]\{4\}\).*/\1 \2/'
|
|
89
118
|
```
|
|
90
119
|
|
|
91
120
|
Format the timestamp as: YYYY-MM-DD HH:MM
|
|
92
121
|
|
|
93
|
-
|
|
122
|
+
|
|
94
123
|
|
|
95
124
|
**Phase info:**
|
|
96
125
|
- Current phase number: `current_phase`
|
|
@@ -117,6 +146,7 @@ Extract:
|
|
|
117
146
|
**Escalation state:**
|
|
118
147
|
Count escalated flags by checking for blocker flags with source "escalation":
|
|
119
148
|
|
|
149
|
+
Run:
|
|
120
150
|
```bash
|
|
121
151
|
escalated_count=$(bash .aether/aether-utils.sh flag-list --type blocker 2>/dev/null | jq '[.result.flags[] | select(.source == "escalation")] | length' 2>/dev/null || echo "0")
|
|
122
152
|
echo "escalated_count=$escalated_count"
|
|
@@ -137,7 +167,7 @@ From `memory.instincts`:
|
|
|
137
167
|
|
|
138
168
|
### Step 2.6: Detect Milestone
|
|
139
169
|
|
|
140
|
-
Run
|
|
170
|
+
Run: `bash .aether/aether-utils.sh milestone-detect`
|
|
141
171
|
|
|
142
172
|
Extract from JSON result:
|
|
143
173
|
- `milestone`: Current milestone name
|
|
@@ -145,6 +175,54 @@ Extract from JSON result:
|
|
|
145
175
|
- `phases_completed`: Number of completed phases
|
|
146
176
|
- `total_phases`: Total phases in plan
|
|
147
177
|
|
|
178
|
+
### Step 2.8: Load Memory Health Metrics
|
|
179
|
+
|
|
180
|
+
Run:
|
|
181
|
+
```bash
|
|
182
|
+
bash .aether/aether-utils.sh memory-metrics
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Extract from JSON result:
|
|
186
|
+
- wisdom.total
|
|
187
|
+
- pending.total
|
|
188
|
+
- recent_failures.count
|
|
189
|
+
- last_activity.queen_md_updated
|
|
190
|
+
- last_activity.learning_captured
|
|
191
|
+
|
|
192
|
+
Format timestamps for display (YYYY-MM-DD HH:MM).
|
|
193
|
+
|
|
194
|
+
### Step 2.7: Generate Progress Bars
|
|
195
|
+
|
|
196
|
+
Calculate progress metrics and generate visual bars.
|
|
197
|
+
|
|
198
|
+
Run:
|
|
199
|
+
```bash
|
|
200
|
+
current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
|
|
201
|
+
total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
|
|
202
|
+
|
|
203
|
+
# Calculate task progress in current phase
|
|
204
|
+
if [[ "$current_phase" -gt 0 && "$current_phase" -le "$total_phases" ]]; then
|
|
205
|
+
phase_idx=$((current_phase - 1))
|
|
206
|
+
tasks_completed=$(jq -r ".plan.phases[$phase_idx].tasks // [] | map(select(.status == \"completed\")) | length" .aether/data/COLONY_STATE.json)
|
|
207
|
+
tasks_total=$(jq -r ".plan.phases[$phase_idx].tasks // [] | length" .aether/data/COLONY_STATE.json)
|
|
208
|
+
phase_name=$(jq -r ".plan.phases[$phase_idx].name // \"Unnamed\"" .aether/data/COLONY_STATE.json)
|
|
209
|
+
else
|
|
210
|
+
tasks_completed=0
|
|
211
|
+
tasks_total=0
|
|
212
|
+
phase_name="No plan created"
|
|
213
|
+
fi
|
|
214
|
+
|
|
215
|
+
# Generate progress bars
|
|
216
|
+
phase_bar=$(bash .aether/aether-utils.sh generate-progress-bar "$current_phase" "$total_phases" 20)
|
|
217
|
+
task_bar=$(bash .aether/aether-utils.sh generate-progress-bar "$tasks_completed" "$tasks_total" 20)
|
|
218
|
+
|
|
219
|
+
echo "phase_bar=$phase_bar"
|
|
220
|
+
echo "task_bar=$task_bar"
|
|
221
|
+
echo "phase_name=$phase_name"
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Store `phase_bar`, `task_bar`, and `phase_name` values for display in Step 3.
|
|
225
|
+
|
|
148
226
|
### Step 3: Display
|
|
149
227
|
|
|
150
228
|
Output format:
|
|
@@ -154,12 +232,13 @@ Output format:
|
|
|
154
232
|
(o o) AETHER COLONY
|
|
155
233
|
| O | Status Report
|
|
156
234
|
`-`
|
|
157
|
-
|
|
235
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
158
236
|
|
|
159
237
|
👑 Goal: <goal (truncated to 60 chars)>
|
|
160
238
|
|
|
161
|
-
📍
|
|
162
|
-
|
|
239
|
+
📍 Progress
|
|
240
|
+
Phase: [████████░░░░░░░░░░░░] <N>/<M> phases
|
|
241
|
+
Tasks: [████████████████░░░░] <completed>/<total> tasks in Phase <N>
|
|
163
242
|
|
|
164
243
|
🎯 Focus: <focus_count> areas | 🚫 Avoid: <constraints_count> patterns
|
|
165
244
|
🧠 Instincts: <total> learned (<high_confidence> strong)
|
|
@@ -168,19 +247,23 @@ Output format:
|
|
|
168
247
|
⚠️ Escalated: {escalated_count} task(s) awaiting your decision
|
|
169
248
|
{end if}
|
|
170
249
|
🏆 Milestone: <milestone> (<version>)
|
|
250
|
+
|
|
171
251
|
💭 Dreams: <dream_count> recorded (latest: <latest_dream>)
|
|
252
|
+
🗺️ Survey: <survey_docs> docs (<survey_age_days>d old, <fresh|stale|missing>)
|
|
253
|
+
|
|
254
|
+
📚 Memory Health
|
|
255
|
+
┌─────────────────┬────────┬─────────────────────────────┐
|
|
256
|
+
│ Metric │ Count │ Last Updated │
|
|
257
|
+
├─────────────────┼────────┼─────────────────────────────┤
|
|
258
|
+
│ Wisdom Entries │ {wisdom_total:>6} │ {queen_updated} │
|
|
259
|
+
│ Pending Promos │ {pending_total:>6} │ {learning_updated} │
|
|
260
|
+
│ Recent Failures │ {failures_count:>6} │ {last_failure} │
|
|
261
|
+
└─────────────────┴────────┴─────────────────────────────┘
|
|
172
262
|
|
|
173
263
|
State: <state>
|
|
174
|
-
Next: <suggested_command> <phase_context>
|
|
175
264
|
```
|
|
176
265
|
|
|
177
|
-
|
|
178
|
-
- READY → `Next: /ant:build 3 Phase 3: Add Authentication`
|
|
179
|
-
- EXECUTING → `Next: /ant:continue Phase 3: Add Authentication`
|
|
180
|
-
- PLANNING → `Next: /ant:plan`
|
|
181
|
-
- IDLE → `Next: /ant:init`
|
|
182
|
-
|
|
183
|
-
Look up the phase name from `plan.phases[current_phase].name` and append it.
|
|
266
|
+
Use the `phase_bar` and `task_bar` values computed in Step 2.7 for the actual bar characters and counts.
|
|
184
267
|
|
|
185
268
|
**If instincts exist, also show top 3:**
|
|
186
269
|
```
|
|
@@ -190,23 +273,35 @@ Look up the phase name from `plan.phases[current_phase].name` and append it.
|
|
|
190
273
|
[0.7] 🐜 debugging: Trace to root cause first
|
|
191
274
|
```
|
|
192
275
|
|
|
193
|
-
**
|
|
276
|
+
**Dream display:**
|
|
277
|
+
- If no dreams exist: `💭 Dreams: None recorded`
|
|
278
|
+
- If dreams exist: `💭 Dreams: <count> recorded (latest: YYYY-MM-DD HH:MM)`
|
|
279
|
+
|
|
280
|
+
**Memory Health display:**
|
|
281
|
+
- If memory-metrics returns empty/null values, show:
|
|
282
|
+
```
|
|
283
|
+
📚 Memory Health
|
|
284
|
+
No memory data available. Colony wisdom will accumulate as you complete phases.
|
|
285
|
+
```
|
|
194
286
|
|
|
195
|
-
Calculate `next_phase = current_phase + 1` from state.
|
|
196
287
|
|
|
197
|
-
Generate the suggested command based on colony state:
|
|
198
|
-
- IDLE -> `/ant:init`
|
|
199
|
-
- READY -> `/ant:build {next_phase}` (e.g., if current_phase is 2, output `/ant:build 3`)
|
|
200
|
-
- EXECUTING -> `/ant:continue`
|
|
201
|
-
- PLANNING -> `/ant:plan`
|
|
202
288
|
|
|
203
|
-
The output must be a copy-pasteable command with real numbers, not placeholders.
|
|
204
289
|
|
|
205
|
-
**Dream display:**
|
|
206
|
-
- If no dreams exist: `💭 Dreams: None recorded`
|
|
207
|
-
- If dreams exist: `💭 Dreams: <count> recorded (latest: YYYY-MM-DD HH:MM)`
|
|
208
290
|
|
|
209
291
|
**Edge cases:**
|
|
210
|
-
- No phases yet:
|
|
211
|
-
- No tasks in phase:
|
|
292
|
+
- No phases yet: show `[░░░░░░░░░░░░░░░░░░░░] 0/0 phases`
|
|
293
|
+
- No tasks in phase: show `[░░░░░░░░░░░░░░░░░░░░] 0/0 tasks in Phase 0`
|
|
212
294
|
- No constraints file: "Constraints: 0 focus, 0 avoid"
|
|
295
|
+
|
|
296
|
+
**At the end of the output, generate the Next Up block:**
|
|
297
|
+
|
|
298
|
+
Run:
|
|
299
|
+
```bash
|
|
300
|
+
state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
|
|
301
|
+
current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
|
|
302
|
+
total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
|
|
303
|
+
|
|
304
|
+
bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
This auto-generates state-based recommendations (IDLE → init, READY → build, EXECUTING → continue, PLANNING → plan).
|