aether-colony 1.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.
Files changed (207) hide show
  1. package/.aether/CONTEXT.md +160 -0
  2. package/.aether/QUEEN.md +84 -0
  3. package/.aether/aether-utils.sh +7749 -0
  4. package/.aether/docs/QUEEN-SYSTEM.md +211 -0
  5. package/.aether/docs/README.md +68 -0
  6. package/.aether/docs/caste-system.md +48 -0
  7. package/.aether/docs/disciplines/DISCIPLINES.md +93 -0
  8. package/.aether/docs/disciplines/coding-standards.md +197 -0
  9. package/.aether/docs/disciplines/debugging.md +207 -0
  10. package/.aether/docs/disciplines/learning.md +254 -0
  11. package/.aether/docs/disciplines/tdd.md +257 -0
  12. package/.aether/docs/disciplines/verification-loop.md +167 -0
  13. package/.aether/docs/disciplines/verification.md +116 -0
  14. package/.aether/docs/error-codes.md +268 -0
  15. package/.aether/docs/known-issues.md +233 -0
  16. package/.aether/docs/pheromones.md +205 -0
  17. package/.aether/docs/queen-commands.md +97 -0
  18. package/.aether/exchange/colony-registry.xml +11 -0
  19. package/.aether/exchange/pheromone-xml.sh +575 -0
  20. package/.aether/exchange/pheromones.xml +87 -0
  21. package/.aether/exchange/queen-wisdom.xml +14 -0
  22. package/.aether/exchange/registry-xml.sh +273 -0
  23. package/.aether/exchange/wisdom-xml.sh +319 -0
  24. package/.aether/midden/approach-changes.md +5 -0
  25. package/.aether/midden/build-failures.md +5 -0
  26. package/.aether/midden/test-failures.md +5 -0
  27. package/.aether/model-profiles.yaml +100 -0
  28. package/.aether/rules/aether-colony.md +134 -0
  29. package/.aether/schemas/aether-types.xsd +255 -0
  30. package/.aether/schemas/colony-registry.xsd +309 -0
  31. package/.aether/schemas/example-prompt-builder.xml +234 -0
  32. package/.aether/schemas/pheromone.xsd +163 -0
  33. package/.aether/schemas/prompt.xsd +416 -0
  34. package/.aether/schemas/queen-wisdom.xsd +325 -0
  35. package/.aether/schemas/worker-priming.xsd +276 -0
  36. package/.aether/templates/QUEEN.md.template +79 -0
  37. package/.aether/templates/colony-state-reset.jq.template +22 -0
  38. package/.aether/templates/colony-state.template.json +35 -0
  39. package/.aether/templates/constraints.template.json +9 -0
  40. package/.aether/templates/crowned-anthill.template.md +36 -0
  41. package/.aether/templates/handoff-build-error.template.md +30 -0
  42. package/.aether/templates/handoff-build-success.template.md +39 -0
  43. package/.aether/templates/handoff.template.md +40 -0
  44. package/.aether/templates/learning-observations.template.json +6 -0
  45. package/.aether/templates/midden.template.json +7 -0
  46. package/.aether/templates/pheromones.template.json +6 -0
  47. package/.aether/templates/session.template.json +9 -0
  48. package/.aether/utils/atomic-write.sh +219 -0
  49. package/.aether/utils/chamber-compare.sh +193 -0
  50. package/.aether/utils/chamber-utils.sh +297 -0
  51. package/.aether/utils/colorize-log.sh +132 -0
  52. package/.aether/utils/error-handler.sh +212 -0
  53. package/.aether/utils/file-lock.sh +158 -0
  54. package/.aether/utils/queen-to-md.xsl +395 -0
  55. package/.aether/utils/semantic-cli.sh +413 -0
  56. package/.aether/utils/spawn-tree.sh +428 -0
  57. package/.aether/utils/spawn-with-model.sh +56 -0
  58. package/.aether/utils/state-loader.sh +215 -0
  59. package/.aether/utils/swarm-display.sh +268 -0
  60. package/.aether/utils/watch-spawn-tree.sh +253 -0
  61. package/.aether/utils/xml-compose.sh +253 -0
  62. package/.aether/utils/xml-convert.sh +273 -0
  63. package/.aether/utils/xml-core.sh +186 -0
  64. package/.aether/utils/xml-query.sh +201 -0
  65. package/.aether/utils/xml-utils.sh +110 -0
  66. package/.aether/workers.md +765 -0
  67. package/.claude/agents/ant/aether-ambassador.md +264 -0
  68. package/.claude/agents/ant/aether-archaeologist.md +322 -0
  69. package/.claude/agents/ant/aether-auditor.md +266 -0
  70. package/.claude/agents/ant/aether-builder.md +187 -0
  71. package/.claude/agents/ant/aether-chaos.md +268 -0
  72. package/.claude/agents/ant/aether-chronicler.md +304 -0
  73. package/.claude/agents/ant/aether-gatekeeper.md +325 -0
  74. package/.claude/agents/ant/aether-includer.md +373 -0
  75. package/.claude/agents/ant/aether-keeper.md +271 -0
  76. package/.claude/agents/ant/aether-measurer.md +317 -0
  77. package/.claude/agents/ant/aether-probe.md +210 -0
  78. package/.claude/agents/ant/aether-queen.md +325 -0
  79. package/.claude/agents/ant/aether-route-setter.md +173 -0
  80. package/.claude/agents/ant/aether-sage.md +353 -0
  81. package/.claude/agents/ant/aether-scout.md +142 -0
  82. package/.claude/agents/ant/aether-surveyor-disciplines.md +416 -0
  83. package/.claude/agents/ant/aether-surveyor-nest.md +354 -0
  84. package/.claude/agents/ant/aether-surveyor-pathogens.md +288 -0
  85. package/.claude/agents/ant/aether-surveyor-provisions.md +359 -0
  86. package/.claude/agents/ant/aether-tracker.md +265 -0
  87. package/.claude/agents/ant/aether-watcher.md +244 -0
  88. package/.claude/agents/ant/aether-weaver.md +247 -0
  89. package/.claude/commands/ant/archaeology.md +341 -0
  90. package/.claude/commands/ant/build.md +1160 -0
  91. package/.claude/commands/ant/chaos.md +349 -0
  92. package/.claude/commands/ant/colonize.md +270 -0
  93. package/.claude/commands/ant/continue.md +1070 -0
  94. package/.claude/commands/ant/council.md +309 -0
  95. package/.claude/commands/ant/dream.md +265 -0
  96. package/.claude/commands/ant/entomb.md +487 -0
  97. package/.claude/commands/ant/feedback.md +78 -0
  98. package/.claude/commands/ant/flag.md +139 -0
  99. package/.claude/commands/ant/flags.md +155 -0
  100. package/.claude/commands/ant/focus.md +58 -0
  101. package/.claude/commands/ant/help.md +122 -0
  102. package/.claude/commands/ant/history.md +137 -0
  103. package/.claude/commands/ant/init.md +409 -0
  104. package/.claude/commands/ant/interpret.md +267 -0
  105. package/.claude/commands/ant/lay-eggs.md +201 -0
  106. package/.claude/commands/ant/maturity.md +102 -0
  107. package/.claude/commands/ant/memory-details.md +77 -0
  108. package/.claude/commands/ant/migrate-state.md +165 -0
  109. package/.claude/commands/ant/oracle.md +387 -0
  110. package/.claude/commands/ant/organize.md +227 -0
  111. package/.claude/commands/ant/pause-colony.md +247 -0
  112. package/.claude/commands/ant/phase.md +126 -0
  113. package/.claude/commands/ant/plan.md +544 -0
  114. package/.claude/commands/ant/redirect.md +58 -0
  115. package/.claude/commands/ant/resume-colony.md +182 -0
  116. package/.claude/commands/ant/resume.md +363 -0
  117. package/.claude/commands/ant/seal.md +306 -0
  118. package/.claude/commands/ant/status.md +272 -0
  119. package/.claude/commands/ant/swarm.md +361 -0
  120. package/.claude/commands/ant/tunnels.md +425 -0
  121. package/.claude/commands/ant/update.md +209 -0
  122. package/.claude/commands/ant/verify-castes.md +95 -0
  123. package/.claude/commands/ant/watch.md +238 -0
  124. package/.opencode/agents/aether-ambassador.md +140 -0
  125. package/.opencode/agents/aether-archaeologist.md +108 -0
  126. package/.opencode/agents/aether-auditor.md +144 -0
  127. package/.opencode/agents/aether-builder.md +184 -0
  128. package/.opencode/agents/aether-chaos.md +115 -0
  129. package/.opencode/agents/aether-chronicler.md +122 -0
  130. package/.opencode/agents/aether-gatekeeper.md +116 -0
  131. package/.opencode/agents/aether-includer.md +117 -0
  132. package/.opencode/agents/aether-keeper.md +177 -0
  133. package/.opencode/agents/aether-measurer.md +128 -0
  134. package/.opencode/agents/aether-probe.md +133 -0
  135. package/.opencode/agents/aether-queen.md +286 -0
  136. package/.opencode/agents/aether-route-setter.md +130 -0
  137. package/.opencode/agents/aether-sage.md +106 -0
  138. package/.opencode/agents/aether-scout.md +101 -0
  139. package/.opencode/agents/aether-surveyor-disciplines.md +386 -0
  140. package/.opencode/agents/aether-surveyor-nest.md +324 -0
  141. package/.opencode/agents/aether-surveyor-pathogens.md +259 -0
  142. package/.opencode/agents/aether-surveyor-provisions.md +329 -0
  143. package/.opencode/agents/aether-tracker.md +137 -0
  144. package/.opencode/agents/aether-watcher.md +174 -0
  145. package/.opencode/agents/aether-weaver.md +130 -0
  146. package/.opencode/commands/ant/archaeology.md +338 -0
  147. package/.opencode/commands/ant/build.md +1200 -0
  148. package/.opencode/commands/ant/chaos.md +346 -0
  149. package/.opencode/commands/ant/colonize.md +202 -0
  150. package/.opencode/commands/ant/continue.md +938 -0
  151. package/.opencode/commands/ant/council.md +305 -0
  152. package/.opencode/commands/ant/dream.md +262 -0
  153. package/.opencode/commands/ant/entomb.md +367 -0
  154. package/.opencode/commands/ant/feedback.md +80 -0
  155. package/.opencode/commands/ant/flag.md +137 -0
  156. package/.opencode/commands/ant/flags.md +153 -0
  157. package/.opencode/commands/ant/focus.md +56 -0
  158. package/.opencode/commands/ant/help.md +124 -0
  159. package/.opencode/commands/ant/history.md +127 -0
  160. package/.opencode/commands/ant/init.md +337 -0
  161. package/.opencode/commands/ant/interpret.md +256 -0
  162. package/.opencode/commands/ant/lay-eggs.md +141 -0
  163. package/.opencode/commands/ant/maturity.md +92 -0
  164. package/.opencode/commands/ant/memory-details.md +77 -0
  165. package/.opencode/commands/ant/migrate-state.md +153 -0
  166. package/.opencode/commands/ant/oracle.md +338 -0
  167. package/.opencode/commands/ant/organize.md +224 -0
  168. package/.opencode/commands/ant/pause-colony.md +220 -0
  169. package/.opencode/commands/ant/phase.md +123 -0
  170. package/.opencode/commands/ant/plan.md +531 -0
  171. package/.opencode/commands/ant/redirect.md +67 -0
  172. package/.opencode/commands/ant/resume-colony.md +178 -0
  173. package/.opencode/commands/ant/resume.md +363 -0
  174. package/.opencode/commands/ant/seal.md +247 -0
  175. package/.opencode/commands/ant/status.md +272 -0
  176. package/.opencode/commands/ant/swarm.md +357 -0
  177. package/.opencode/commands/ant/tunnels.md +406 -0
  178. package/.opencode/commands/ant/update.md +191 -0
  179. package/.opencode/commands/ant/verify-castes.md +85 -0
  180. package/.opencode/commands/ant/watch.md +220 -0
  181. package/.opencode/opencode.json +3 -0
  182. package/CHANGELOG.md +325 -0
  183. package/DISCLAIMER.md +74 -0
  184. package/LICENSE +21 -0
  185. package/README.md +258 -0
  186. package/bin/cli.js +2436 -0
  187. package/bin/generate-commands.sh +291 -0
  188. package/bin/lib/caste-colors.js +57 -0
  189. package/bin/lib/colors.js +76 -0
  190. package/bin/lib/errors.js +255 -0
  191. package/bin/lib/event-types.js +190 -0
  192. package/bin/lib/file-lock.js +695 -0
  193. package/bin/lib/init.js +454 -0
  194. package/bin/lib/logger.js +242 -0
  195. package/bin/lib/model-profiles.js +445 -0
  196. package/bin/lib/model-verify.js +288 -0
  197. package/bin/lib/nestmate-loader.js +130 -0
  198. package/bin/lib/proxy-health.js +253 -0
  199. package/bin/lib/spawn-logger.js +266 -0
  200. package/bin/lib/state-guard.js +602 -0
  201. package/bin/lib/state-sync.js +516 -0
  202. package/bin/lib/telemetry.js +441 -0
  203. package/bin/lib/update-transaction.js +1454 -0
  204. package/bin/npx-install.js +178 -0
  205. package/bin/sync-to-runtime.sh +6 -0
  206. package/bin/validate-package.sh +88 -0
  207. package/package.json +70 -0
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Event Types Module
4
+ *
5
+ * Defines standardized event types for audit trail in COLONY_STATE.json.
6
+ * Provides validation and creation helpers for event sourcing.
7
+ *
8
+ * @module bin/lib/event-types
9
+ */
10
+
11
+ /**
12
+ * Standardized event types for colony audit trail
13
+ * @readonly
14
+ * @enum {string}
15
+ */
16
+ const EventTypes = {
17
+ /** Phase transition from one phase to another */
18
+ PHASE_TRANSITION: 'phase_transition',
19
+ /** Phase build process started */
20
+ PHASE_BUILD_STARTED: 'phase_build_started',
21
+ /** Phase build process completed successfully */
22
+ PHASE_BUILD_COMPLETED: 'phase_build_completed',
23
+ /** Phase was rolled back to previous state */
24
+ PHASE_ROLLED_BACK: 'phase_rolled_back',
25
+ /** Checkpoint was created */
26
+ CHECKPOINT_CREATED: 'checkpoint_created',
27
+ /** Checkpoint was restored */
28
+ CHECKPOINT_RESTORED: 'checkpoint_restored',
29
+ /** Update process started */
30
+ UPDATE_STARTED: 'update_started',
31
+ /** Update process completed successfully */
32
+ UPDATE_COMPLETED: 'update_completed',
33
+ /** Update process failed */
34
+ UPDATE_FAILED: 'update_failed',
35
+ /** Iron Law violation detected */
36
+ IRON_LAW_VIOLATION: 'iron_law_violation',
37
+ };
38
+
39
+ /**
40
+ * Valid event type values for quick lookup
41
+ * @type {string[]}
42
+ */
43
+ const VALID_EVENT_TYPES = Object.values(EventTypes);
44
+
45
+ /**
46
+ * ISO 8601 timestamp regex for validation
47
+ * Matches: 2026-02-14T14:30:22.123Z or 2026-02-14T14:30:22Z
48
+ * @type {RegExp}
49
+ */
50
+ const ISO8601_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;
51
+
52
+ /**
53
+ * Validate an event object has all required fields and valid values
54
+ *
55
+ * @param {object} event - Event object to validate
56
+ * @returns {object} Validation result with valid flag and errors array
57
+ * @returns {boolean} result.valid - True if event is valid
58
+ * @returns {string[]} result.errors - Array of error messages if invalid
59
+ */
60
+ function validateEvent(event) {
61
+ const errors = [];
62
+
63
+ // Check event is an object
64
+ if (!event || typeof event !== 'object' || Array.isArray(event)) {
65
+ return {
66
+ valid: false,
67
+ errors: ['Event must be an object']
68
+ };
69
+ }
70
+
71
+ // Required fields
72
+ const requiredFields = ['timestamp', 'type', 'worker', 'details'];
73
+ for (const field of requiredFields) {
74
+ if (!(field in event)) {
75
+ errors.push(`Missing required field: ${field}`);
76
+ }
77
+ }
78
+
79
+ // If missing required fields, return early
80
+ if (errors.length > 0) {
81
+ return { valid: false, errors };
82
+ }
83
+
84
+ // Validate timestamp format (ISO 8601)
85
+ if (typeof event.timestamp !== 'string') {
86
+ errors.push('timestamp must be a string');
87
+ } else if (!ISO8601_REGEX.test(event.timestamp)) {
88
+ errors.push('timestamp must be valid ISO 8601 format (e.g., 2026-02-14T14:30:22Z)');
89
+ } else {
90
+ // Also validate it's a valid date
91
+ const date = new Date(event.timestamp);
92
+ if (isNaN(date.getTime())) {
93
+ errors.push('timestamp must be a valid date');
94
+ }
95
+ }
96
+
97
+ // Validate type is a valid EventType
98
+ if (typeof event.type !== 'string') {
99
+ errors.push('type must be a string');
100
+ } else if (!VALID_EVENT_TYPES.includes(event.type)) {
101
+ errors.push(`type must be a valid EventType: ${VALID_EVENT_TYPES.join(', ')}`);
102
+ }
103
+
104
+ // Validate worker is a non-empty string
105
+ if (typeof event.worker !== 'string') {
106
+ errors.push('worker must be a string');
107
+ } else if (event.worker.trim().length === 0) {
108
+ errors.push('worker must not be empty');
109
+ }
110
+
111
+ // Validate details is an object
112
+ if (typeof event.details !== 'object' || event.details === null) {
113
+ errors.push('details must be an object');
114
+ } else if (Array.isArray(event.details)) {
115
+ errors.push('details must be an object, not an array');
116
+ }
117
+
118
+ return {
119
+ valid: errors.length === 0,
120
+ errors
121
+ };
122
+ }
123
+
124
+ /**
125
+ * Create a new event object with validation
126
+ *
127
+ * @param {string} type - Event type from EventTypes
128
+ * @param {string} worker - Worker/agent name
129
+ * @param {object} [details={}] - Event-specific details
130
+ * @returns {object} Created event object
131
+ * @returns {string} result.timestamp - ISO 8601 timestamp
132
+ * @returns {string} result.type - Event type
133
+ * @returns {string} result.worker - Worker name
134
+ * @returns {object} result.details - Event details
135
+ * @throws {Error} If type is not a valid EventType
136
+ */
137
+ function createEvent(type, worker, details = {}) {
138
+ // Validate type
139
+ if (!VALID_EVENT_TYPES.includes(type)) {
140
+ throw new Error(
141
+ `Invalid event type: "${type}". Must be one of: ${VALID_EVENT_TYPES.join(', ')}`
142
+ );
143
+ }
144
+
145
+ // Get worker name from parameter, environment, or default
146
+ const workerName = worker || process.env.WORKER_NAME || 'unknown';
147
+
148
+ // Create event object
149
+ const event = {
150
+ timestamp: new Date().toISOString(),
151
+ type,
152
+ worker: workerName,
153
+ details: details || {}
154
+ };
155
+
156
+ // Validate the created event
157
+ const validation = validateEvent(event);
158
+ if (!validation.valid) {
159
+ throw new Error(`Created event failed validation: ${validation.errors.join(', ')}`);
160
+ }
161
+
162
+ return event;
163
+ }
164
+
165
+ /**
166
+ * Check if a string is a valid event type
167
+ *
168
+ * @param {string} type - Type to check
169
+ * @returns {boolean} True if valid event type
170
+ */
171
+ function isValidEventType(type) {
172
+ return typeof type === 'string' && VALID_EVENT_TYPES.includes(type);
173
+ }
174
+
175
+ /**
176
+ * Get all valid event types
177
+ *
178
+ * @returns {string[]} Array of valid event type strings
179
+ */
180
+ function getValidEventTypes() {
181
+ return [...VALID_EVENT_TYPES];
182
+ }
183
+
184
+ module.exports = {
185
+ EventTypes,
186
+ validateEvent,
187
+ createEvent,
188
+ isValidEventType,
189
+ getValidEventTypes,
190
+ };