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
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: "ant:preferences"
|
|
2
|
+
description: "Add or list user preferences in hub QUEEN.md"
|
|
3
|
+
description_opencode: "📝🐜👑🐜📝 Add or list user preferences in hub QUEEN.md"
|
|
4
|
+
body: |
|
|
5
|
+
You are the **Queen**. Manage user preferences in the hub `~/.aether/QUEEN.md`.
|
|
6
|
+
|
|
7
|
+
## Instructions
|
|
8
|
+
|
|
9
|
+
The input is: `{{ARGUMENTS}}`
|
|
10
|
+
|
|
11
|
+
### Step 1: Validate
|
|
12
|
+
|
|
13
|
+
If `{{ARGUMENTS}}` empty -> show usage: `/ant:preferences "preference text"` or `/ant:preferences --list`, stop.
|
|
14
|
+
|
|
15
|
+
### Step 2: Route
|
|
16
|
+
|
|
17
|
+
- `{{ARGUMENTS}}` is `--list` -> **List mode**
|
|
18
|
+
- Otherwise -> **Add mode**
|
|
19
|
+
|
|
20
|
+
### List Mode
|
|
21
|
+
|
|
22
|
+
Read `~/.aether/QUEEN.md`. If missing -> "No hub QUEEN.md found. Run /ant:init to create one.", stop.
|
|
23
|
+
|
|
24
|
+
Find the `## User Preferences` section (with or without emoji). Extract bullet lines (`- ...`) between that heading and the next `---`.
|
|
25
|
+
|
|
26
|
+
If user-added bullets exist, output each. Otherwise:
|
|
27
|
+
```
|
|
28
|
+
No user preferences set yet.
|
|
29
|
+
Add one with: /ant:preferences "your preference"
|
|
30
|
+
```
|
|
31
|
+
Stop.
|
|
32
|
+
|
|
33
|
+
### Add Mode
|
|
34
|
+
|
|
35
|
+
Set `PREF` to `{{ARGUMENTS}}` (strip surrounding quotes).
|
|
36
|
+
If length > 500 chars -> "Preference too long (max 500 chars)", stop.
|
|
37
|
+
|
|
38
|
+
Read `~/.aether/QUEEN.md`. If missing -> "No hub QUEEN.md found. Run /ant:init to create one.", stop.
|
|
39
|
+
|
|
40
|
+
**If `## User Preferences` section exists** (with or without emoji):
|
|
41
|
+
1. Remove `*No user preferences recorded yet.*` placeholder if present
|
|
42
|
+
2. Append `- $PREF` at end of section (before next `---`)
|
|
43
|
+
|
|
44
|
+
**If section missing** (migration case):
|
|
45
|
+
1. Insert before `## Evolution Log` (with or without emoji):
|
|
46
|
+
```
|
|
47
|
+
## User Preferences
|
|
48
|
+
|
|
49
|
+
- $PREF
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Update METADATA comment: increment `stats.total_user_prefs` by 1.
|
|
56
|
+
|
|
57
|
+
### Confirm
|
|
58
|
+
|
|
59
|
+
Output (2 lines, no banners):
|
|
60
|
+
```
|
|
61
|
+
Preference saved to hub QUEEN.md
|
|
62
|
+
"$PREF"
|
|
63
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
name: "ant:quick"
|
|
2
|
+
description: "Quick scout query — fast answers without build ceremony"
|
|
3
|
+
description_opencode: "🔍🐜⚡🐜🔍 Quick scout query — fast answers without build ceremony"
|
|
4
|
+
body: |
|
|
5
|
+
You are the **Queen**. Execute `/ant:quick` — a lightweight scout mission.
|
|
6
|
+
|
|
7
|
+
The query is: `{{ARGUMENTS}}`
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Quick, focused answers to questions about the codebase, patterns, or implementation
|
|
12
|
+
details. No build ceremony, no state changes, no verification waves.
|
|
13
|
+
|
|
14
|
+
## Instructions
|
|
15
|
+
|
|
16
|
+
### Step 1: Validate Arguments
|
|
17
|
+
|
|
18
|
+
If `{{ARGUMENTS}}` is empty:
|
|
19
|
+
```
|
|
20
|
+
Usage: /ant:quick "<question>"
|
|
21
|
+
|
|
22
|
+
Examples:
|
|
23
|
+
/ant:quick "how does the pheromone system work?"
|
|
24
|
+
/ant:quick "find all uses of acquire_lock"
|
|
25
|
+
/ant:quick "what tests cover midden-write?"
|
|
26
|
+
/ant:quick "show me the colony-prime token budget logic"
|
|
27
|
+
```
|
|
28
|
+
Stop here.
|
|
29
|
+
|
|
30
|
+
### Step 2: Generate Scout Name
|
|
31
|
+
|
|
32
|
+
{{TOOL_PREFIX "Naming scout..."}}
|
|
33
|
+
```bash
|
|
34
|
+
bash .aether/aether-utils.sh generate-ant-name "scout"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Capture the output as `scout_name`.
|
|
38
|
+
|
|
39
|
+
### Step 3: Spawn Scout
|
|
40
|
+
|
|
41
|
+
Display:
|
|
42
|
+
```
|
|
43
|
+
━━━ Quick Scout ━━━
|
|
44
|
+
Spawning {scout_name} — {query truncated to 50 chars}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
{{TOOL_PREFIX "Dispatching scout..."}}
|
|
48
|
+
```bash
|
|
49
|
+
bash .aether/aether-utils.sh spawn-log "Queen" "scout" "{scout_name}" "Quick query: {query}"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
{{#claude}}
|
|
53
|
+
Spawn a Scout agent (using Task tool with subagent_type="aether-scout") with this prompt:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
You are {scout_name}, a Scout Ant on a quick mission.
|
|
57
|
+
|
|
58
|
+
Query: {query from ARGUMENTS}
|
|
59
|
+
|
|
60
|
+
Work:
|
|
61
|
+
1. Search the codebase to answer the query
|
|
62
|
+
2. Use Grep, Glob, and Read tools to find relevant code
|
|
63
|
+
3. Provide a clear, focused answer
|
|
64
|
+
4. Include file paths and line numbers for key findings
|
|
65
|
+
|
|
66
|
+
Keep your answer concise and actionable. This is a quick mission —
|
|
67
|
+
don't explore exhaustively, focus on the most relevant answer.
|
|
68
|
+
|
|
69
|
+
Return your findings as a clear text answer (not JSON).
|
|
70
|
+
```
|
|
71
|
+
{{/claude}}
|
|
72
|
+
{{#opencode}}
|
|
73
|
+
Investigate the query directly using available tools (Grep, Glob, Read).
|
|
74
|
+
Search the codebase and provide a clear, focused answer with file paths and line numbers for key findings.
|
|
75
|
+
Keep your answer concise and actionable.
|
|
76
|
+
{{/opencode}}
|
|
77
|
+
|
|
78
|
+
### Step 4: Display Results
|
|
79
|
+
|
|
80
|
+
{{#claude}}
|
|
81
|
+
Display the Scout's answer directly to the user.
|
|
82
|
+
{{/claude}}
|
|
83
|
+
{{#opencode}}
|
|
84
|
+
Display your findings directly to the user.
|
|
85
|
+
{{/opencode}}
|
|
86
|
+
|
|
87
|
+
{{TOOL_PREFIX "Recording scout completion..."}}
|
|
88
|
+
```bash
|
|
89
|
+
bash .aether/aether-utils.sh spawn-complete "{scout_name}" "completed" "Quick query answered"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Step 5: Update Session (lightweight)
|
|
93
|
+
|
|
94
|
+
{{TOOL_PREFIX "Updating session..."}}
|
|
95
|
+
```bash
|
|
96
|
+
bash .aether/aether-utils.sh session-update "/ant:quick" "" "Quick query: {query truncated to 60 chars}" 2>/dev/null || true
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**NOTE:** This command does NOT:
|
|
100
|
+
- Modify COLONY_STATE.json
|
|
101
|
+
- Advance phases
|
|
102
|
+
- Create checkpoints
|
|
103
|
+
- Spawn watchers or chaos ants
|
|
104
|
+
- Run verification
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
name: "ant:redirect"
|
|
2
|
+
description: "Emit REDIRECT signal to warn colony away from patterns"
|
|
3
|
+
description_opencode: "⚠️🐜🚧🐜⚠️ Emit REDIRECT signal to warn colony away from patterns"
|
|
4
|
+
body: |
|
|
5
|
+
{{#claude}}
|
|
6
|
+
You are the **Queen**. Emit a REDIRECT pheromone signal.
|
|
7
|
+
{{/claude}}
|
|
8
|
+
{{#opencode}}
|
|
9
|
+
You are the **Queen**. Add an AVOID constraint.
|
|
10
|
+
{{/opencode}}
|
|
11
|
+
|
|
12
|
+
## Instructions
|
|
13
|
+
|
|
14
|
+
The pattern to avoid is: `{{ARGUMENTS}}`
|
|
15
|
+
|
|
16
|
+
### Step 1: Validate
|
|
17
|
+
|
|
18
|
+
If `{{ARGUMENTS}}` empty -> show usage: `/ant:redirect <pattern to avoid>`, stop.
|
|
19
|
+
If content > 500 chars -> "Redirect content too long (max 500 chars)", stop.
|
|
20
|
+
|
|
21
|
+
{{#claude}}
|
|
22
|
+
Parse optional flags from `$ARGUMENTS`:
|
|
23
|
+
- `--ttl <value>`: signal lifetime (e.g., `2h`, `1d`, `7d`). Default: `phase_end`.
|
|
24
|
+
- Strip flags from content before using it as the pattern.
|
|
25
|
+
{{/claude}}
|
|
26
|
+
|
|
27
|
+
### Step 2: Write Signal
|
|
28
|
+
|
|
29
|
+
Read `.aether/data/COLONY_STATE.json`.
|
|
30
|
+
If `goal: null` -> "No colony initialized.", stop.
|
|
31
|
+
|
|
32
|
+
{{#claude}}
|
|
33
|
+
{{TOOL_PREFIX "Setting colony redirect..."}}
|
|
34
|
+
```bash
|
|
35
|
+
bash .aether/aether-utils.sh pheromone-write REDIRECT "<content>" --strength 0.9 --reason "User warned colony away from pattern" --ttl <ttl>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Parse the returned JSON for the signal ID.
|
|
39
|
+
|
|
40
|
+
### Step 2.5: Update Context Document
|
|
41
|
+
|
|
42
|
+
{{TOOL_PREFIX "Updating context document..."}}
|
|
43
|
+
```bash
|
|
44
|
+
bash .aether/aether-utils.sh context-update constraint redirect "<content>" "user" 2>/dev/null || true
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 3: Get Active Counts
|
|
48
|
+
|
|
49
|
+
{{TOOL_PREFIX "Counting active signals..."}}
|
|
50
|
+
```bash
|
|
51
|
+
bash .aether/aether-utils.sh pheromone-count
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Step 4: Confirm
|
|
55
|
+
|
|
56
|
+
Output (3-4 lines, no banners):
|
|
57
|
+
```
|
|
58
|
+
REDIRECT signal emitted
|
|
59
|
+
Avoid: "<content truncated to 60 chars>"
|
|
60
|
+
Strength: 0.9 | Expires: <phase end or ttl value>
|
|
61
|
+
Active signals: <focus_count> FOCUS, <redirect_count> REDIRECT, <feedback_count> FEEDBACK
|
|
62
|
+
```
|
|
63
|
+
{{/claude}}
|
|
64
|
+
{{#opencode}}
|
|
65
|
+
Read `.aether/data/constraints.json`. If file doesn't exist, create it with:
|
|
66
|
+
```json
|
|
67
|
+
{"version": "1.0", "focus": [], "constraints": []}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Generate constraint ID: `c_<unix_timestamp_ms>`
|
|
71
|
+
|
|
72
|
+
Append to `constraints` array:
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"id": "<generated_id>",
|
|
76
|
+
"type": "AVOID",
|
|
77
|
+
"content": "<pattern to avoid>",
|
|
78
|
+
"source": "user:redirect",
|
|
79
|
+
"created_at": "<ISO-8601 timestamp>"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
If `constraints` array exceeds 10 entries, remove the oldest entries to keep only 10.
|
|
84
|
+
|
|
85
|
+
Write constraints.json.
|
|
86
|
+
|
|
87
|
+
**Write pheromone signal and update context:**
|
|
88
|
+
```bash
|
|
89
|
+
bash .aether/aether-utils.sh pheromone-write REDIRECT "$normalized_args" --strength 0.9 --reason "User warned colony away from pattern" 2>/dev/null || true
|
|
90
|
+
bash .aether/aether-utils.sh context-update constraint redirect "$normalized_args" "user" 2>/dev/null || true
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Step 3: Confirm
|
|
94
|
+
|
|
95
|
+
Output header:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
⚠️🐜🚧🐜⚠️ ═══════════════════════════════════════════════════
|
|
99
|
+
R E D I R E C T S I G N A L
|
|
100
|
+
═══════════════════════════════════════════════════ ⚠️🐜🚧🐜⚠️
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Then output:
|
|
104
|
+
```
|
|
105
|
+
🚫 REDIRECT signal emitted
|
|
106
|
+
|
|
107
|
+
Avoid: "{content preview}"
|
|
108
|
+
|
|
109
|
+
🐜 Colony warned away from this pattern.
|
|
110
|
+
```
|
|
111
|
+
{{/opencode}}
|
|
112
|
+
|
|
113
|
+
{{#claude}}
|
|
114
|
+
### Step 5: Next Up
|
|
115
|
+
|
|
116
|
+
Generate the state-based Next Up block by running using the Bash tool with description "Generating Next Up suggestions...":
|
|
117
|
+
```bash
|
|
118
|
+
state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
|
|
119
|
+
current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
|
|
120
|
+
total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
|
|
121
|
+
bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
|
|
122
|
+
```
|
|
123
|
+
{{/claude}}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
name: "ant:resume-colony"
|
|
2
|
+
description: "🚦➡️🐜💨💨 Resume colony from saved session - restores all state"
|
|
3
|
+
body_claude: |
|
|
4
|
+
You are the **Queen Ant Colony**. Restore state from a paused session.
|
|
5
|
+
|
|
6
|
+
## Instructions
|
|
7
|
+
|
|
8
|
+
Parse `$ARGUMENTS`:
|
|
9
|
+
- If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
|
|
10
|
+
- Otherwise: set `visual_mode = true`
|
|
11
|
+
|
|
12
|
+
### Step 0: Initialize Visual Mode (if enabled)
|
|
13
|
+
|
|
14
|
+
If `visual_mode` is true, run using the Bash tool with description "Initializing resume display...":
|
|
15
|
+
### Step 0.5: Version Check (Non-blocking)
|
|
16
|
+
|
|
17
|
+
Run using the Bash tool with description "Checking colony version...": `bash .aether/aether-utils.sh version-check-cached 2>/dev/null || true`
|
|
18
|
+
|
|
19
|
+
If the command succeeds and the JSON result contains a non-empty string, display it as a one-line notice. Proceed regardless of outcome.
|
|
20
|
+
|
|
21
|
+
### Step 1: Load State and Validate
|
|
22
|
+
|
|
23
|
+
Run using the Bash tool with description "Restoring colony session...": `bash .aether/aether-utils.sh load-state`
|
|
24
|
+
|
|
25
|
+
If successful:
|
|
26
|
+
1. Parse state from result
|
|
27
|
+
2. If goal is null: Show "No colony state found..." message and stop
|
|
28
|
+
3. If `milestone` == `"Crowned Anthill"`: Show "This colony has been sealed. Start a new colony with `/ant:init \"new goal\"`." and stop
|
|
29
|
+
4. Check if paused flag is true - if not, note "Colony was not paused, but resuming anyway"
|
|
30
|
+
5. Extract all state fields for display
|
|
31
|
+
|
|
32
|
+
Keep state loaded (don't unload yet) - we'll need it for the full display.
|
|
33
|
+
|
|
34
|
+
### Step 2: Compute Active Signals
|
|
35
|
+
|
|
36
|
+
Run using the Bash tool with description "Loading active pheromones...":
|
|
37
|
+
```bash
|
|
38
|
+
bash .aether/aether-utils.sh pheromone-read
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Use `.result.signals` as the active signal list (already decay-filtered by runtime logic).
|
|
42
|
+
If empty, treat as "no active pheromones."
|
|
43
|
+
|
|
44
|
+
### Step 2.5: Load Survey Context (Advisory)
|
|
45
|
+
|
|
46
|
+
Run using the Bash tool with description "Loading survey context...":
|
|
47
|
+
```bash
|
|
48
|
+
survey_docs=$(ls -1 .aether/data/survey/*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
49
|
+
survey_latest=$(ls -t .aether/data/survey/*.md 2>/dev/null | head -1)
|
|
50
|
+
if [[ -n "$survey_latest" ]]; then
|
|
51
|
+
now_epoch=$(date +%s)
|
|
52
|
+
modified_epoch=$(stat -f %m "$survey_latest" 2>/dev/null || stat -c %Y "$survey_latest" 2>/dev/null || echo 0)
|
|
53
|
+
survey_age_days=$(( (now_epoch - modified_epoch) / 86400 ))
|
|
54
|
+
else
|
|
55
|
+
survey_age_days=-1
|
|
56
|
+
fi
|
|
57
|
+
echo "survey_docs=$survey_docs"
|
|
58
|
+
echo "survey_age_days=$survey_age_days"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Interpretation:
|
|
62
|
+
- `survey_docs == 0` => survey missing
|
|
63
|
+
- `survey_age_days > 14` => survey stale
|
|
64
|
+
- otherwise survey fresh
|
|
65
|
+
|
|
66
|
+
### Step 3: Display Restored State
|
|
67
|
+
|
|
68
|
+
**Note:** Other ant commands (`/ant:status`, `/ant:build`, `/ant:plan`, `/ant:continue`) also show brief resumption context automatically. This full resume provides complete state restoration for explicit session recovery.
|
|
69
|
+
|
|
70
|
+
Output header:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
🚦➡️🐜💨💨 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
74
|
+
C O L O N Y R E S U M E D
|
|
75
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🚦➡️🐜💨💨
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Read the .aether/HANDOFF.md for context about what was happening, then display:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
+=====================================================+
|
|
82
|
+
| AETHER COLONY :: RESUMED |
|
|
83
|
+
+=====================================================+
|
|
84
|
+
|
|
85
|
+
Goal: "<goal>"
|
|
86
|
+
State: <state>
|
|
87
|
+
Session: <session_id>
|
|
88
|
+
Phase: <current_phase>
|
|
89
|
+
|
|
90
|
+
ACTIVE PHEROMONES
|
|
91
|
+
{TYPE padded to 10 chars} [{bar of 20 chars using filled/empty}] {current_strength:.2f}
|
|
92
|
+
"{content}"
|
|
93
|
+
|
|
94
|
+
Where the bar uses round(current_strength * 20) filled characters and spaces for the remainder.
|
|
95
|
+
|
|
96
|
+
If no active signals: (no active pheromones)
|
|
97
|
+
|
|
98
|
+
PHASE PROGRESS
|
|
99
|
+
Phase <id>: <name> [<status>]
|
|
100
|
+
(list all phases from plan.phases)
|
|
101
|
+
|
|
102
|
+
SURVEY CONTEXT
|
|
103
|
+
Docs: <survey_docs>
|
|
104
|
+
Age: <survey_age_days> days
|
|
105
|
+
Status: <fresh|stale|missing>
|
|
106
|
+
Recommendation: <if missing or stale, suggest /ant:colonize --force-resurvey>
|
|
107
|
+
|
|
108
|
+
CONTEXT FROM HANDOFF
|
|
109
|
+
<summarize what was happening from .aether/HANDOFF.md>
|
|
110
|
+
|
|
111
|
+
NEXT ACTIONS
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Route to next action based on state:
|
|
115
|
+
- If state is `READY` and there's a pending phase -> suggest `/ant:build <phase>`
|
|
116
|
+
- If state is `EXECUTING` -> note that a build was interrupted, suggest restarting with `/ant:build <phase>`
|
|
117
|
+
- If state is `PLANNING` -> note that planning was interrupted, suggest `/ant:plan`
|
|
118
|
+
- Otherwise -> suggest `/ant:status` for full overview
|
|
119
|
+
|
|
120
|
+
### Step 6: Clear Paused State and Cleanup
|
|
121
|
+
|
|
122
|
+
Use Write tool to update COLONY_STATE.json:
|
|
123
|
+
- Remove or set to false: `"paused": false`
|
|
124
|
+
- Remove: `"paused_at"` field
|
|
125
|
+
- Update last_updated timestamp
|
|
126
|
+
- Add event: `{timestamp, type: "colony_resumed", worker: "resume", details: "Session resumed"}`
|
|
127
|
+
|
|
128
|
+
Use Bash tool with description "Cleaning up handoff file..." to remove HANDOFF.md: `rm -f .aether/HANDOFF.md`
|
|
129
|
+
|
|
130
|
+
Run using the Bash tool with description "Releasing colony lock...": `bash .aether/aether-utils.sh unload-state` to release lock.
|
|
131
|
+
|
|
132
|
+
### Step 7: Next Up
|
|
133
|
+
|
|
134
|
+
Generate the state-based Next Up block by running using the Bash tool with description "Generating Next Up suggestions...":
|
|
135
|
+
```bash
|
|
136
|
+
state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
|
|
137
|
+
current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
|
|
138
|
+
total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
|
|
139
|
+
bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Auto-Recovery Pattern Reference
|
|
145
|
+
|
|
146
|
+
The colony uses a tiered auto-recovery pattern to maintain context across session boundaries:
|
|
147
|
+
|
|
148
|
+
### Format Tiers
|
|
149
|
+
|
|
150
|
+
| Context | Format | When Used |
|
|
151
|
+
|---------|--------|-----------|
|
|
152
|
+
| Brief | `🔄 Resuming: Phase X - Name` | Action commands (build, plan, continue) |
|
|
153
|
+
| Extended | Brief + last activity timestamp | Status command |
|
|
154
|
+
| Full | Complete state with pheromones, workers, context | resume-colony command |
|
|
155
|
+
|
|
156
|
+
### Brief Format (Action Commands)
|
|
157
|
+
|
|
158
|
+
Used by `/ant:build`, `/ant:plan`, `/ant:continue`:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
🔄 Resuming: Phase <current_phase> - <phase_name>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Provides minimal orientation before executing the command's primary function.
|
|
165
|
+
|
|
166
|
+
### Extended Format (Status Command)
|
|
167
|
+
|
|
168
|
+
Used by `/ant:status` Step 1.5:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
🔄 Resuming: Phase <current_phase> - <phase_name>
|
|
172
|
+
Last activity: <last_event_timestamp>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Adds temporal context to help gauge session staleness.
|
|
176
|
+
|
|
177
|
+
### Full Format (Resume-Colony)
|
|
178
|
+
|
|
179
|
+
Used by `/ant:resume-colony`:
|
|
180
|
+
|
|
181
|
+
- Complete header with ASCII art
|
|
182
|
+
- Goal, state, session ID, phase
|
|
183
|
+
- Active pheromones with strength bars
|
|
184
|
+
- Worker status by caste
|
|
185
|
+
- Phase progress for all phases
|
|
186
|
+
- Handoff context summary
|
|
187
|
+
- Next action routing
|
|
188
|
+
|
|
189
|
+
### Implementation Notes
|
|
190
|
+
|
|
191
|
+
1. **State Source:** All formats read from `.aether/data/COLONY_STATE.json`
|
|
192
|
+
2. **Phase Name:** Extracted from `plan.phases[current_phase - 1].name`
|
|
193
|
+
3. **Last Activity:** Parsed from the last entry in `events` array
|
|
194
|
+
4. **Edge Cases:** Handle missing phase names, empty events, phase 0
|
|
195
|
+
|
|
196
|
+
body_opencode: |
|
|
197
|
+
You are the **Queen Ant Colony**. Restore state from a paused session.
|
|
198
|
+
|
|
199
|
+
## Instructions
|
|
200
|
+
|
|
201
|
+
Parse `$normalized_args`:
|
|
202
|
+
- If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
|
|
203
|
+
- Otherwise: set `visual_mode = true`
|
|
204
|
+
|
|
205
|
+
### Step 0.5: Version Check (Non-blocking)
|
|
206
|
+
|
|
207
|
+
Run using the Bash tool: `bash .aether/aether-utils.sh version-check 2>/dev/null || true`
|
|
208
|
+
|
|
209
|
+
If the command succeeds and the JSON result contains a non-empty string, display it as a one-line notice. Proceed regardless of outcome.
|
|
210
|
+
|
|
211
|
+
### Step 1: Load State and Validate
|
|
212
|
+
|
|
213
|
+
Run using Bash tool: `bash .aether/aether-utils.sh load-state`
|
|
214
|
+
|
|
215
|
+
If successful:
|
|
216
|
+
1. Parse state from result
|
|
217
|
+
2. If goal is null: Show "No colony state found..." message and stop
|
|
218
|
+
3. If `milestone` == `"Crowned Anthill"`: Show "This colony has been sealed. Start a new colony with `/ant:init \"new goal\"`." and stop
|
|
219
|
+
4. Check if paused flag is true - if not, note "Colony was not paused, but resuming anyway"
|
|
220
|
+
5. Extract all state fields for display
|
|
221
|
+
|
|
222
|
+
Keep state loaded (don't unload yet) - we'll need it for the full display.
|
|
223
|
+
|
|
224
|
+
### Step 2: Compute Active Signals
|
|
225
|
+
|
|
226
|
+
Run using the Bash tool:
|
|
227
|
+
```bash
|
|
228
|
+
bash .aether/aether-utils.sh pheromone-read
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Use `.result.signals` as the active signal list (already decay-filtered by runtime logic).
|
|
232
|
+
If empty, treat as "no active pheromones."
|
|
233
|
+
|
|
234
|
+
### Step 2.5: Load Survey Context (Advisory)
|
|
235
|
+
|
|
236
|
+
Run:
|
|
237
|
+
```bash
|
|
238
|
+
survey_docs=$(ls -1 .aether/data/survey/*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
239
|
+
survey_latest=$(ls -t .aether/data/survey/*.md 2>/dev/null | head -1)
|
|
240
|
+
if [[ -n "$survey_latest" ]]; then
|
|
241
|
+
now_epoch=$(date +%s)
|
|
242
|
+
modified_epoch=$(stat -f %m "$survey_latest" 2>/dev/null || stat -c %Y "$survey_latest" 2>/dev/null || echo 0)
|
|
243
|
+
survey_age_days=$(( (now_epoch - modified_epoch) / 86400 ))
|
|
244
|
+
else
|
|
245
|
+
survey_age_days=-1
|
|
246
|
+
fi
|
|
247
|
+
echo "survey_docs=$survey_docs"
|
|
248
|
+
echo "survey_age_days=$survey_age_days"
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Interpretation:
|
|
252
|
+
- `survey_docs == 0` => survey missing
|
|
253
|
+
- `survey_age_days > 14` => survey stale
|
|
254
|
+
- otherwise survey fresh
|
|
255
|
+
|
|
256
|
+
### Step 3: Display Restored State
|
|
257
|
+
|
|
258
|
+
**Note:** Other ant commands (`/ant:status`, `/ant:build`, `/ant:plan`, `/ant:continue`) also show brief resumption context automatically. This full resume provides complete state restoration for explicit session recovery.
|
|
259
|
+
|
|
260
|
+
Output header:
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
🚦➡️🐜💨💨 ═══════════════════════════════════════════════════
|
|
264
|
+
C O L O N Y R E S U M E D
|
|
265
|
+
═══════════════════════════════════════════════════ 🚦➡️🐜💨💨
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Read the .aether/HANDOFF.md for context about what was happening, then display:
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
+=====================================================+
|
|
272
|
+
| AETHER COLONY :: RESUMED |
|
|
273
|
+
+=====================================================+
|
|
274
|
+
|
|
275
|
+
Goal: "<goal>"
|
|
276
|
+
State: <state>
|
|
277
|
+
Session: <session_id>
|
|
278
|
+
Phase: <current_phase>
|
|
279
|
+
|
|
280
|
+
ACTIVE PHEROMONES
|
|
281
|
+
{TYPE padded to 10 chars} [{bar of 20 chars using filled/empty}] {current_strength:.2f}
|
|
282
|
+
"{content}"
|
|
283
|
+
|
|
284
|
+
Where the bar uses round(current_strength * 20) filled characters and spaces for the remainder.
|
|
285
|
+
|
|
286
|
+
If no active signals: (no active pheromones)
|
|
287
|
+
|
|
288
|
+
PHASE PROGRESS
|
|
289
|
+
Phase <id>: <name> [<status>]
|
|
290
|
+
(list all phases from plan.phases)
|
|
291
|
+
|
|
292
|
+
SURVEY CONTEXT
|
|
293
|
+
Docs: <survey_docs>
|
|
294
|
+
Age: <survey_age_days> days
|
|
295
|
+
Status: <fresh|stale|missing>
|
|
296
|
+
Recommendation: <if missing or stale, suggest /ant:colonize --force-resurvey>
|
|
297
|
+
|
|
298
|
+
CONTEXT FROM HANDOFF
|
|
299
|
+
<summarize what was happening from .aether/HANDOFF.md>
|
|
300
|
+
|
|
301
|
+
NEXT ACTIONS
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Route to next action based on state:
|
|
305
|
+
- If state is `READY` and there's a pending phase -> suggest `/ant:build <phase>`
|
|
306
|
+
- If state is `EXECUTING` -> note that a build was interrupted, suggest restarting with `/ant:build <phase>`
|
|
307
|
+
- If state is `PLANNING` -> note that planning was interrupted, suggest `/ant:plan`
|
|
308
|
+
- Otherwise -> suggest `/ant:status` for full overview
|
|
309
|
+
|
|
310
|
+
### Step 6: Clear Paused State and Cleanup
|
|
311
|
+
|
|
312
|
+
Use Write tool to update COLONY_STATE.json:
|
|
313
|
+
- Remove or set to false: `"paused": false`
|
|
314
|
+
- Remove: `"paused_at"` field
|
|
315
|
+
- Update last_updated timestamp
|
|
316
|
+
- Add event: `{timestamp, type: "colony_resumed", worker: "resume", details: "Session resumed"}`
|
|
317
|
+
|
|
318
|
+
Use Bash tool to remove HANDOFF.md: `rm -f .aether/HANDOFF.md`
|
|
319
|
+
|
|
320
|
+
Run: `bash .aether/aether-utils.sh unload-state` to release lock.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Auto-Recovery Pattern Reference
|
|
325
|
+
|
|
326
|
+
The colony uses a tiered auto-recovery pattern to maintain context across session boundaries:
|
|
327
|
+
|
|
328
|
+
### Format Tiers
|
|
329
|
+
|
|
330
|
+
| Context | Format | When Used |
|
|
331
|
+
|---------|--------|-----------|
|
|
332
|
+
| Brief | `🔄 Resuming: Phase X - Name` | Action commands (build, plan, continue) |
|
|
333
|
+
| Extended | Brief + last activity timestamp | Status command |
|
|
334
|
+
| Full | Complete state with pheromones, workers, context | resume-colony command |
|
|
335
|
+
|
|
336
|
+
### Brief Format (Action Commands)
|
|
337
|
+
|
|
338
|
+
Used by `/ant:build`, `/ant:plan`, `/ant:continue`:
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
🔄 Resuming: Phase <current_phase> - <phase_name>
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Provides minimal orientation before executing the command's primary function.
|
|
345
|
+
|
|
346
|
+
### Extended Format (Status Command)
|
|
347
|
+
|
|
348
|
+
Used by `/ant:status` Step 1.5:
|
|
349
|
+
|
|
350
|
+
```
|
|
351
|
+
🔄 Resuming: Phase <current_phase> - <phase_name>
|
|
352
|
+
Last activity: <last_event_timestamp>
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Adds temporal context to help gauge session staleness.
|
|
356
|
+
|
|
357
|
+
### Full Format (Resume-Colony)
|
|
358
|
+
|
|
359
|
+
Used by `/ant:resume-colony`:
|
|
360
|
+
|
|
361
|
+
- Complete header with ASCII art
|
|
362
|
+
- Goal, state, session ID, phase
|
|
363
|
+
- Active pheromones with strength bars
|
|
364
|
+
- Worker status by caste
|
|
365
|
+
- Phase progress for all phases
|
|
366
|
+
- Handoff context summary
|
|
367
|
+
- Next action routing
|
|
368
|
+
|
|
369
|
+
### Implementation Notes
|
|
370
|
+
|
|
371
|
+
1. **State Source:** All formats read from `.aether/data/COLONY_STATE.json`
|
|
372
|
+
2. **Phase Name:** Extracted from `plan.phases[current_phase - 1].name`
|
|
373
|
+
3. **Last Activity:** Parsed from the last entry in `events` array
|
|
374
|
+
4. **Edge Cases:** Handle missing phase names, empty events, phase 0
|
|
375
|
+
|