feat(automation): complete unified automation system redesign

Phase 4 completion:
- Add ApprovalQueue component for managing pending approvals
- Add ExecutionResult component for displaying hand/workflow results
- Update Sidebar navigation to use unified AutomationPanel
- Replace separate 'hands' and 'workflow' tabs with single 'automation' tab
- Fix TypeScript type safety issues with unknown types in JSX expressions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
iven
2026-03-18 17:12:05 +08:00
parent 3a7631e035
commit 3518fc8ece
74 changed files with 4984 additions and 687 deletions

View File

@@ -12,6 +12,7 @@
*/
import { getMemoryManager } from './agent-memory';
import { canAutoExecute } from './autonomy-manager';
// === Types ===
@@ -365,13 +366,33 @@ export class SkillDiscoveryEngine {
/**
* Mark a skill as installed/uninstalled.
* Includes autonomy check for skill_install/skill_uninstall actions.
*/
setSkillInstalled(skillId: string, installed: boolean): void {
setSkillInstalled(
skillId: string,
installed: boolean,
options?: { skipAutonomyCheck?: boolean }
): { success: boolean; reason?: string } {
const skill = this.skills.find(s => s.id === skillId);
if (skill) {
skill.installed = installed;
this.saveIndex();
if (!skill) {
return { success: false, reason: `Skill not found: ${skillId}` };
}
// Autonomy check - verify if skill installation is allowed
if (!options?.skipAutonomyCheck) {
const action = installed ? 'skill_install' : 'skill_uninstall';
const { canProceed, decision } = canAutoExecute(action, 6);
console.log(`[SkillDiscovery] Autonomy check for ${action}: ${decision.reason}`);
if (!canProceed) {
return { success: false, reason: decision.reason };
}
}
skill.installed = installed;
this.saveIndex();
console.log(`[SkillDiscovery] Skill ${skillId} ${installed ? 'installed' : 'uninstalled'}`);
return { success: true };
}
/**