aios-core 4.2.5 → 4.2.7
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/.aios-core/core/code-intel/code-intel-client.js +280 -0
- package/.aios-core/core/code-intel/code-intel-enricher.js +159 -0
- package/.aios-core/core/code-intel/index.js +137 -0
- package/.aios-core/core/code-intel/providers/code-graph-provider.js +201 -0
- package/.aios-core/core/code-intel/providers/provider-interface.js +108 -0
- package/.aios-core/core/orchestration/context-manager.js +333 -5
- package/.aios-core/core/orchestration/dashboard-integration.js +17 -1
- package/.aios-core/core/orchestration/execution-profile-resolver.js +107 -0
- package/.aios-core/core/orchestration/index.js +3 -0
- package/.aios-core/core/orchestration/skill-dispatcher.js +2 -0
- package/.aios-core/core/orchestration/subagent-prompt-builder.js +2 -0
- package/.aios-core/core/orchestration/workflow-orchestrator.js +113 -5
- package/.aios-core/data/entity-registry.yaml +44 -22
- package/.aios-core/development/agents/ux-design-expert.md +1 -1
- package/.aios-core/development/checklists/brownfield-compatibility-checklist.md +114 -0
- package/.aios-core/development/scripts/workflow-state-manager.js +128 -1
- package/.aios-core/development/tasks/next.md +36 -5
- package/.aios-core/hooks/ids-post-commit.js +29 -1
- package/.aios-core/hooks/ids-pre-push.js +29 -1
- package/.aios-core/infrastructure/contracts/compatibility/aios-4.0.4.yaml +44 -0
- package/.aios-core/infrastructure/scripts/validate-parity.js +238 -2
- package/.aios-core/install-manifest.yaml +63 -27
- package/.aios-core/product/templates/brownfield-risk-report-tmpl.yaml +277 -0
- package/.aios-core/workflow-intelligence/engine/suggestion-engine.js +114 -5
- package/LICENSE +13 -1
- package/README.md +39 -9
- package/package.json +8 -6
- package/packages/installer/src/wizard/ide-config-generator.js +0 -117
- package/packages/installer/src/wizard/index.js +2 -118
- package/packages/installer/src/wizard/pro-setup.js +58 -12
- package/pro/license/license-api.js +9 -9
- package/scripts/semantic-lint.js +190 -0
|
@@ -252,12 +252,28 @@ class DashboardIntegration extends EventEmitter {
|
|
|
252
252
|
await fs.writeJson(this.statusPath, status, { spaces: 2 });
|
|
253
253
|
this.emit('statusUpdated', status);
|
|
254
254
|
} catch (error) {
|
|
255
|
-
this.
|
|
255
|
+
this._emitSafeError({ type: 'statusUpdate', error });
|
|
256
256
|
}
|
|
257
257
|
|
|
258
258
|
return status;
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Emit error event only when listeners are present, otherwise degrade to warning.
|
|
263
|
+
* Avoids unhandled EventEmitter 'error' exceptions in background update flows.
|
|
264
|
+
* @private
|
|
265
|
+
* @param {Object} payload
|
|
266
|
+
*/
|
|
267
|
+
_emitSafeError(payload) {
|
|
268
|
+
if (this.listenerCount('error') > 0) {
|
|
269
|
+
this.emit('error', payload);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const message = payload?.error?.message || 'unknown dashboard error';
|
|
274
|
+
console.warn(`[DashboardIntegration] ${payload?.type || 'error'}: ${message}`);
|
|
275
|
+
}
|
|
276
|
+
|
|
261
277
|
/**
|
|
262
278
|
* Build status object (AC2)
|
|
263
279
|
* @returns {Object} Status object
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const VALID_PROFILES = ['safe', 'balanced', 'aggressive'];
|
|
4
|
+
const VALID_CONTEXTS = ['production', 'migration', 'security-sensitive', 'development'];
|
|
5
|
+
|
|
6
|
+
const PROFILE_POLICIES = {
|
|
7
|
+
safe: {
|
|
8
|
+
require_confirmation: true,
|
|
9
|
+
require_tests_before_handoff: true,
|
|
10
|
+
max_parallel_changes: 1,
|
|
11
|
+
allow_destructive_operations: false,
|
|
12
|
+
allow_autonomous_refactors: false,
|
|
13
|
+
},
|
|
14
|
+
balanced: {
|
|
15
|
+
require_confirmation: 'high-risk-only',
|
|
16
|
+
require_tests_before_handoff: true,
|
|
17
|
+
max_parallel_changes: 3,
|
|
18
|
+
allow_destructive_operations: false,
|
|
19
|
+
allow_autonomous_refactors: true,
|
|
20
|
+
},
|
|
21
|
+
aggressive: {
|
|
22
|
+
require_confirmation: false,
|
|
23
|
+
require_tests_before_handoff: false,
|
|
24
|
+
max_parallel_changes: 8,
|
|
25
|
+
allow_destructive_operations: false,
|
|
26
|
+
allow_autonomous_refactors: true,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
function normalizeProfile(profile) {
|
|
31
|
+
const value = String(profile || '').trim().toLowerCase();
|
|
32
|
+
return VALID_PROFILES.includes(value) ? value : null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function normalizeContext(context) {
|
|
36
|
+
const value = String(context || '').trim().toLowerCase();
|
|
37
|
+
return VALID_CONTEXTS.includes(value) ? value : 'development';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function resolveExecutionProfile(input = {}) {
|
|
41
|
+
const context = normalizeContext(input.context);
|
|
42
|
+
const explicitProfile = normalizeProfile(input.explicitProfile);
|
|
43
|
+
const yolo = Boolean(input.yolo);
|
|
44
|
+
const reasons = [];
|
|
45
|
+
|
|
46
|
+
if (explicitProfile) {
|
|
47
|
+
reasons.push(`explicit profile selected: ${explicitProfile}`);
|
|
48
|
+
return {
|
|
49
|
+
profile: explicitProfile,
|
|
50
|
+
context,
|
|
51
|
+
policy: PROFILE_POLICIES[explicitProfile],
|
|
52
|
+
reasons,
|
|
53
|
+
source: 'explicit',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (context === 'production' || context === 'security-sensitive') {
|
|
58
|
+
reasons.push(`context "${context}" enforces safe profile`);
|
|
59
|
+
return {
|
|
60
|
+
profile: 'safe',
|
|
61
|
+
context,
|
|
62
|
+
policy: PROFILE_POLICIES.safe,
|
|
63
|
+
reasons,
|
|
64
|
+
source: 'context',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (context === 'migration') {
|
|
69
|
+
reasons.push('migration context enforces balanced profile');
|
|
70
|
+
return {
|
|
71
|
+
profile: 'balanced',
|
|
72
|
+
context,
|
|
73
|
+
policy: PROFILE_POLICIES.balanced,
|
|
74
|
+
reasons,
|
|
75
|
+
source: 'context',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (yolo) {
|
|
80
|
+
reasons.push('yolo mode enabled for non-critical context');
|
|
81
|
+
return {
|
|
82
|
+
profile: 'aggressive',
|
|
83
|
+
context,
|
|
84
|
+
policy: PROFILE_POLICIES.aggressive,
|
|
85
|
+
reasons,
|
|
86
|
+
source: 'yolo',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
reasons.push('default profile for standard development context');
|
|
91
|
+
return {
|
|
92
|
+
profile: 'balanced',
|
|
93
|
+
context,
|
|
94
|
+
policy: PROFILE_POLICIES.balanced,
|
|
95
|
+
reasons,
|
|
96
|
+
source: 'default',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
module.exports = {
|
|
101
|
+
VALID_PROFILES,
|
|
102
|
+
VALID_CONTEXTS,
|
|
103
|
+
PROFILE_POLICIES,
|
|
104
|
+
normalizeProfile,
|
|
105
|
+
normalizeContext,
|
|
106
|
+
resolveExecutionProfile,
|
|
107
|
+
};
|
|
@@ -22,6 +22,7 @@ const ParallelExecutor = require('./parallel-executor');
|
|
|
22
22
|
const TechStackDetector = require('./tech-stack-detector');
|
|
23
23
|
const ConditionEvaluator = require('./condition-evaluator');
|
|
24
24
|
const SkillDispatcher = require('./skill-dispatcher');
|
|
25
|
+
const executionProfileResolver = require('./execution-profile-resolver');
|
|
25
26
|
|
|
26
27
|
// Epic 0: Master Orchestrator (ADE)
|
|
27
28
|
const MasterOrchestrator = require('./master-orchestrator');
|
|
@@ -159,6 +160,8 @@ module.exports = {
|
|
|
159
160
|
TechStackDetector,
|
|
160
161
|
ConditionEvaluator,
|
|
161
162
|
SkillDispatcher,
|
|
163
|
+
ExecutionProfileResolver: executionProfileResolver,
|
|
164
|
+
resolveExecutionProfile: executionProfileResolver.resolveExecutionProfile,
|
|
162
165
|
|
|
163
166
|
// Epic 0: Orchestrator constants
|
|
164
167
|
OrchestratorState: MasterOrchestrator.OrchestratorState,
|
|
@@ -170,6 +170,8 @@ class SkillDispatcher {
|
|
|
170
170
|
workflowId: context.workflowId,
|
|
171
171
|
yoloMode: context.yoloMode || false,
|
|
172
172
|
previousPhases: context.previousPhases || {},
|
|
173
|
+
executionProfile: context.executionProfile || null,
|
|
174
|
+
executionPolicy: context.executionPolicy || null,
|
|
173
175
|
},
|
|
174
176
|
};
|
|
175
177
|
}
|
|
@@ -299,7 +299,9 @@ ${agentDef}
|
|
|
299
299
|
**Task File:** ${taskFile}
|
|
300
300
|
**Expected Output:** ${context.creates || 'See task definition'}
|
|
301
301
|
**Execution Mode:** ${context.yoloMode ? 'YOLO (autonomous)' : 'Interactive'}
|
|
302
|
+
**Execution Profile:** ${context.executionProfile || 'balanced'}
|
|
302
303
|
**Elicitation Required:** ${context.elicit ? 'Yes' : 'No'}
|
|
304
|
+
**Risk Policy:** ${JSON.stringify(context.executionPolicy || {}, null, 0)}
|
|
303
305
|
|
|
304
306
|
### Complete Task Definition:
|
|
305
307
|
|
|
@@ -23,6 +23,7 @@ const ChecklistRunner = require('./checklist-runner');
|
|
|
23
23
|
const TechStackDetector = require('./tech-stack-detector');
|
|
24
24
|
const ConditionEvaluator = require('./condition-evaluator');
|
|
25
25
|
const SkillDispatcher = require('./skill-dispatcher');
|
|
26
|
+
const { resolveExecutionProfile } = require('./execution-profile-resolver');
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Orchestrates multi-agent workflow execution
|
|
@@ -41,11 +42,15 @@ class WorkflowOrchestrator {
|
|
|
41
42
|
this.workflowPath = workflowPath;
|
|
42
43
|
this.options = {
|
|
43
44
|
yolo: options.yolo || false,
|
|
45
|
+
executionProfile: options.executionProfile || null,
|
|
46
|
+
executionContext: options.executionContext || 'development',
|
|
44
47
|
parallel: options.parallel !== false, // Default true
|
|
45
48
|
onPhaseStart: options.onPhaseStart || this._defaultPhaseStart.bind(this),
|
|
46
49
|
onPhaseComplete: options.onPhaseComplete || this._defaultPhaseComplete.bind(this),
|
|
47
50
|
dispatchSubagent: options.dispatchSubagent || null,
|
|
48
51
|
projectRoot: options.projectRoot || process.cwd(),
|
|
52
|
+
confidenceThreshold: this._resolveConfidenceThreshold(options.confidenceThreshold),
|
|
53
|
+
enableConfidenceGate: options.enableConfidenceGate !== false,
|
|
49
54
|
};
|
|
50
55
|
|
|
51
56
|
this.workflow = null;
|
|
@@ -59,6 +64,11 @@ class WorkflowOrchestrator {
|
|
|
59
64
|
this.skillDispatcher = new SkillDispatcher(this.options);
|
|
60
65
|
this.conditionEvaluator = null; // Initialized after pre-flight detection
|
|
61
66
|
this.techStackProfile = null; // Populated by pre-flight detection
|
|
67
|
+
this.executionProfile = resolveExecutionProfile({
|
|
68
|
+
explicitProfile: this.options.executionProfile,
|
|
69
|
+
context: this.options.executionContext,
|
|
70
|
+
yolo: this.options.yolo,
|
|
71
|
+
});
|
|
62
72
|
|
|
63
73
|
// Execution state
|
|
64
74
|
this.executionState = {
|
|
@@ -395,8 +405,15 @@ class WorkflowOrchestrator {
|
|
|
395
405
|
}
|
|
396
406
|
}
|
|
397
407
|
|
|
398
|
-
// Generate execution summary
|
|
399
|
-
|
|
408
|
+
// Generate execution summary + confidence gate
|
|
409
|
+
const summary = this._generateExecutionSummary();
|
|
410
|
+
if (summary.confidenceGate?.enabled && !summary.confidenceGate.passed) {
|
|
411
|
+
await this.contextManager.markFailed(
|
|
412
|
+
`Delivery confidence ${summary.deliveryConfidence.score}% below threshold ${summary.confidenceGate.threshold}%`,
|
|
413
|
+
this.executionState.currentPhase,
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
return summary;
|
|
400
417
|
}
|
|
401
418
|
|
|
402
419
|
/**
|
|
@@ -478,7 +495,9 @@ class WorkflowOrchestrator {
|
|
|
478
495
|
|
|
479
496
|
// V3.1: Save skip result to context with reason
|
|
480
497
|
const skipResult = this.skillDispatcher.createSkipResult(phase, skipReason);
|
|
481
|
-
await this.contextManager.savePhaseOutput(phaseNum, skipResult
|
|
498
|
+
await this.contextManager.savePhaseOutput(phaseNum, skipResult, {
|
|
499
|
+
handoffTarget: this._getNextPhaseHandoffTarget(phaseNum),
|
|
500
|
+
});
|
|
482
501
|
|
|
483
502
|
return { skipped: true, phase: phaseNum, reason: skipReason };
|
|
484
503
|
}
|
|
@@ -522,6 +541,8 @@ class WorkflowOrchestrator {
|
|
|
522
541
|
notes: phase.notes,
|
|
523
542
|
checklist: phase.checklist,
|
|
524
543
|
template: phase.template,
|
|
544
|
+
executionProfile: this.executionProfile.profile,
|
|
545
|
+
executionPolicy: this.executionProfile.policy,
|
|
525
546
|
},
|
|
526
547
|
);
|
|
527
548
|
|
|
@@ -534,6 +555,8 @@ class WorkflowOrchestrator {
|
|
|
534
555
|
...context,
|
|
535
556
|
workflowId: this.workflow.workflow?.id,
|
|
536
557
|
yoloMode: this.options.yolo,
|
|
558
|
+
executionProfile: this.executionProfile.profile,
|
|
559
|
+
executionPolicy: this.executionProfile.policy,
|
|
537
560
|
previousPhases: this.executionState.completedPhases,
|
|
538
561
|
},
|
|
539
562
|
techStackProfile: this.techStackProfile,
|
|
@@ -545,6 +568,11 @@ class WorkflowOrchestrator {
|
|
|
545
568
|
` 🚀 ${this.skillDispatcher.formatDispatchLog(dispatchPayload).split('\n')[0]}`,
|
|
546
569
|
),
|
|
547
570
|
);
|
|
571
|
+
console.log(
|
|
572
|
+
chalk.gray(
|
|
573
|
+
` 🛡️ Execution profile: ${this.executionProfile.profile} (${this.executionProfile.context})`,
|
|
574
|
+
),
|
|
575
|
+
);
|
|
548
576
|
|
|
549
577
|
// Dispatch to subagent
|
|
550
578
|
let result;
|
|
@@ -556,7 +584,8 @@ class WorkflowOrchestrator {
|
|
|
556
584
|
agentId: phase.agent,
|
|
557
585
|
prompt,
|
|
558
586
|
phase,
|
|
559
|
-
context,
|
|
587
|
+
context: dispatchPayload.context,
|
|
588
|
+
baseContext: context,
|
|
560
589
|
});
|
|
561
590
|
|
|
562
591
|
// V3.1: Parse and normalize skill output
|
|
@@ -586,6 +615,8 @@ class WorkflowOrchestrator {
|
|
|
586
615
|
result,
|
|
587
616
|
validation,
|
|
588
617
|
timestamp: new Date().toISOString(),
|
|
618
|
+
}, {
|
|
619
|
+
handoffTarget: this._getNextPhaseHandoffTarget(phaseNum),
|
|
589
620
|
});
|
|
590
621
|
|
|
591
622
|
// Notify phase complete
|
|
@@ -615,6 +646,31 @@ class WorkflowOrchestrator {
|
|
|
615
646
|
return this._evaluateConditionLegacy(condition);
|
|
616
647
|
}
|
|
617
648
|
|
|
649
|
+
/**
|
|
650
|
+
* Determine next phase handoff target from workflow sequence.
|
|
651
|
+
* @private
|
|
652
|
+
*/
|
|
653
|
+
_getNextPhaseHandoffTarget(currentPhaseNum) {
|
|
654
|
+
const sequence = Array.isArray(this.workflow?.sequence) ? this.workflow.sequence : [];
|
|
655
|
+
const currentIndex = sequence.findIndex((p) => p && p.phase === currentPhaseNum);
|
|
656
|
+
if (currentIndex < 0) {
|
|
657
|
+
return { phase: null, agent: null };
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
for (let i = currentIndex + 1; i < sequence.length; i += 1) {
|
|
661
|
+
const next = sequence[i];
|
|
662
|
+
if (!next || next.workflow_end || !next.phase) {
|
|
663
|
+
continue;
|
|
664
|
+
}
|
|
665
|
+
return {
|
|
666
|
+
phase: next.phase,
|
|
667
|
+
agent: next.agent || null,
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
return { phase: null, agent: null };
|
|
672
|
+
}
|
|
673
|
+
|
|
618
674
|
/**
|
|
619
675
|
* Legacy condition evaluation (backward compatibility)
|
|
620
676
|
* @private
|
|
@@ -703,7 +759,8 @@ class WorkflowOrchestrator {
|
|
|
703
759
|
const minutes = Math.floor(duration / 60000);
|
|
704
760
|
const seconds = Math.floor((duration % 60000) / 1000);
|
|
705
761
|
|
|
706
|
-
|
|
762
|
+
const deliveryConfidence = this.contextManager?.getDeliveryConfidence?.() || null;
|
|
763
|
+
const summary = {
|
|
707
764
|
workflow: this.workflow.workflow?.id,
|
|
708
765
|
status: this.executionState.failedPhases.length === 0 ? 'completed' : 'completed_with_errors',
|
|
709
766
|
duration: `${minutes}m ${seconds}s`,
|
|
@@ -717,6 +774,57 @@ class WorkflowOrchestrator {
|
|
|
717
774
|
failedPhases: this.executionState.failedPhases,
|
|
718
775
|
skippedPhases: this.executionState.skippedPhases,
|
|
719
776
|
outputs: this.contextManager?.getPreviousPhaseOutputs() || {},
|
|
777
|
+
deliveryConfidence,
|
|
778
|
+
};
|
|
779
|
+
|
|
780
|
+
const confidenceGate = this._evaluateConfidenceGate(deliveryConfidence);
|
|
781
|
+
if (confidenceGate.enabled) {
|
|
782
|
+
summary.confidenceGate = confidenceGate;
|
|
783
|
+
if (!confidenceGate.passed && summary.status === 'completed') {
|
|
784
|
+
summary.status = 'failed_confidence_gate';
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
return summary;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* Resolve confidence threshold from explicit option > env > default.
|
|
793
|
+
* @private
|
|
794
|
+
*/
|
|
795
|
+
_resolveConfidenceThreshold(explicitThreshold) {
|
|
796
|
+
const explicit = Number(explicitThreshold);
|
|
797
|
+
if (Number.isFinite(explicit)) {
|
|
798
|
+
return explicit;
|
|
799
|
+
}
|
|
800
|
+
const envThreshold = Number(process.env.AIOS_DELIVERY_CONFIDENCE_THRESHOLD);
|
|
801
|
+
return Number.isFinite(envThreshold) ? envThreshold : 70;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/**
|
|
805
|
+
* Evaluate delivery confidence gate.
|
|
806
|
+
* @private
|
|
807
|
+
*/
|
|
808
|
+
_evaluateConfidenceGate(deliveryConfidence) {
|
|
809
|
+
if (!this.options.enableConfidenceGate) {
|
|
810
|
+
return { enabled: false, threshold: this.options.confidenceThreshold, passed: true };
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
if (!deliveryConfidence || !Number.isFinite(deliveryConfidence.score)) {
|
|
814
|
+
return {
|
|
815
|
+
enabled: true,
|
|
816
|
+
threshold: this.options.confidenceThreshold,
|
|
817
|
+
passed: false,
|
|
818
|
+
reason: 'delivery_confidence_unavailable',
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
const passed = deliveryConfidence.score >= this.options.confidenceThreshold;
|
|
823
|
+
return {
|
|
824
|
+
enabled: true,
|
|
825
|
+
threshold: this.options.confidenceThreshold,
|
|
826
|
+
score: deliveryConfidence.score,
|
|
827
|
+
passed,
|
|
720
828
|
};
|
|
721
829
|
}
|
|
722
830
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
metadata:
|
|
2
2
|
version: 1.0.0
|
|
3
|
-
lastUpdated: '2026-02-
|
|
4
|
-
entityCount:
|
|
3
|
+
lastUpdated: '2026-02-16T04:49:07.416Z'
|
|
4
|
+
entityCount: 506
|
|
5
5
|
checksumAlgorithm: sha256
|
|
6
6
|
entities:
|
|
7
7
|
tasks:
|
|
@@ -1952,13 +1952,14 @@ entities:
|
|
|
1952
1952
|
usedBy: []
|
|
1953
1953
|
dependencies:
|
|
1954
1954
|
- suggestion-engine
|
|
1955
|
+
- workflow-state-manager
|
|
1955
1956
|
- output-formatter
|
|
1956
1957
|
adaptability:
|
|
1957
1958
|
score: 0.8
|
|
1958
1959
|
constraints: []
|
|
1959
1960
|
extensionPoints: []
|
|
1960
|
-
checksum: sha256:
|
|
1961
|
-
lastVerified: '2026-02-
|
|
1961
|
+
checksum: sha256:d9c84f8892367cd8e1bd453dd08876d051bcc368ca9eacf5d2babb26235427fb
|
|
1962
|
+
lastVerified: '2026-02-16T01:52:27.944Z'
|
|
1962
1963
|
orchestrate-resume:
|
|
1963
1964
|
path: .aios-core/development/tasks/orchestrate-resume.md
|
|
1964
1965
|
type: task
|
|
@@ -4764,21 +4765,24 @@ entities:
|
|
|
4764
4765
|
extensionPoints: []
|
|
4765
4766
|
checksum: sha256:e8345404f17977a268b917a4ff86e4f10f80174a6bb572865e5413c8f7dd217a
|
|
4766
4767
|
lastVerified: '2026-02-15T17:43:13.184Z'
|
|
4767
|
-
|
|
4768
|
-
path: .aios-core/product/templates/
|
|
4768
|
+
brownfield-risk-report-tmpl:
|
|
4769
|
+
path: .aios-core/product/templates/brownfield-risk-report-tmpl.yaml
|
|
4769
4770
|
type: template
|
|
4770
|
-
purpose:
|
|
4771
|
+
purpose: '>'
|
|
4771
4772
|
keywords:
|
|
4772
|
-
-
|
|
4773
|
-
-
|
|
4773
|
+
- brownfield
|
|
4774
|
+
- risk
|
|
4775
|
+
- report
|
|
4776
|
+
- tmpl
|
|
4777
|
+
- template
|
|
4774
4778
|
usedBy: []
|
|
4775
4779
|
dependencies: []
|
|
4776
4780
|
adaptability:
|
|
4777
4781
|
score: 0.5
|
|
4778
4782
|
constraints: []
|
|
4779
4783
|
extensionPoints: []
|
|
4780
|
-
checksum: sha256:
|
|
4781
|
-
lastVerified: '2026-02-
|
|
4784
|
+
checksum: sha256:173adec3131f0924bc7d64c10f54386bb85dcadc14e6ff3fb9bb2f8172caf162
|
|
4785
|
+
lastVerified: '2026-02-16T04:49:07.415Z'
|
|
4782
4786
|
scripts:
|
|
4783
4787
|
agent-assignment-resolver:
|
|
4784
4788
|
path: .aios-core/development/scripts/agent-assignment-resolver.js
|
|
@@ -5726,20 +5730,21 @@ entities:
|
|
|
5726
5730
|
workflow-state-manager:
|
|
5727
5731
|
path: .aios-core/development/scripts/workflow-state-manager.js
|
|
5728
5732
|
type: script
|
|
5729
|
-
purpose: Entity at .aios-core
|
|
5733
|
+
purpose: Entity at .aios-core/development/scripts/workflow-state-manager.js
|
|
5730
5734
|
keywords:
|
|
5731
5735
|
- workflow
|
|
5732
5736
|
- state
|
|
5733
5737
|
- manager
|
|
5734
5738
|
usedBy:
|
|
5739
|
+
- next
|
|
5735
5740
|
- verify-workflow-gaps
|
|
5736
5741
|
dependencies: []
|
|
5737
5742
|
adaptability:
|
|
5738
5743
|
score: 0.7
|
|
5739
5744
|
constraints: []
|
|
5740
5745
|
extensionPoints: []
|
|
5741
|
-
checksum: sha256:
|
|
5742
|
-
lastVerified: '2026-02-
|
|
5746
|
+
checksum: sha256:89177df1184e1650ba3e9aad18c9a3b07f6b77711f0271949e8676701695e431
|
|
5747
|
+
lastVerified: '2026-02-16T01:52:27.944Z'
|
|
5743
5748
|
workflow-validator:
|
|
5744
5749
|
path: .aios-core/development/scripts/workflow-validator.js
|
|
5745
5750
|
type: script
|
|
@@ -6817,7 +6822,7 @@ entities:
|
|
|
6817
6822
|
context-manager:
|
|
6818
6823
|
path: .aios-core/core/orchestration/context-manager.js
|
|
6819
6824
|
type: module
|
|
6820
|
-
purpose: Entity at .aios-core
|
|
6825
|
+
purpose: Entity at .aios-core/core/orchestration/context-manager.js
|
|
6821
6826
|
keywords:
|
|
6822
6827
|
- context
|
|
6823
6828
|
- manager
|
|
@@ -6828,8 +6833,8 @@ entities:
|
|
|
6828
6833
|
score: 0.4
|
|
6829
6834
|
constraints: []
|
|
6830
6835
|
extensionPoints: []
|
|
6831
|
-
checksum: sha256:
|
|
6832
|
-
lastVerified: '2026-02-
|
|
6836
|
+
checksum: sha256:0dd03e84d0a2ea06165825c5eb7154531337ef98275918119ccd03769af576c3
|
|
6837
|
+
lastVerified: '2026-02-16T02:23:49.802Z'
|
|
6833
6838
|
dashboard-integration:
|
|
6834
6839
|
path: .aios-core/core/orchestration/dashboard-integration.js
|
|
6835
6840
|
type: module
|
|
@@ -7061,8 +7066,8 @@ entities:
|
|
|
7061
7066
|
score: 0.4
|
|
7062
7067
|
constraints: []
|
|
7063
7068
|
extensionPoints: []
|
|
7064
|
-
checksum: sha256:
|
|
7065
|
-
lastVerified: '2026-02-
|
|
7069
|
+
checksum: sha256:4a54fec3a3338431d1d9634ebf06f3983d06903570c45d67d0ac15d25c95eb05
|
|
7070
|
+
lastVerified: '2026-02-16T02:23:49.802Z'
|
|
7066
7071
|
subagent-prompt-builder:
|
|
7067
7072
|
path: .aios-core/core/orchestration/subagent-prompt-builder.js
|
|
7068
7073
|
type: module
|
|
@@ -7175,7 +7180,7 @@ entities:
|
|
|
7175
7180
|
workflow-orchestrator:
|
|
7176
7181
|
path: .aios-core/core/orchestration/workflow-orchestrator.js
|
|
7177
7182
|
type: module
|
|
7178
|
-
purpose: Entity at .aios-core
|
|
7183
|
+
purpose: Entity at .aios-core/core/orchestration/workflow-orchestrator.js
|
|
7179
7184
|
keywords:
|
|
7180
7185
|
- workflow
|
|
7181
7186
|
- orchestrator
|
|
@@ -7188,12 +7193,13 @@ entities:
|
|
|
7188
7193
|
- tech-stack-detector
|
|
7189
7194
|
- condition-evaluator
|
|
7190
7195
|
- skill-dispatcher
|
|
7196
|
+
- execution-profile-resolver
|
|
7191
7197
|
adaptability:
|
|
7192
7198
|
score: 0.4
|
|
7193
7199
|
constraints: []
|
|
7194
7200
|
extensionPoints: []
|
|
7195
|
-
checksum: sha256:
|
|
7196
|
-
lastVerified: '2026-02-
|
|
7201
|
+
checksum: sha256:5d3f14d5f12742ce87c3ae8745f82f4ac9f3df3d1889cf16bfc13743130963f9
|
|
7202
|
+
lastVerified: '2026-02-16T02:23:49.803Z'
|
|
7197
7203
|
operation-guard:
|
|
7198
7204
|
path: .aios-core/core/permissions/operation-guard.js
|
|
7199
7205
|
type: module
|
|
@@ -9016,6 +9022,22 @@ entities:
|
|
|
9016
9022
|
extensionPoints: []
|
|
9017
9023
|
checksum: sha256:869fbc8fbc333ac8eea4eca3ea4ab9ca79917fa5e53735b70d634c85ac6420c8
|
|
9018
9024
|
lastVerified: '2026-02-08T13:33:24.391Z'
|
|
9025
|
+
brownfield-compatibility-checklist:
|
|
9026
|
+
path: .aios-core/development/checklists/brownfield-compatibility-checklist.md
|
|
9027
|
+
type: checklist
|
|
9028
|
+
purpose: Brownfield Compatibility Checklist
|
|
9029
|
+
keywords:
|
|
9030
|
+
- brownfield
|
|
9031
|
+
- compatibility
|
|
9032
|
+
- checklist
|
|
9033
|
+
usedBy: []
|
|
9034
|
+
dependencies: []
|
|
9035
|
+
adaptability:
|
|
9036
|
+
score: 0.6
|
|
9037
|
+
constraints: []
|
|
9038
|
+
extensionPoints: []
|
|
9039
|
+
checksum: sha256:d07b1f9e2fcb78f62188ef05a6e6f75a94821b6bb297ea67f2e782e260d27f49
|
|
9040
|
+
lastVerified: '2026-02-16T04:49:07.414Z'
|
|
9019
9041
|
data:
|
|
9020
9042
|
agent-config-requirements:
|
|
9021
9043
|
path: .aios-core/data/agent-config-requirements.yaml
|
|
@@ -196,7 +196,7 @@ commands:
|
|
|
196
196
|
|
|
197
197
|
# === UNIVERSAL COMMANDS ===
|
|
198
198
|
scan {path|url}: 'Analyze HTML/React artifact for patterns'
|
|
199
|
-
integrate {
|
|
199
|
+
integrate {squad}: 'Connect with squad'
|
|
200
200
|
help: 'Show all commands organized by phase'
|
|
201
201
|
status: 'Show current workflow phase'
|
|
202
202
|
guide: 'Show comprehensive usage guide for this agent'
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Brownfield Compatibility Checklist
|
|
2
|
+
|
|
3
|
+
> Story AIOS-DIFF-4.3.2: Checklist formal de compatibilidade retroativa
|
|
4
|
+
|
|
5
|
+
## Pre-Migration Compatibility Check
|
|
6
|
+
|
|
7
|
+
### 1. Source Control Status
|
|
8
|
+
- [ ] All changes committed to version control
|
|
9
|
+
- [ ] Working branch created from main/master
|
|
10
|
+
- [ ] Remote backup verified (push before migration)
|
|
11
|
+
|
|
12
|
+
### 2. Existing Configuration Preservation
|
|
13
|
+
- [ ] `.env` files backed up (never overwritten by AIOS)
|
|
14
|
+
- [ ] `package.json` scripts preserved
|
|
15
|
+
- [ ] Existing linting config (.eslintrc, .prettierrc) detected
|
|
16
|
+
- [ ] CI/CD workflows (.github/workflows) inventoried
|
|
17
|
+
|
|
18
|
+
### 3. Dependency Compatibility
|
|
19
|
+
- [ ] Node.js version compatible (>=18)
|
|
20
|
+
- [ ] No conflicting global dependencies
|
|
21
|
+
- [ ] Lock file (package-lock.json/yarn.lock) preserved
|
|
22
|
+
|
|
23
|
+
### 4. Directory Structure Analysis
|
|
24
|
+
- [ ] `docs/` directory status checked (empty/existing)
|
|
25
|
+
- [ ] `.aios-core/` not present (fresh install)
|
|
26
|
+
- [ ] No naming conflicts with AIOS directories
|
|
27
|
+
|
|
28
|
+
## During Migration Checks
|
|
29
|
+
|
|
30
|
+
### 5. Non-Destructive Operations
|
|
31
|
+
- [ ] AIOS creates new files, never overwrites existing
|
|
32
|
+
- [ ] Merge conflicts surfaced for user decision
|
|
33
|
+
- [ ] Original files preserved with `.backup` if conflict
|
|
34
|
+
|
|
35
|
+
### 6. Configuration Merge Strategy
|
|
36
|
+
- [ ] Existing `.gitignore` entries preserved + AIOS entries added
|
|
37
|
+
- [ ] TypeScript config extended (not replaced) if existing
|
|
38
|
+
- [ ] ESLint rules merged (not overwritten)
|
|
39
|
+
|
|
40
|
+
### 7. Rollback Points
|
|
41
|
+
- [ ] Pre-migration commit hash recorded
|
|
42
|
+
- [ ] AIOS files clearly identified (can be removed cleanly)
|
|
43
|
+
- [ ] No modifications to existing source code during install
|
|
44
|
+
|
|
45
|
+
## Post-Migration Validation
|
|
46
|
+
|
|
47
|
+
### 8. Existing Functionality
|
|
48
|
+
- [ ] `npm test` passes (if tests existed before)
|
|
49
|
+
- [ ] `npm run build` succeeds (if build existed)
|
|
50
|
+
- [ ] Application starts normally
|
|
51
|
+
|
|
52
|
+
### 9. AIOS Integration
|
|
53
|
+
- [ ] `npx aios-core doctor` reports healthy
|
|
54
|
+
- [ ] Agent activation works (@dev, @architect, etc.)
|
|
55
|
+
- [ ] Existing docs not duplicated
|
|
56
|
+
|
|
57
|
+
### 10. Rollback Verification
|
|
58
|
+
- [ ] `git diff HEAD~1` shows only AIOS additions
|
|
59
|
+
- [ ] `git checkout HEAD~1 -- .` would restore pre-AIOS state
|
|
60
|
+
- [ ] No orphaned AIOS processes or files
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Compatibility Matrix
|
|
65
|
+
|
|
66
|
+
| Existing Config | AIOS Behavior | User Action Required |
|
|
67
|
+
|-----------------|---------------|---------------------|
|
|
68
|
+
| `.eslintrc.*` | Detect + preserve | None |
|
|
69
|
+
| `.prettierrc.*` | Detect + preserve | None |
|
|
70
|
+
| `tsconfig.json` | Extend (not replace) | Review extends |
|
|
71
|
+
| `jest.config.*` | Detect + preserve | None |
|
|
72
|
+
| `docs/*.md` | Skip (don't overwrite) | Manual merge if needed |
|
|
73
|
+
| `.github/workflows/*` | Inventory only | User decides integration |
|
|
74
|
+
| `package.json` scripts | Preserve all | None |
|
|
75
|
+
|
|
76
|
+
## Rollback Procedure
|
|
77
|
+
|
|
78
|
+
If migration fails or is unwanted:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Option 1: Full rollback to pre-migration state
|
|
82
|
+
git checkout HEAD~1 -- .
|
|
83
|
+
|
|
84
|
+
# Option 2: Remove only AIOS files
|
|
85
|
+
rm -rf .aios-core/
|
|
86
|
+
rm -rf docs/architecture/ docs/prd/ docs/stories/
|
|
87
|
+
# Review and revert .gitignore AIOS entries
|
|
88
|
+
|
|
89
|
+
# Option 3: Soft rollback (keep docs, remove runtime)
|
|
90
|
+
rm -rf .aios-core/
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Checklist Usage
|
|
96
|
+
|
|
97
|
+
**Pre-Migration:**
|
|
98
|
+
```bash
|
|
99
|
+
# Run compatibility check
|
|
100
|
+
npx aios-core doctor --pre-migration
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Post-Migration:**
|
|
104
|
+
```bash
|
|
105
|
+
# Validate migration
|
|
106
|
+
npx aios-core doctor
|
|
107
|
+
npm test # if tests exist
|
|
108
|
+
npm run build # if build exists
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
*AIOS Brownfield Compatibility Checklist v1.0*
|
|
114
|
+
*Story AIOS-DIFF-4.3.2*
|