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.
- package/.aether/CONTEXT.md +160 -0
- package/.aether/QUEEN.md +84 -0
- package/.aether/aether-utils.sh +7749 -0
- package/.aether/docs/QUEEN-SYSTEM.md +211 -0
- package/.aether/docs/README.md +68 -0
- package/.aether/docs/caste-system.md +48 -0
- package/.aether/docs/disciplines/DISCIPLINES.md +93 -0
- package/.aether/docs/disciplines/coding-standards.md +197 -0
- package/.aether/docs/disciplines/debugging.md +207 -0
- package/.aether/docs/disciplines/learning.md +254 -0
- package/.aether/docs/disciplines/tdd.md +257 -0
- package/.aether/docs/disciplines/verification-loop.md +167 -0
- package/.aether/docs/disciplines/verification.md +116 -0
- package/.aether/docs/error-codes.md +268 -0
- package/.aether/docs/known-issues.md +233 -0
- package/.aether/docs/pheromones.md +205 -0
- package/.aether/docs/queen-commands.md +97 -0
- package/.aether/exchange/colony-registry.xml +11 -0
- package/.aether/exchange/pheromone-xml.sh +575 -0
- package/.aether/exchange/pheromones.xml +87 -0
- package/.aether/exchange/queen-wisdom.xml +14 -0
- package/.aether/exchange/registry-xml.sh +273 -0
- package/.aether/exchange/wisdom-xml.sh +319 -0
- package/.aether/midden/approach-changes.md +5 -0
- package/.aether/midden/build-failures.md +5 -0
- package/.aether/midden/test-failures.md +5 -0
- package/.aether/model-profiles.yaml +100 -0
- package/.aether/rules/aether-colony.md +134 -0
- package/.aether/schemas/aether-types.xsd +255 -0
- package/.aether/schemas/colony-registry.xsd +309 -0
- package/.aether/schemas/example-prompt-builder.xml +234 -0
- package/.aether/schemas/pheromone.xsd +163 -0
- package/.aether/schemas/prompt.xsd +416 -0
- package/.aether/schemas/queen-wisdom.xsd +325 -0
- package/.aether/schemas/worker-priming.xsd +276 -0
- package/.aether/templates/QUEEN.md.template +79 -0
- package/.aether/templates/colony-state-reset.jq.template +22 -0
- package/.aether/templates/colony-state.template.json +35 -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 +7 -0
- package/.aether/templates/pheromones.template.json +6 -0
- package/.aether/templates/session.template.json +9 -0
- package/.aether/utils/atomic-write.sh +219 -0
- package/.aether/utils/chamber-compare.sh +193 -0
- package/.aether/utils/chamber-utils.sh +297 -0
- package/.aether/utils/colorize-log.sh +132 -0
- package/.aether/utils/error-handler.sh +212 -0
- package/.aether/utils/file-lock.sh +158 -0
- package/.aether/utils/queen-to-md.xsl +395 -0
- package/.aether/utils/semantic-cli.sh +413 -0
- package/.aether/utils/spawn-tree.sh +428 -0
- package/.aether/utils/spawn-with-model.sh +56 -0
- package/.aether/utils/state-loader.sh +215 -0
- package/.aether/utils/swarm-display.sh +268 -0
- package/.aether/utils/watch-spawn-tree.sh +253 -0
- package/.aether/utils/xml-compose.sh +253 -0
- package/.aether/utils/xml-convert.sh +273 -0
- package/.aether/utils/xml-core.sh +186 -0
- package/.aether/utils/xml-query.sh +201 -0
- package/.aether/utils/xml-utils.sh +110 -0
- package/.aether/workers.md +765 -0
- package/.claude/agents/ant/aether-ambassador.md +264 -0
- package/.claude/agents/ant/aether-archaeologist.md +322 -0
- package/.claude/agents/ant/aether-auditor.md +266 -0
- package/.claude/agents/ant/aether-builder.md +187 -0
- package/.claude/agents/ant/aether-chaos.md +268 -0
- package/.claude/agents/ant/aether-chronicler.md +304 -0
- package/.claude/agents/ant/aether-gatekeeper.md +325 -0
- package/.claude/agents/ant/aether-includer.md +373 -0
- package/.claude/agents/ant/aether-keeper.md +271 -0
- package/.claude/agents/ant/aether-measurer.md +317 -0
- package/.claude/agents/ant/aether-probe.md +210 -0
- package/.claude/agents/ant/aether-queen.md +325 -0
- package/.claude/agents/ant/aether-route-setter.md +173 -0
- package/.claude/agents/ant/aether-sage.md +353 -0
- package/.claude/agents/ant/aether-scout.md +142 -0
- package/.claude/agents/ant/aether-surveyor-disciplines.md +416 -0
- package/.claude/agents/ant/aether-surveyor-nest.md +354 -0
- package/.claude/agents/ant/aether-surveyor-pathogens.md +288 -0
- package/.claude/agents/ant/aether-surveyor-provisions.md +359 -0
- package/.claude/agents/ant/aether-tracker.md +265 -0
- package/.claude/agents/ant/aether-watcher.md +244 -0
- package/.claude/agents/ant/aether-weaver.md +247 -0
- package/.claude/commands/ant/archaeology.md +341 -0
- package/.claude/commands/ant/build.md +1160 -0
- package/.claude/commands/ant/chaos.md +349 -0
- package/.claude/commands/ant/colonize.md +270 -0
- package/.claude/commands/ant/continue.md +1070 -0
- package/.claude/commands/ant/council.md +309 -0
- package/.claude/commands/ant/dream.md +265 -0
- package/.claude/commands/ant/entomb.md +487 -0
- package/.claude/commands/ant/feedback.md +78 -0
- package/.claude/commands/ant/flag.md +139 -0
- package/.claude/commands/ant/flags.md +155 -0
- package/.claude/commands/ant/focus.md +58 -0
- package/.claude/commands/ant/help.md +122 -0
- package/.claude/commands/ant/history.md +137 -0
- package/.claude/commands/ant/init.md +409 -0
- package/.claude/commands/ant/interpret.md +267 -0
- package/.claude/commands/ant/lay-eggs.md +201 -0
- package/.claude/commands/ant/maturity.md +102 -0
- package/.claude/commands/ant/memory-details.md +77 -0
- package/.claude/commands/ant/migrate-state.md +165 -0
- package/.claude/commands/ant/oracle.md +387 -0
- package/.claude/commands/ant/organize.md +227 -0
- package/.claude/commands/ant/pause-colony.md +247 -0
- package/.claude/commands/ant/phase.md +126 -0
- package/.claude/commands/ant/plan.md +544 -0
- package/.claude/commands/ant/redirect.md +58 -0
- package/.claude/commands/ant/resume-colony.md +182 -0
- package/.claude/commands/ant/resume.md +363 -0
- package/.claude/commands/ant/seal.md +306 -0
- package/.claude/commands/ant/status.md +272 -0
- package/.claude/commands/ant/swarm.md +361 -0
- package/.claude/commands/ant/tunnels.md +425 -0
- package/.claude/commands/ant/update.md +209 -0
- package/.claude/commands/ant/verify-castes.md +95 -0
- package/.claude/commands/ant/watch.md +238 -0
- package/.opencode/agents/aether-ambassador.md +140 -0
- package/.opencode/agents/aether-archaeologist.md +108 -0
- package/.opencode/agents/aether-auditor.md +144 -0
- package/.opencode/agents/aether-builder.md +184 -0
- package/.opencode/agents/aether-chaos.md +115 -0
- package/.opencode/agents/aether-chronicler.md +122 -0
- package/.opencode/agents/aether-gatekeeper.md +116 -0
- package/.opencode/agents/aether-includer.md +117 -0
- package/.opencode/agents/aether-keeper.md +177 -0
- package/.opencode/agents/aether-measurer.md +128 -0
- package/.opencode/agents/aether-probe.md +133 -0
- package/.opencode/agents/aether-queen.md +286 -0
- package/.opencode/agents/aether-route-setter.md +130 -0
- package/.opencode/agents/aether-sage.md +106 -0
- package/.opencode/agents/aether-scout.md +101 -0
- package/.opencode/agents/aether-surveyor-disciplines.md +386 -0
- package/.opencode/agents/aether-surveyor-nest.md +324 -0
- package/.opencode/agents/aether-surveyor-pathogens.md +259 -0
- package/.opencode/agents/aether-surveyor-provisions.md +329 -0
- package/.opencode/agents/aether-tracker.md +137 -0
- package/.opencode/agents/aether-watcher.md +174 -0
- package/.opencode/agents/aether-weaver.md +130 -0
- package/.opencode/commands/ant/archaeology.md +338 -0
- package/.opencode/commands/ant/build.md +1200 -0
- package/.opencode/commands/ant/chaos.md +346 -0
- package/.opencode/commands/ant/colonize.md +202 -0
- package/.opencode/commands/ant/continue.md +938 -0
- package/.opencode/commands/ant/council.md +305 -0
- package/.opencode/commands/ant/dream.md +262 -0
- package/.opencode/commands/ant/entomb.md +367 -0
- package/.opencode/commands/ant/feedback.md +80 -0
- package/.opencode/commands/ant/flag.md +137 -0
- package/.opencode/commands/ant/flags.md +153 -0
- package/.opencode/commands/ant/focus.md +56 -0
- package/.opencode/commands/ant/help.md +124 -0
- package/.opencode/commands/ant/history.md +127 -0
- package/.opencode/commands/ant/init.md +337 -0
- package/.opencode/commands/ant/interpret.md +256 -0
- package/.opencode/commands/ant/lay-eggs.md +141 -0
- package/.opencode/commands/ant/maturity.md +92 -0
- package/.opencode/commands/ant/memory-details.md +77 -0
- package/.opencode/commands/ant/migrate-state.md +153 -0
- package/.opencode/commands/ant/oracle.md +338 -0
- package/.opencode/commands/ant/organize.md +224 -0
- package/.opencode/commands/ant/pause-colony.md +220 -0
- package/.opencode/commands/ant/phase.md +123 -0
- package/.opencode/commands/ant/plan.md +531 -0
- package/.opencode/commands/ant/redirect.md +67 -0
- package/.opencode/commands/ant/resume-colony.md +178 -0
- package/.opencode/commands/ant/resume.md +363 -0
- package/.opencode/commands/ant/seal.md +247 -0
- package/.opencode/commands/ant/status.md +272 -0
- package/.opencode/commands/ant/swarm.md +357 -0
- package/.opencode/commands/ant/tunnels.md +406 -0
- package/.opencode/commands/ant/update.md +191 -0
- package/.opencode/commands/ant/verify-castes.md +85 -0
- package/.opencode/commands/ant/watch.md +220 -0
- package/.opencode/opencode.json +3 -0
- package/CHANGELOG.md +325 -0
- package/DISCLAIMER.md +74 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/bin/cli.js +2436 -0
- package/bin/generate-commands.sh +291 -0
- package/bin/lib/caste-colors.js +57 -0
- package/bin/lib/colors.js +76 -0
- package/bin/lib/errors.js +255 -0
- package/bin/lib/event-types.js +190 -0
- package/bin/lib/file-lock.js +695 -0
- package/bin/lib/init.js +454 -0
- package/bin/lib/logger.js +242 -0
- package/bin/lib/model-profiles.js +445 -0
- package/bin/lib/model-verify.js +288 -0
- package/bin/lib/nestmate-loader.js +130 -0
- package/bin/lib/proxy-health.js +253 -0
- package/bin/lib/spawn-logger.js +266 -0
- package/bin/lib/state-guard.js +602 -0
- package/bin/lib/state-sync.js +516 -0
- package/bin/lib/telemetry.js +441 -0
- package/bin/lib/update-transaction.js +1454 -0
- package/bin/npx-install.js +178 -0
- package/bin/sync-to-runtime.sh +6 -0
- package/bin/validate-package.sh +88 -0
- 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
|
+
};
|