aether-colony 3.1.17 → 5.1.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 +5354 -0
- 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 +438 -0
- package/.aether/commands/continue.yaml +1484 -0
- package/.aether/commands/council.yaml +304 -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 +469 -0
- package/.aether/commands/insert-phase.yaml +98 -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 +1313 -0
- package/.aether/commands/preferences.yaml +63 -0
- package/.aether/commands/redirect.yaml +123 -0
- package/.aether/commands/resume-colony.yaml +373 -0
- package/.aether/commands/resume.yaml +398 -0
- package/.aether/commands/run.yaml +193 -0
- package/.aether/commands/seal.yaml +1205 -0
- package/.aether/commands/skill-create.yaml +337 -0
- package/.aether/commands/status.yaml +364 -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 +211 -0
- package/.aether/docs/README.md +98 -0
- package/.aether/docs/caste-system.md +48 -0
- 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 +1682 -0
- package/.aether/docs/command-playbooks/build-prep.md +283 -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 +1724 -0
- package/.aether/docs/command-playbooks/continue-gates.md +686 -0
- package/.aether/docs/command-playbooks/continue-verify.md +406 -0
- package/.aether/docs/context-continuity.md +84 -0
- package/{runtime → .aether/docs/disciplines}/DISCIPLINES.md +13 -11
- package/.aether/docs/error-codes.md +268 -0
- package/.aether/docs/known-issues.md +94 -0
- package/{runtime → .aether}/docs/pheromones.md +86 -6
- package/.aether/docs/plans/pheromone-display-plan.md +257 -0
- package/.aether/docs/queen-commands.md +98 -0
- package/.aether/docs/source-of-truth-map.md +132 -0
- package/.aether/docs/xml-utilities.md +47 -0
- package/{runtime → .aether}/exchange/pheromone-xml.sh +2 -1
- package/{runtime → .aether}/exchange/registry-xml.sh +7 -3
- package/{runtime → .aether}/exchange/wisdom-xml.sh +11 -4
- package/.aether/rules/aether-colony.md +144 -0
- package/.aether/schemas/example-prompt-builder.xml +234 -0
- 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 +61 -0
- package/.aether/templates/colony-state-reset.jq.template +23 -0
- package/.aether/templates/colony-state.template.json +39 -0
- package/.aether/templates/constraints.template.json +9 -0
- package/.aether/templates/crowned-anthill.template.md +36 -0
- package/.aether/templates/handoff-build-error.template.md +30 -0
- package/.aether/templates/handoff-build-success.template.md +39 -0
- package/.aether/templates/handoff.template.md +40 -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/{runtime → .aether}/utils/atomic-write.sh +68 -22
- package/{runtime → .aether}/utils/chamber-compare.sh +23 -10
- package/.aether/utils/chamber-utils.sh +440 -0
- package/.aether/utils/emoji-audit.sh +166 -0
- package/{runtime → .aether}/utils/error-handler.sh +34 -8
- package/.aether/utils/file-lock.sh +313 -0
- package/.aether/utils/flag.sh +267 -0
- package/.aether/utils/hive.sh +572 -0
- package/.aether/utils/learning.sh +1928 -0
- package/.aether/utils/midden.sh +342 -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 +1698 -0
- package/.aether/utils/scan.sh +860 -0
- package/.aether/utils/semantic-cli.sh +415 -0
- package/.aether/utils/session.sh +552 -0
- package/.aether/utils/skills.sh +509 -0
- package/.aether/utils/spawn-tree.sh +260 -0
- package/.aether/utils/spawn.sh +260 -0
- package/.aether/utils/state-api.sh +199 -0
- package/{runtime → .aether}/utils/state-loader.sh +8 -6
- package/.aether/utils/suggest.sh +611 -0
- package/{runtime → .aether}/utils/swarm-display.sh +10 -1
- package/.aether/utils/swarm.sh +1004 -0
- package/{runtime → .aether}/utils/watch-spawn-tree.sh +11 -2
- package/{runtime → .aether}/utils/xml-compose.sh +9 -3
- package/.aether/utils/xml-convert.sh +277 -0
- package/{runtime → .aether}/utils/xml-core.sh +5 -9
- package/.aether/utils/xml-query.sh +201 -0
- package/.aether/utils/xml-utils.sh +110 -0
- package/{runtime → .aether}/workers.md +97 -81
- package/.claude/agents/ant/aether-ambassador.md +265 -0
- package/.claude/agents/ant/aether-archaeologist.md +327 -0
- package/.claude/agents/ant/aether-architect.md +236 -0
- package/.claude/agents/ant/aether-auditor.md +271 -0
- package/.claude/agents/ant/aether-builder.md +224 -0
- package/.claude/agents/ant/aether-chaos.md +269 -0
- package/.claude/agents/ant/aether-chronicler.md +305 -0
- package/.claude/agents/ant/aether-gatekeeper.md +330 -0
- package/.claude/agents/ant/aether-includer.md +374 -0
- package/.claude/agents/ant/aether-keeper.md +272 -0
- package/.claude/agents/ant/aether-measurer.md +322 -0
- package/.claude/agents/ant/aether-oracle.md +237 -0
- package/.claude/agents/ant/aether-probe.md +211 -0
- package/.claude/agents/ant/aether-queen.md +330 -0
- package/.claude/agents/ant/aether-route-setter.md +178 -0
- package/.claude/agents/ant/aether-sage.md +418 -0
- package/.claude/agents/ant/aether-scout.md +179 -0
- package/.claude/agents/ant/aether-surveyor-disciplines.md +417 -0
- package/.claude/agents/ant/aether-surveyor-nest.md +355 -0
- package/.claude/agents/ant/aether-surveyor-pathogens.md +289 -0
- package/.claude/agents/ant/aether-surveyor-provisions.md +360 -0
- package/.claude/agents/ant/aether-tracker.md +270 -0
- package/.claude/agents/ant/aether-watcher.md +280 -0
- package/.claude/agents/ant/aether-weaver.md +248 -0
- package/.claude/commands/ant/archaeology.md +16 -14
- package/.claude/commands/ant/build.md +43 -1028
- package/.claude/commands/ant/chaos.md +19 -23
- package/.claude/commands/ant/colonize.md +52 -31
- package/.claude/commands/ant/continue.md +40 -1016
- package/.claude/commands/ant/council.md +21 -18
- package/.claude/commands/ant/data-clean.md +81 -0
- package/.claude/commands/ant/dream.md +27 -15
- package/.claude/commands/ant/entomb.md +317 -225
- package/.claude/commands/ant/export-signals.md +57 -0
- package/.claude/commands/ant/feedback.md +48 -26
- package/.claude/commands/ant/flag.md +30 -10
- package/.claude/commands/ant/flags.md +34 -12
- package/.claude/commands/ant/focus.md +45 -19
- package/.claude/commands/ant/help.md +50 -8
- package/.claude/commands/ant/history.md +13 -0
- package/.claude/commands/ant/import-signals.md +71 -0
- package/.claude/commands/ant/init.md +345 -194
- package/.claude/commands/ant/insert-phase.md +101 -0
- package/.claude/commands/ant/interpret.md +26 -4
- package/.claude/commands/ant/lay-eggs.md +184 -127
- package/.claude/commands/ant/maturity.md +32 -11
- package/.claude/commands/ant/memory-details.md +77 -0
- package/.claude/commands/ant/migrate-state.md +20 -2
- package/.claude/commands/ant/oracle.md +337 -74
- package/.claude/commands/ant/organize.md +39 -25
- package/.claude/commands/ant/patrol.md +620 -0
- package/.claude/commands/ant/pause-colony.md +23 -27
- package/.claude/commands/ant/phase.md +40 -42
- package/.claude/commands/ant/pheromones.md +156 -0
- package/.claude/commands/ant/plan.md +185 -51
- package/.claude/commands/ant/preferences.md +65 -0
- package/.claude/commands/ant/redirect.md +45 -30
- package/.claude/commands/ant/resume-colony.md +51 -27
- package/.claude/commands/ant/resume.md +314 -94
- package/.claude/commands/ant/run.md +195 -0
- package/.claude/commands/ant/seal.md +650 -221
- package/.claude/commands/ant/skill-create.md +286 -0
- package/.claude/commands/ant/status.md +196 -31
- package/.claude/commands/ant/swarm.md +16 -46
- package/.claude/commands/ant/tunnels.md +280 -105
- package/.claude/commands/ant/update.md +73 -89
- package/.claude/commands/ant/verify-castes.md +100 -42
- package/.claude/commands/ant/watch.md +14 -12
- package/.opencode/agents/aether-ambassador.md +63 -20
- package/.opencode/agents/aether-archaeologist.md +29 -12
- package/.opencode/agents/aether-architect.md +103 -36
- package/.opencode/agents/aether-auditor.md +51 -18
- package/.opencode/agents/aether-builder.md +70 -20
- package/.opencode/agents/aether-chaos.md +29 -12
- package/.opencode/agents/aether-chronicler.md +60 -18
- package/.opencode/agents/aether-gatekeeper.md +27 -18
- package/.opencode/agents/aether-includer.md +27 -18
- package/.opencode/agents/aether-keeper.md +89 -18
- package/.opencode/agents/aether-measurer.md +27 -18
- package/.opencode/agents/aether-oracle.md +137 -0
- package/.opencode/agents/aether-probe.md +60 -18
- package/.opencode/agents/aether-queen.md +172 -24
- package/.opencode/agents/aether-route-setter.md +57 -12
- package/.opencode/agents/aether-sage.md +26 -18
- package/.opencode/agents/aether-scout.md +28 -20
- package/.opencode/agents/aether-surveyor-disciplines.md +59 -2
- package/.opencode/agents/aether-surveyor-nest.md +59 -2
- package/.opencode/agents/aether-surveyor-pathogens.md +57 -2
- package/.opencode/agents/aether-surveyor-provisions.md +59 -2
- package/.opencode/agents/aether-tracker.md +64 -18
- package/.opencode/agents/aether-watcher.md +66 -19
- package/.opencode/agents/aether-weaver.md +61 -18
- package/.opencode/commands/ant/archaeology.md +7 -14
- package/.opencode/commands/ant/build.md +437 -257
- package/.opencode/commands/ant/chaos.md +7 -24
- package/.opencode/commands/ant/colonize.md +8 -17
- package/.opencode/commands/ant/continue.md +661 -142
- package/.opencode/commands/ant/council.md +11 -22
- package/.opencode/commands/ant/data-clean.md +77 -0
- package/.opencode/commands/ant/dream.md +15 -17
- package/.opencode/commands/ant/entomb.md +133 -62
- 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 +374 -167
- package/.opencode/commands/ant/insert-phase.md +107 -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 +18 -16
- 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 +184 -56
- package/.opencode/commands/ant/preferences.md +71 -0
- package/.opencode/commands/ant/redirect.md +22 -5
- package/.opencode/commands/ant/resume-colony.md +38 -27
- package/.opencode/commands/ant/resume.md +385 -0
- package/.opencode/commands/ant/run.md +201 -0
- package/.opencode/commands/ant/seal.md +259 -45
- package/.opencode/commands/ant/skill-create.md +63 -0
- package/.opencode/commands/ant/status.md +135 -31
- package/.opencode/commands/ant/swarm.md +3 -345
- package/.opencode/commands/ant/tunnels.md +152 -9
- package/.opencode/commands/ant/update.md +70 -91
- package/.opencode/commands/ant/verify-castes.md +96 -42
- package/.opencode/commands/ant/watch.md +7 -0
- package/CHANGELOG.md +356 -0
- package/README.md +203 -573
- package/bin/cli.js +455 -527
- package/bin/generate-commands.js +186 -0
- package/bin/generate-commands.sh +127 -88
- package/bin/lib/init.js +13 -3
- package/bin/lib/spawn-logger.js +0 -15
- package/bin/lib/update-transaction.js +392 -140
- package/bin/npx-install.js +178 -0
- package/bin/sync-to-runtime.sh +5 -137
- package/bin/validate-package.sh +166 -0
- package/package.json +14 -7
- package/.opencode/agents/aether-guardian.md +0 -107
- package/.opencode/agents/workers.md +0 -1034
- 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
- package/runtime/CONTEXT.md +0 -160
- package/runtime/QUEEN_ANT_ARCHITECTURE.md +0 -402
- package/runtime/aether-utils.sh +0 -3879
- package/runtime/data/signatures.json +0 -41
- package/runtime/docs/AETHER-2.0-IMPLEMENTATION-PLAN.md +0 -1343
- package/runtime/docs/AETHER-PHEROMONE-SYSTEM-MASTER-SPEC.md +0 -2642
- package/runtime/docs/PHEROMONE-INJECTION.md +0 -240
- package/runtime/docs/PHEROMONE-INTEGRATION.md +0 -192
- package/runtime/docs/PHEROMONE-SYSTEM-DESIGN.md +0 -426
- package/runtime/docs/README.md +0 -94
- package/runtime/docs/VISUAL-OUTPUT-SPEC.md +0 -219
- package/runtime/docs/biological-reference.md +0 -272
- package/runtime/docs/codebase-review.md +0 -399
- package/runtime/docs/command-sync.md +0 -164
- package/runtime/docs/constraints.md +0 -116
- package/runtime/docs/implementation-learnings.md +0 -89
- package/runtime/docs/known-issues.md +0 -217
- package/runtime/docs/namespace.md +0 -148
- package/runtime/docs/pathogen-schema-example.json +0 -36
- package/runtime/docs/pathogen-schema.md +0 -111
- package/runtime/docs/planning-discipline.md +0 -159
- package/runtime/docs/progressive-disclosure.md +0 -184
- package/runtime/lib/queen-utils.sh +0 -729
- package/runtime/model-profiles.yaml +0 -100
- package/runtime/planning.md +0 -159
- package/runtime/recover.sh +0 -136
- package/runtime/templates/QUEEN.md.template +0 -79
- package/runtime/utils/chamber-utils.sh +0 -285
- package/runtime/utils/file-lock.sh +0 -122
- package/runtime/utils/spawn-tree.sh +0 -428
- package/runtime/utils/spawn-with-model.sh +0 -56
- package/runtime/utils/xml-utils.sh +0 -2196
- package/runtime/workers-new-castes.md +0 -516
- /package/{runtime → .aether/docs/disciplines}/coding-standards.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/debugging.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/learning.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/tdd.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/verification-loop.md +0 -0
- /package/{runtime → .aether/docs/disciplines}/verification.md +0 -0
- /package/{runtime → .aether}/schemas/aether-types.xsd +0 -0
- /package/{runtime → .aether}/schemas/colony-registry.xsd +0 -0
- /package/{runtime → .aether}/schemas/pheromone.xsd +0 -0
- /package/{runtime → .aether}/schemas/prompt.xsd +0 -0
- /package/{runtime → .aether}/schemas/queen-wisdom.xsd +0 -0
- /package/{runtime → .aether}/schemas/worker-priming.xsd +0 -0
- /package/{runtime → .aether}/utils/colorize-log.sh +0 -0
- /package/{runtime → .aether}/utils/queen-to-md.xsl +0 -0
package/bin/lib/telemetry.js
DELETED
|
@@ -1,441 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Telemetry Module
|
|
4
|
-
*
|
|
5
|
-
* Tracks model performance and routing decisions for data-driven model selection.
|
|
6
|
-
* Records every spawn with model, caste, task, and routing source.
|
|
7
|
-
* Tracks success/failure rates per model-caste combination.
|
|
8
|
-
* Rotates at 1000 routing decisions to prevent unbounded growth.
|
|
9
|
-
* Uses atomic writes (temp file + rename) for data integrity.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const fs = require('fs');
|
|
13
|
-
const path = require('path');
|
|
14
|
-
|
|
15
|
-
const TELEMETRY_VERSION = '1.0';
|
|
16
|
-
const MAX_ROUTING_DECISIONS = 1000;
|
|
17
|
-
const DEFAULT_TELEMETRY_FILE = 'telemetry.json';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Get the telemetry file path
|
|
21
|
-
* @param {string} repoPath - Repository root path
|
|
22
|
-
* @returns {string} Full path to telemetry.json
|
|
23
|
-
*/
|
|
24
|
-
function getTelemetryPath(repoPath) {
|
|
25
|
-
return path.join(repoPath, '.aether', 'data', DEFAULT_TELEMETRY_FILE);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Load telemetry data from file
|
|
30
|
-
* @param {string} repoPath - Repository root path
|
|
31
|
-
* @returns {Object} Parsed telemetry data or default structure
|
|
32
|
-
*/
|
|
33
|
-
function loadTelemetry(repoPath) {
|
|
34
|
-
const telemetryPath = getTelemetryPath(repoPath);
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
if (!fs.existsSync(telemetryPath)) {
|
|
38
|
-
return createDefaultTelemetry();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const content = fs.readFileSync(telemetryPath, 'utf8');
|
|
42
|
-
const data = JSON.parse(content);
|
|
43
|
-
|
|
44
|
-
// Validate structure
|
|
45
|
-
if (!data.version || !data.models || !Array.isArray(data.routing_decisions)) {
|
|
46
|
-
return createDefaultTelemetry();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return data;
|
|
50
|
-
} catch (error) {
|
|
51
|
-
// Return default on any error (corrupted file, permission issues, etc.)
|
|
52
|
-
return createDefaultTelemetry();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Create default telemetry structure
|
|
58
|
-
* @returns {Object} Default telemetry object
|
|
59
|
-
*/
|
|
60
|
-
function createDefaultTelemetry() {
|
|
61
|
-
return {
|
|
62
|
-
version: TELEMETRY_VERSION,
|
|
63
|
-
last_updated: new Date().toISOString(),
|
|
64
|
-
models: {},
|
|
65
|
-
routing_decisions: []
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Save telemetry data atomically
|
|
71
|
-
* @param {string} repoPath - Repository root path
|
|
72
|
-
* @param {Object} data - Telemetry data to save
|
|
73
|
-
* @returns {boolean} True if saved successfully
|
|
74
|
-
*/
|
|
75
|
-
function saveTelemetry(repoPath, data) {
|
|
76
|
-
const telemetryPath = getTelemetryPath(repoPath);
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
// Ensure directory exists
|
|
80
|
-
const dataDir = path.dirname(telemetryPath);
|
|
81
|
-
if (!fs.existsSync(dataDir)) {
|
|
82
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Update timestamp
|
|
86
|
-
data.last_updated = new Date().toISOString();
|
|
87
|
-
|
|
88
|
-
// Atomic write: write to temp file, then rename
|
|
89
|
-
const tempPath = `${telemetryPath}.tmp`;
|
|
90
|
-
fs.writeFileSync(tempPath, JSON.stringify(data, null, 2), 'utf8');
|
|
91
|
-
fs.renameSync(tempPath, telemetryPath);
|
|
92
|
-
|
|
93
|
-
return true;
|
|
94
|
-
} catch (error) {
|
|
95
|
-
// Silent fail - don't cascade errors from telemetry
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Record spawn telemetry
|
|
102
|
-
* @param {string} repoPath - Repository root path
|
|
103
|
-
* @param {Object} spawnInfo - Spawn details
|
|
104
|
-
* @param {string} spawnInfo.task - Task description
|
|
105
|
-
* @param {string} spawnInfo.caste - Worker caste (e.g., "builder")
|
|
106
|
-
* @param {string} spawnInfo.model - Model used (e.g., "kimi-k2.5")
|
|
107
|
-
* @param {string} spawnInfo.source - Routing source (e.g., "caste-default", "task-based")
|
|
108
|
-
* @param {string} [spawnInfo.timestamp] - Optional timestamp (defaults to now)
|
|
109
|
-
* @returns {Object} Result with success flag and decision_id
|
|
110
|
-
*/
|
|
111
|
-
function recordSpawnTelemetry(repoPath, { task, caste, model, source, timestamp }) {
|
|
112
|
-
try {
|
|
113
|
-
const data = loadTelemetry(repoPath);
|
|
114
|
-
const decisionTimestamp = timestamp || new Date().toISOString();
|
|
115
|
-
|
|
116
|
-
// Initialize model stats if not exists
|
|
117
|
-
if (!data.models[model]) {
|
|
118
|
-
data.models[model] = {
|
|
119
|
-
total_spawns: 0,
|
|
120
|
-
successful_completions: 0,
|
|
121
|
-
failed_completions: 0,
|
|
122
|
-
blocked: 0,
|
|
123
|
-
by_caste: {}
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const modelStats = data.models[model];
|
|
128
|
-
|
|
129
|
-
// Increment total spawns
|
|
130
|
-
modelStats.total_spawns++;
|
|
131
|
-
|
|
132
|
-
// Initialize caste stats if not exists
|
|
133
|
-
if (!modelStats.by_caste[caste]) {
|
|
134
|
-
modelStats.by_caste[caste] = {
|
|
135
|
-
spawns: 0,
|
|
136
|
-
success: 0,
|
|
137
|
-
failures: 0,
|
|
138
|
-
blocked: 0
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Increment caste spawns
|
|
143
|
-
modelStats.by_caste[caste].spawns++;
|
|
144
|
-
|
|
145
|
-
// Create routing decision record with activity tracking fields
|
|
146
|
-
const decision = {
|
|
147
|
-
timestamp: decisionTimestamp,
|
|
148
|
-
task: task || 'unknown',
|
|
149
|
-
caste: caste || 'unknown',
|
|
150
|
-
selected_model: model || 'default',
|
|
151
|
-
source: source || 'unknown',
|
|
152
|
-
tools: { read: 0, grep: 0, edit: 0, bash: 0 },
|
|
153
|
-
tokens: 0,
|
|
154
|
-
started_at: decisionTimestamp
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
// Append to routing decisions
|
|
158
|
-
data.routing_decisions.push(decision);
|
|
159
|
-
|
|
160
|
-
// Rotate if exceeds max
|
|
161
|
-
if (data.routing_decisions.length > MAX_ROUTING_DECISIONS) {
|
|
162
|
-
data.routing_decisions = data.routing_decisions.slice(-MAX_ROUTING_DECISIONS);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Save atomically
|
|
166
|
-
const saved = saveTelemetry(repoPath, data);
|
|
167
|
-
|
|
168
|
-
return {
|
|
169
|
-
success: saved,
|
|
170
|
-
decision_id: decisionTimestamp
|
|
171
|
-
};
|
|
172
|
-
} catch (error) {
|
|
173
|
-
return {
|
|
174
|
-
success: false,
|
|
175
|
-
decision_id: null,
|
|
176
|
-
error: error.message
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Update spawn outcome
|
|
183
|
-
* @param {string} repoPath - Repository root path
|
|
184
|
-
* @param {string} spawnId - Spawn identifier (timestamp from recordSpawnTelemetry)
|
|
185
|
-
* @param {string} outcome - Outcome: 'completed' | 'failed' | 'blocked'
|
|
186
|
-
* @returns {boolean} True if updated successfully
|
|
187
|
-
*/
|
|
188
|
-
function updateSpawnOutcome(repoPath, spawnId, outcome) {
|
|
189
|
-
try {
|
|
190
|
-
const data = loadTelemetry(repoPath);
|
|
191
|
-
|
|
192
|
-
// Find the routing decision by timestamp
|
|
193
|
-
const decision = data.routing_decisions.find(d => d.timestamp === spawnId);
|
|
194
|
-
|
|
195
|
-
if (!decision) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
const { selected_model: model, caste } = decision;
|
|
200
|
-
|
|
201
|
-
// Ensure model exists
|
|
202
|
-
if (!data.models[model]) {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const modelStats = data.models[model];
|
|
207
|
-
|
|
208
|
-
// Update model-level counters
|
|
209
|
-
switch (outcome) {
|
|
210
|
-
case 'completed':
|
|
211
|
-
modelStats.successful_completions++;
|
|
212
|
-
break;
|
|
213
|
-
case 'failed':
|
|
214
|
-
modelStats.failed_completions++;
|
|
215
|
-
break;
|
|
216
|
-
case 'blocked':
|
|
217
|
-
modelStats.blocked++;
|
|
218
|
-
break;
|
|
219
|
-
default:
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Update caste-level counters
|
|
224
|
-
if (modelStats.by_caste[caste]) {
|
|
225
|
-
switch (outcome) {
|
|
226
|
-
case 'completed':
|
|
227
|
-
modelStats.by_caste[caste].success++;
|
|
228
|
-
break;
|
|
229
|
-
case 'failed':
|
|
230
|
-
modelStats.by_caste[caste].failures++;
|
|
231
|
-
break;
|
|
232
|
-
case 'blocked':
|
|
233
|
-
modelStats.by_caste[caste].blocked++;
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// Save atomically
|
|
239
|
-
return saveTelemetry(repoPath, data);
|
|
240
|
-
} catch (error) {
|
|
241
|
-
return false;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Get telemetry summary
|
|
247
|
-
* @param {string} repoPath - Repository root path
|
|
248
|
-
* @returns {Object} Summary of telemetry data
|
|
249
|
-
*/
|
|
250
|
-
function getTelemetrySummary(repoPath) {
|
|
251
|
-
const data = loadTelemetry(repoPath);
|
|
252
|
-
|
|
253
|
-
const totalSpawns = Object.values(data.models).reduce(
|
|
254
|
-
(sum, model) => sum + (model.total_spawns || 0),
|
|
255
|
-
0
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
const models = {};
|
|
259
|
-
for (const [modelName, stats] of Object.entries(data.models)) {
|
|
260
|
-
const successRate = stats.total_spawns > 0
|
|
261
|
-
? (stats.successful_completions / stats.total_spawns)
|
|
262
|
-
: 0;
|
|
263
|
-
|
|
264
|
-
models[modelName] = {
|
|
265
|
-
total_spawns: stats.total_spawns,
|
|
266
|
-
success_rate: Math.round(successRate * 100) / 100,
|
|
267
|
-
by_caste: stats.by_caste || {}
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Get last 10 routing decisions
|
|
272
|
-
const recentDecisions = data.routing_decisions.slice(-10);
|
|
273
|
-
|
|
274
|
-
return {
|
|
275
|
-
total_spawns: totalSpawns,
|
|
276
|
-
total_models: Object.keys(data.models).length,
|
|
277
|
-
models,
|
|
278
|
-
recent_decisions: recentDecisions
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Get detailed performance for a specific model
|
|
284
|
-
* @param {string} repoPath - Repository root path
|
|
285
|
-
* @param {string} model - Model name
|
|
286
|
-
* @returns {Object|null} Model performance data or null if not found
|
|
287
|
-
*/
|
|
288
|
-
function getModelPerformance(repoPath, model) {
|
|
289
|
-
const data = loadTelemetry(repoPath);
|
|
290
|
-
|
|
291
|
-
if (!data.models[model]) {
|
|
292
|
-
return null;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
const stats = data.models[model];
|
|
296
|
-
const successRate = stats.total_spawns > 0
|
|
297
|
-
? (stats.successful_completions / stats.total_spawns)
|
|
298
|
-
: 0;
|
|
299
|
-
|
|
300
|
-
return {
|
|
301
|
-
model,
|
|
302
|
-
total_spawns: stats.total_spawns,
|
|
303
|
-
successful_completions: stats.successful_completions || 0,
|
|
304
|
-
failed_completions: stats.failed_completions || 0,
|
|
305
|
-
blocked: stats.blocked || 0,
|
|
306
|
-
success_rate: Math.round(successRate * 100) / 100,
|
|
307
|
-
by_caste: stats.by_caste || {}
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Get routing statistics with optional filtering
|
|
313
|
-
* @param {string} repoPath - Repository root path
|
|
314
|
-
* @param {Object} options - Filter options
|
|
315
|
-
* @param {number} [options.days] - Filter to last N days
|
|
316
|
-
* @param {string} [options.caste] - Filter by caste
|
|
317
|
-
* @returns {Object} Routing statistics
|
|
318
|
-
*/
|
|
319
|
-
function getRoutingStats(repoPath, options = {}) {
|
|
320
|
-
const data = loadTelemetry(repoPath);
|
|
321
|
-
const { days, caste } = options;
|
|
322
|
-
|
|
323
|
-
let decisions = [...data.routing_decisions];
|
|
324
|
-
|
|
325
|
-
// Filter by days
|
|
326
|
-
if (days && days > 0) {
|
|
327
|
-
const cutoffDate = new Date();
|
|
328
|
-
cutoffDate.setDate(cutoffDate.getDate() - days);
|
|
329
|
-
|
|
330
|
-
decisions = decisions.filter(d => new Date(d.timestamp) >= cutoffDate);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Filter by caste
|
|
334
|
-
if (caste) {
|
|
335
|
-
decisions = decisions.filter(d => d.caste === caste);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// Calculate stats
|
|
339
|
-
const bySource = {};
|
|
340
|
-
const byModel = {};
|
|
341
|
-
|
|
342
|
-
for (const decision of decisions) {
|
|
343
|
-
// Count by source
|
|
344
|
-
bySource[decision.source] = (bySource[decision.source] || 0) + 1;
|
|
345
|
-
|
|
346
|
-
// Count by model
|
|
347
|
-
byModel[decision.selected_model] = (byModel[decision.selected_model] || 0) + 1;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
return {
|
|
351
|
-
total_decisions: decisions.length,
|
|
352
|
-
by_source: bySource,
|
|
353
|
-
by_model: byModel,
|
|
354
|
-
date_range: decisions.length > 0 ? {
|
|
355
|
-
earliest: decisions[0].timestamp,
|
|
356
|
-
latest: decisions[decisions.length - 1].timestamp
|
|
357
|
-
} : null
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* Update tool usage counter for a spawn
|
|
363
|
-
* @param {string} repoPath - Repository root path
|
|
364
|
-
* @param {string} spawnId - Spawn identifier (timestamp from recordSpawnTelemetry)
|
|
365
|
-
* @param {string} toolType - Tool type: 'read', 'grep', 'edit', 'bash'
|
|
366
|
-
* @param {number} [count=1] - Number to increment by
|
|
367
|
-
* @returns {boolean} True if updated successfully
|
|
368
|
-
*/
|
|
369
|
-
function updateToolUsage(repoPath, spawnId, toolType, count = 1) {
|
|
370
|
-
try {
|
|
371
|
-
const data = loadTelemetry(repoPath);
|
|
372
|
-
|
|
373
|
-
// Find the routing decision by timestamp
|
|
374
|
-
const decision = data.routing_decisions.find(d => d.timestamp === spawnId);
|
|
375
|
-
|
|
376
|
-
if (!decision) {
|
|
377
|
-
return false;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
// Initialize tools object if not exists
|
|
381
|
-
if (!decision.tools) {
|
|
382
|
-
decision.tools = { read: 0, grep: 0, edit: 0, bash: 0 };
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Validate tool type
|
|
386
|
-
const validTools = ['read', 'grep', 'edit', 'bash'];
|
|
387
|
-
if (!validTools.includes(toolType)) {
|
|
388
|
-
return false;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// Increment the specified tool counter
|
|
392
|
-
decision.tools[toolType] += count;
|
|
393
|
-
|
|
394
|
-
// Save atomically
|
|
395
|
-
return saveTelemetry(repoPath, data);
|
|
396
|
-
} catch (error) {
|
|
397
|
-
return false;
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
/**
|
|
402
|
-
* Update token usage (trophallaxis metrics) for a spawn
|
|
403
|
-
* @param {string} repoPath - Repository root path
|
|
404
|
-
* @param {string} spawnId - Spawn identifier (timestamp from recordSpawnTelemetry)
|
|
405
|
-
* @param {number} tokens - Number of tokens to add (cumulative)
|
|
406
|
-
* @returns {boolean} True if updated successfully
|
|
407
|
-
*/
|
|
408
|
-
function updateTokenUsage(repoPath, spawnId, tokens) {
|
|
409
|
-
try {
|
|
410
|
-
const data = loadTelemetry(repoPath);
|
|
411
|
-
|
|
412
|
-
// Find the routing decision by timestamp
|
|
413
|
-
const decision = data.routing_decisions.find(d => d.timestamp === spawnId);
|
|
414
|
-
|
|
415
|
-
if (!decision) {
|
|
416
|
-
return false;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
// Add tokens to existing count (cumulative)
|
|
420
|
-
decision.tokens = (decision.tokens || 0) + tokens;
|
|
421
|
-
|
|
422
|
-
// Save atomically
|
|
423
|
-
return saveTelemetry(repoPath, data);
|
|
424
|
-
} catch (error) {
|
|
425
|
-
return false;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
module.exports = {
|
|
430
|
-
recordSpawnTelemetry,
|
|
431
|
-
updateSpawnOutcome,
|
|
432
|
-
updateToolUsage,
|
|
433
|
-
updateTokenUsage,
|
|
434
|
-
getTelemetrySummary,
|
|
435
|
-
getModelPerformance,
|
|
436
|
-
getRoutingStats,
|
|
437
|
-
loadTelemetry,
|
|
438
|
-
saveTelemetry,
|
|
439
|
-
TELEMETRY_VERSION,
|
|
440
|
-
MAX_ROUTING_DECISIONS
|
|
441
|
-
};
|
package/runtime/CONTEXT.md
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
# Aether Colony — Current Context
|
|
2
|
-
|
|
3
|
-
> **This document is the colony's memory. If context collapses, read this file first.**
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 🚦 System Status
|
|
8
|
-
|
|
9
|
-
| Field | Value |
|
|
10
|
-
|-------|-------|
|
|
11
|
-
| **Last Updated** | 2026-02-16T20:49:16Z |
|
|
12
|
-
| **Current Phase** | - |
|
|
13
|
-
| **Phase Name** | Shellcheck Fixes |
|
|
14
|
-
| **Milestone** | Open Chambers |
|
|
15
|
-
| **Colony Status** | IDLE (No active colony) |
|
|
16
|
-
| **Safe to Clear?** | YES — No active colony - test fixes complete, hooks simplified |
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 📝 Session Notes (2026-02-21)
|
|
21
|
-
|
|
22
|
-
### Completed This Session
|
|
23
|
-
- Fixed shellcheck SC2168 warnings in `.aether/aether-utils.sh`
|
|
24
|
-
- Removed duplicate context-update code (~388 lines)
|
|
25
|
-
- Fixed 8 remaining `local` keyword errors in case handlers
|
|
26
|
-
- All 383 tests pass, 0 SC2168 errors
|
|
27
|
-
|
|
28
|
-
### Pending Work
|
|
29
|
-
- Commit the shellcheck fixes
|
|
30
|
-
- Resume XML integration work (see prior session handoff)
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 🎯 Prior Goal (2026-02-16)
|
|
35
|
-
|
|
36
|
-
Implement XML exchange system integration into existing colony lifecycle (pause/resume/seal/init) rather than as separate commands.
|
|
37
|
-
|
|
38
|
-
**Decision needed:** Choose integration approach:
|
|
39
|
-
- **Option A:** Auto-export on pause, auto-import on resume
|
|
40
|
-
- **Option B:** Export to eternal memory on seal, import on init
|
|
41
|
-
- **Option C:** Hybrid approach (recommended)
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## 📍 What's In Progress
|
|
46
|
-
|
|
47
|
-
### Phase 4: XML Exchange System ✅ COMPLETE
|
|
48
|
-
|
|
49
|
-
**Built but not yet integrated:**
|
|
50
|
-
|
|
51
|
-
1. **Exchange Modules** (`.aether/exchange/`)
|
|
52
|
-
- `pheromone-xml.sh` - Signal export/import/merge with namespace prefixing
|
|
53
|
-
- `wisdom-xml.sh` - Queen wisdom with promotion pipeline (0.8 threshold)
|
|
54
|
-
- `registry-xml.sh` - Colony lineage and ancestry tracking
|
|
55
|
-
|
|
56
|
-
2. **Core Utilities** (`.aether/utils/xml-core.sh`)
|
|
57
|
-
- Feature detection for xmllint/xmlstarlet/xsltproc
|
|
58
|
-
- JSON output helpers
|
|
59
|
-
- Validation, formatting, escaping
|
|
60
|
-
|
|
61
|
-
3. **Schemas** (`.aether/schemas/`)
|
|
62
|
-
- `pheromone.xsd` - 22 castes, 4 priority levels
|
|
63
|
-
- `queen-wisdom.xsd` - Philosophy/pattern validation
|
|
64
|
-
- `colony-registry.xsd` - Lineage validation
|
|
65
|
-
- `aether-types.xsd` - Shared types
|
|
66
|
-
|
|
67
|
-
4. **Tests**
|
|
68
|
-
- `tests/bash/test-xml-roundtrip.sh` - 19/19 tests passing
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## ✅ Completed Work
|
|
73
|
-
|
|
74
|
-
### Phase 1: Foundation ✅
|
|
75
|
-
- XML validation utilities (xml-validate, xml-query, xml-convert)
|
|
76
|
-
- XSD schemas (pheromone.xsd, queen-wisdom.xsd, colony-registry.xsd)
|
|
77
|
-
- 20/20 tests passing
|
|
78
|
-
|
|
79
|
-
### Phase 2: Pheromone XML ✅
|
|
80
|
-
- Pheromone export to XML with namespaces
|
|
81
|
-
- XInclude composition for worker priming
|
|
82
|
-
- Colony namespace generation functions
|
|
83
|
-
- 15/15 pheromone tests + 6/6 XInclude tests passing
|
|
84
|
-
|
|
85
|
-
### Phase 3: Wisdom Evolution ✅
|
|
86
|
-
- XSLT transformation queen-wisdom.xml → QUEEN.md
|
|
87
|
-
- Validation workflow using queen-wisdom.xsd
|
|
88
|
-
- Wisdom promotion pipeline (pattern → philosophy at 0.8 confidence)
|
|
89
|
-
|
|
90
|
-
### Phase 4: Exchange System ✅
|
|
91
|
-
- Round-trip conversion (JSON ↔ XML)
|
|
92
|
-
- Namespace prefixing for collision prevention
|
|
93
|
-
- Merge with deduplication
|
|
94
|
-
- 19/19 round-trip tests passing
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## ⚠️ Active Constraints (REDIRECT Signals)
|
|
99
|
-
|
|
100
|
-
| Constraint | Source | Date Set |
|
|
101
|
-
|------------|--------|----------|
|
|
102
|
-
| In the Aether repo, `.aether/` IS the source of truth — `runtime/` is auto-populated on publish | CLAUDE.md | Permanent |
|
|
103
|
-
| Never push without explicit user approval | CLAUDE.md Safety | Permanent |
|
|
104
|
-
| XML exchange should be automatic, not separate commands | User | 2026-02-16 |
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## 💭 Active Pheromones (FOCUS Signals)
|
|
109
|
-
|
|
110
|
-
*None active*
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## 📝 Recent Decisions
|
|
115
|
-
|
|
116
|
-
| Date | Decision | Rationale | Made By |
|
|
117
|
-
|------|----------|-----------|---------|
|
|
118
|
-
| 2026-02-16 | Remove /ant:export and /ant:import commands | User wants system integration, not new commands | User |
|
|
119
|
-
| 2026-02-16 | Complete Phase 4 | All exchange modules built and tested | Queen |
|
|
120
|
-
| 2026-02-16 | Pause for integration decision | Need user input on approach (A, B, or C) | Queen |
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## 📊 Recent Activity (Last 10 Actions)
|
|
125
|
-
|
|
126
|
-
| Timestamp | Command | Result | Files Changed |
|
|
127
|
-
|-----------|---------|--------|---------------|
|
|
128
|
-
| 2026-02-16T20:49:04Z | pause-colony | Colony paused — test fixes and hook debugging completed | tests fixed: 18→0, hooks simplified |
|
|
129
|
-
| 2026-02-16T20:20:00Z | export/import removed | Commands deleted as requested | -2 files |
|
|
130
|
-
| 2026-02-16T20:18:00Z | registry-xml.sh | Created registry exchange module | +1 file |
|
|
131
|
-
| 2026-02-16T20:15:00Z | wisdom-xml.sh | Created wisdom exchange module | +1 file |
|
|
132
|
-
| 2026-02-16T20:14:00Z | pheromone-xml.sh | Fixed merge tests, 19/19 passing | 1 file |
|
|
133
|
-
| 2026-02-16T20:10:00Z | test-xml-roundtrip.sh | Comprehensive test suite | +1 file |
|
|
134
|
-
| 2026-02-16T20:00:00Z | xml-core.sh | Core XML utilities | +1 file |
|
|
135
|
-
| 2026-02-16T19:50:00Z | schemas/* | XSD schemas for validation | +4 files |
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 🔄 Next Steps
|
|
140
|
-
|
|
141
|
-
**AWAITING USER DECISION:**
|
|
142
|
-
|
|
143
|
-
How should XML exchange integrate into existing commands?
|
|
144
|
-
|
|
145
|
-
### Option A: Pause/Resume Integration
|
|
146
|
-
- `/ant:pause-colony` → Auto-export to `.aether/exports/`
|
|
147
|
-
- `/ant:resume-colony` → Check for exports, offer to import
|
|
148
|
-
|
|
149
|
-
### Option B: Seal/Init Integration
|
|
150
|
-
- `/ant:seal` → Export to `~/.aether/eternal/` (cross-colony)
|
|
151
|
-
- `/ant/init` → Check eternal memory, offer to seed new colony
|
|
152
|
-
|
|
153
|
-
### Option C: Hybrid (Recommended)
|
|
154
|
-
- **Pause** → Export to `.aether/exports/` (local handoff)
|
|
155
|
-
- **Seal** → Export to `~/.aether/eternal/` (eternal memory)
|
|
156
|
-
- **Resume** → Import from both locations
|
|
157
|
-
- **Init** → Offer eternal memory as seed
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|