 85bf1341f3
			
		
	
	85bf1341f3
	
	
	
		
			
			Frontend Enhancements: - Complete React TypeScript frontend with modern UI components - Distributed workflows management interface with real-time updates - Socket.IO integration for live agent status monitoring - Agent management dashboard with cluster visualization - Project management interface with metrics and task tracking - Responsive design with proper error handling and loading states Backend Infrastructure: - Distributed coordinator for multi-agent workflow orchestration - Cluster management API with comprehensive agent operations - Enhanced database models for agents and projects - Project service for filesystem-based project discovery - Performance monitoring and metrics collection - Comprehensive API documentation and error handling Documentation: - Complete distributed development guide (README_DISTRIBUTED.md) - Comprehensive development report with architecture insights - System configuration templates and deployment guides The platform now provides a complete web interface for managing the distributed AI cluster with real-time monitoring, workflow orchestration, and agent coordination capabilities. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { isMap, isPair, isScalar } from '../../nodes/identity.js';
 | |
| import { Pair, createPair } from '../../nodes/Pair.js';
 | |
| import { YAMLMap, findPair } from '../../nodes/YAMLMap.js';
 | |
| 
 | |
| class YAMLSet extends YAMLMap {
 | |
|     constructor(schema) {
 | |
|         super(schema);
 | |
|         this.tag = YAMLSet.tag;
 | |
|     }
 | |
|     add(key) {
 | |
|         let pair;
 | |
|         if (isPair(key))
 | |
|             pair = key;
 | |
|         else if (key &&
 | |
|             typeof key === 'object' &&
 | |
|             'key' in key &&
 | |
|             'value' in key &&
 | |
|             key.value === null)
 | |
|             pair = new Pair(key.key, null);
 | |
|         else
 | |
|             pair = new Pair(key, null);
 | |
|         const prev = findPair(this.items, pair.key);
 | |
|         if (!prev)
 | |
|             this.items.push(pair);
 | |
|     }
 | |
|     /**
 | |
|      * If `keepPair` is `true`, returns the Pair matching `key`.
 | |
|      * Otherwise, returns the value of that Pair's key.
 | |
|      */
 | |
|     get(key, keepPair) {
 | |
|         const pair = findPair(this.items, key);
 | |
|         return !keepPair && isPair(pair)
 | |
|             ? isScalar(pair.key)
 | |
|                 ? pair.key.value
 | |
|                 : pair.key
 | |
|             : pair;
 | |
|     }
 | |
|     set(key, value) {
 | |
|         if (typeof value !== 'boolean')
 | |
|             throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
 | |
|         const prev = findPair(this.items, key);
 | |
|         if (prev && !value) {
 | |
|             this.items.splice(this.items.indexOf(prev), 1);
 | |
|         }
 | |
|         else if (!prev && value) {
 | |
|             this.items.push(new Pair(key));
 | |
|         }
 | |
|     }
 | |
|     toJSON(_, ctx) {
 | |
|         return super.toJSON(_, ctx, Set);
 | |
|     }
 | |
|     toString(ctx, onComment, onChompKeep) {
 | |
|         if (!ctx)
 | |
|             return JSON.stringify(this);
 | |
|         if (this.hasAllNullValues(true))
 | |
|             return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
 | |
|         else
 | |
|             throw new Error('Set items must all have null values');
 | |
|     }
 | |
|     static from(schema, iterable, ctx) {
 | |
|         const { replacer } = ctx;
 | |
|         const set = new this(schema);
 | |
|         if (iterable && Symbol.iterator in Object(iterable))
 | |
|             for (let value of iterable) {
 | |
|                 if (typeof replacer === 'function')
 | |
|                     value = replacer.call(iterable, value, value);
 | |
|                 set.items.push(createPair(value, null, ctx));
 | |
|             }
 | |
|         return set;
 | |
|     }
 | |
| }
 | |
| YAMLSet.tag = 'tag:yaml.org,2002:set';
 | |
| const set = {
 | |
|     collection: 'map',
 | |
|     identify: value => value instanceof Set,
 | |
|     nodeClass: YAMLSet,
 | |
|     default: false,
 | |
|     tag: 'tag:yaml.org,2002:set',
 | |
|     createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),
 | |
|     resolve(map, onError) {
 | |
|         if (isMap(map)) {
 | |
|             if (map.hasAllNullValues(true))
 | |
|                 return Object.assign(new YAMLSet(), map);
 | |
|             else
 | |
|                 onError('Set items must all have null values');
 | |
|         }
 | |
|         else
 | |
|             onError('Expected a mapping for this tag');
 | |
|         return map;
 | |
|     }
 | |
| };
 | |
| 
 | |
| export { YAMLSet, set };
 |