claude-flow-novice 2.15.2 → 2.15.3
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/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
- package/.claude/hooks/cfn-post-edit.config.json +44 -44
- package/.claude/skills/agent-lifecycle/SKILL.md +60 -0
- package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +573 -0
- package/.claude/skills/agent-lifecycle/simple-audit.sh +31 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/.claude/skills/cfn-redis-coordination/get-context.sh +112 -112
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
- package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
- package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
- package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +572 -572
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +30 -30
- package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
- package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
- package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
- package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
- package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
- package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
- package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
- package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
- package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
- package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +112 -112
- package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
- package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
- package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
- package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
- package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
- package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
- package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
- package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/claude-assets/skills/docker-build/SKILL.md +96 -203
- package/claude-assets/skills/docker-build/build.sh +73 -73
- package/claude-assets/skills/integration/agent-handoff.sh +494 -0
- package/claude-assets/skills/integration/file-operations.sh +414 -0
- package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
- package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
- package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
- package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
- package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
- package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
- package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
- package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
- package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
- package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
- package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +281 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +323 -0
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/integration/DatabaseHandoff.js +507 -0
- package/dist/integration/DatabaseHandoff.js.map +1 -0
- package/dist/integration/StandardAdapter.js +291 -0
- package/dist/integration/StandardAdapter.js.map +1 -0
- package/dist/lib/agent-output-parser.js +518 -0
- package/dist/lib/agent-output-parser.js.map +1 -0
- package/dist/lib/agent-output-validator.js +950 -0
- package/dist/lib/agent-output-validator.js.map +1 -0
- package/dist/lib/artifact-registry.js +443 -0
- package/dist/lib/artifact-registry.js.map +1 -0
- package/dist/lib/config-validator.js +687 -0
- package/dist/lib/config-validator.js.map +1 -0
- package/dist/types/agent-output.js +44 -0
- package/dist/types/agent-output.js.map +1 -0
- package/dist/types/config.js +28 -0
- package/dist/types/config.js.map +1 -0
- package/package.json +2 -1
- package/scripts/artifact-cleanup.sh +392 -0
- package/scripts/deploy-production.sh +355 -355
- package/scripts/docker-playwright-fix.sh +311 -311
- package/scripts/docker-rebuild-all-agents.sh +127 -127
- package/scripts/memory-leak-prevention.sh +305 -305
- package/scripts/migrate-artifacts.sh +563 -0
- package/scripts/migrate-yaml-to-json.sh +465 -0
- package/scripts/run-marketing-tests.sh +42 -42
- package/scripts/update_paths.sh +46 -46
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/artifact-registry.ts"],"sourcesContent":["/**\r\n * Artifact Registry TypeScript API\r\n * Provides centralized artifact management with TTL-based cleanup\r\n * Version: 1.0.0\r\n */\r\n\r\nimport Database from 'better-sqlite3';\r\nimport { createHash } from 'crypto';\r\nimport { readFileSync, existsSync, mkdirSync, statSync } from 'fs';\r\nimport { join, dirname } from 'path';\r\n\r\n// ============================================================================\r\n// Types and Interfaces\r\n// ============================================================================\r\n\r\nexport type ArtifactType = 'code' | 'documentation' | 'test' | 'config' | 'binary' | 'data' | 'model' | 'report' | 'other';\r\nexport type ArtifactStatus = 'active' | 'archived' | 'deleted';\r\nexport type RetentionPolicy = 'ephemeral' | 'standard' | 'permanent' | 'custom';\r\n\r\nexport interface ArtifactMetadata {\r\n name: string;\r\n type: ArtifactType;\r\n format?: string;\r\n content?: string;\r\n storage_location: string;\r\n swarm_id?: string;\r\n agent_id?: string;\r\n task_id?: string;\r\n version?: number;\r\n parent_artifact_id?: string;\r\n artifact_chain?: string[];\r\n tags?: string[];\r\n metadata?: Record<string, any>;\r\n acl_level?: number;\r\n is_compressed?: boolean;\r\n compression_type?: string;\r\n retention_days?: number;\r\n retention_policy?: RetentionPolicy;\r\n}\r\n\r\nexport interface Artifact {\r\n id: string;\r\n name: string;\r\n type: ArtifactType;\r\n format?: string;\r\n content?: string;\r\n content_hash?: string;\r\n size_bytes?: number;\r\n storage_location: string;\r\n checksum?: string;\r\n is_compressed: boolean;\r\n compression_type?: string;\r\n swarm_id?: string;\r\n agent_id?: string;\r\n task_id?: string;\r\n version: number;\r\n parent_artifact_id?: string;\r\n artifact_chain?: string;\r\n tags?: string;\r\n metadata?: string;\r\n acl_level: number;\r\n retention_days: number;\r\n retention_policy: RetentionPolicy;\r\n expires_at?: string;\r\n status: ArtifactStatus;\r\n cleanup_eligible: boolean;\r\n created_at: string;\r\n updated_at: string;\r\n archived_at?: string;\r\n deleted_at?: string;\r\n}\r\n\r\nexport interface ArtifactFilters {\r\n type?: ArtifactType;\r\n status?: ArtifactStatus;\r\n retention_policy?: RetentionPolicy;\r\n swarm_id?: string;\r\n agent_id?: string;\r\n task_id?: string;\r\n tags?: string[];\r\n cleanup_eligible?: boolean;\r\n created_after?: Date;\r\n created_before?: Date;\r\n expires_before?: Date;\r\n limit?: number;\r\n offset?: number;\r\n}\r\n\r\nexport interface ArtifactStats {\r\n total: number;\r\n active: number;\r\n archived: number;\r\n deleted: number;\r\n cleanup_eligible: number;\r\n total_size_bytes: number;\r\n}\r\n\r\n// ============================================================================\r\n// Error Classes\r\n// ============================================================================\r\n\r\nexport class ArtifactRegistryError extends Error {\r\n constructor(message: string, public code: string, public details?: any) {\r\n super(message);\r\n this.name = 'ArtifactRegistryError';\r\n }\r\n}\r\n\r\nexport class ArtifactNotFoundError extends ArtifactRegistryError {\r\n constructor(id: string) {\r\n super(`Artifact not found: ${id}`, 'ARTIFACT_NOT_FOUND', { id });\r\n this.name = 'ArtifactNotFoundError';\r\n }\r\n}\r\n\r\nexport class ArtifactValidationError extends ArtifactRegistryError {\r\n constructor(message: string, details?: any) {\r\n super(message, 'VALIDATION_ERROR', details);\r\n this.name = 'ArtifactValidationError';\r\n }\r\n}\r\n\r\nexport class ArtifactDatabaseError extends ArtifactRegistryError {\r\n constructor(message: string, details?: any) {\r\n super(message, 'DATABASE_ERROR', details);\r\n this.name = 'ArtifactDatabaseError';\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Artifact Registry Class\r\n// ============================================================================\r\n\r\nexport class ArtifactRegistry {\r\n private db: Database.Database;\r\n private static instance: ArtifactRegistry | null = null;\r\n\r\n constructor(dbPath: string) {\r\n try {\r\n // Ensure database directory exists\r\n const dbDir = dirname(dbPath);\r\n if (!existsSync(dbDir)) {\r\n mkdirSync(dbDir, { recursive: true });\r\n }\r\n\r\n this.db = new Database(dbPath);\r\n this.db.pragma('journal_mode = WAL'); // Write-Ahead Logging for concurrency\r\n this.db.pragma('foreign_keys = ON');\r\n this.db.pragma('synchronous = NORMAL');\r\n\r\n this.initializeSchema();\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to initialize database: ${error instanceof Error ? error.message : String(error)}`,\r\n { dbPath, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get singleton instance (optional pattern)\r\n */\r\n static getInstance(dbPath?: string): ArtifactRegistry {\r\n if (!ArtifactRegistry.instance) {\r\n if (!dbPath) {\r\n throw new ArtifactDatabaseError('Database path required for first initialization', {});\r\n }\r\n ArtifactRegistry.instance = new ArtifactRegistry(dbPath);\r\n }\r\n return ArtifactRegistry.instance;\r\n }\r\n\r\n /**\r\n * Initialize database schema\r\n */\r\n private initializeSchema(): void {\r\n try {\r\n const schemaPath = join(__dirname, '../database/artifact-registry-schema.sql');\r\n if (!existsSync(schemaPath)) {\r\n throw new Error(`Schema file not found: ${schemaPath}`);\r\n }\r\n\r\n const schema = readFileSync(schemaPath, 'utf-8');\r\n\r\n // Step 1: Remove multi-line comments FIRST (they can contain semicolons)\r\n const withoutMultiLineComments = schema.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n\r\n // Step 2: Remove single-line comments\r\n const cleanedSchema = withoutMultiLineComments\r\n .split('\\n')\r\n .filter(line => {\r\n const trimmed = line.trim();\r\n return trimmed.length > 0 && !trimmed.startsWith('--');\r\n })\r\n .join('\\n');\r\n\r\n // Step 3: Execute entire schema as one block\r\n // SQLite's exec() can handle multiple statements including triggers with internal semicolons\r\n this.db.exec(cleanedSchema);\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to initialize schema: ${error instanceof Error ? error.message : String(error)}`,\r\n { error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Generate unique artifact ID\r\n */\r\n private generateId(): string {\r\n const timestamp = Date.now();\r\n const random = Math.random().toString(36).substring(2, 15);\r\n return `artifact-${timestamp}-${random}`;\r\n }\r\n\r\n /**\r\n * Calculate checksum for file\r\n */\r\n private calculateChecksum(filePath: string): string {\r\n try {\r\n const content = readFileSync(filePath);\r\n return createHash('sha256').update(content).digest('hex');\r\n } catch (error) {\r\n throw new ArtifactValidationError(\r\n `Failed to calculate checksum: ${error instanceof Error ? error.message : String(error)}`,\r\n { filePath, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Validate artifact metadata\r\n */\r\n private validateMetadata(metadata: ArtifactMetadata): void {\r\n if (!metadata.name || metadata.name.trim().length === 0) {\r\n throw new ArtifactValidationError('Artifact name is required');\r\n }\r\n\r\n if (!metadata.type) {\r\n throw new ArtifactValidationError('Artifact type is required');\r\n }\r\n\r\n const validTypes: ArtifactType[] = ['code', 'documentation', 'test', 'config', 'binary', 'data', 'model', 'report', 'other'];\r\n if (!validTypes.includes(metadata.type)) {\r\n throw new ArtifactValidationError(`Invalid artifact type: ${metadata.type}`, { validTypes });\r\n }\r\n\r\n if (!metadata.storage_location || metadata.storage_location.trim().length === 0) {\r\n throw new ArtifactValidationError('Storage location is required');\r\n }\r\n\r\n if (metadata.acl_level !== undefined && (metadata.acl_level < 1 || metadata.acl_level > 5)) {\r\n throw new ArtifactValidationError('ACL level must be between 1 and 5', { acl_level: metadata.acl_level });\r\n }\r\n\r\n if (metadata.retention_policy) {\r\n const validPolicies: RetentionPolicy[] = ['ephemeral', 'standard', 'permanent', 'custom'];\r\n if (!validPolicies.includes(metadata.retention_policy)) {\r\n throw new ArtifactValidationError(`Invalid retention policy: ${metadata.retention_policy}`, { validPolicies });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create new artifact\r\n */\r\n createArtifact(metadata: ArtifactMetadata): Artifact {\r\n try {\r\n // Validate metadata\r\n this.validateMetadata(metadata);\r\n\r\n // Generate ID\r\n const id = this.generateId();\r\n\r\n // Calculate file-based metadata if storage location exists\r\n let size_bytes: number | undefined;\r\n let checksum: string | undefined;\r\n let content_hash: string | undefined;\r\n\r\n if (existsSync(metadata.storage_location)) {\r\n const stats = statSync(metadata.storage_location);\r\n size_bytes = stats.size;\r\n checksum = this.calculateChecksum(metadata.storage_location);\r\n\r\n if (metadata.content) {\r\n content_hash = createHash('sha256').update(metadata.content).digest('hex');\r\n }\r\n }\r\n\r\n // Set defaults\r\n const retention_days = metadata.retention_days ?? (\r\n metadata.retention_policy === 'ephemeral' ? 7 :\r\n metadata.retention_policy === 'permanent' ? 0 :\r\n 30 // standard\r\n );\r\n\r\n const retention_policy = metadata.retention_policy ?? 'standard';\r\n\r\n // Prepare insert statement\r\n const stmt = this.db.prepare(`\r\n INSERT INTO artifacts (\r\n id, name, type, format, content, content_hash, size_bytes,\r\n storage_location, checksum, is_compressed, compression_type,\r\n swarm_id, agent_id, task_id, version, parent_artifact_id,\r\n artifact_chain, tags, metadata, acl_level,\r\n retention_days, retention_policy, status\r\n ) VALUES (\r\n ?, ?, ?, ?, ?, ?, ?,\r\n ?, ?, ?, ?,\r\n ?, ?, ?, ?, ?,\r\n ?, ?, ?, ?,\r\n ?, ?, ?\r\n )\r\n `);\r\n\r\n // Execute insert\r\n stmt.run(\r\n id,\r\n metadata.name,\r\n metadata.type,\r\n metadata.format ?? null,\r\n metadata.content ?? null,\r\n content_hash ?? null,\r\n size_bytes ?? null,\r\n metadata.storage_location,\r\n checksum ?? null,\r\n metadata.is_compressed ? 1 : 0,\r\n metadata.compression_type ?? null,\r\n metadata.swarm_id ?? null,\r\n metadata.agent_id ?? null,\r\n metadata.task_id ?? null,\r\n metadata.version ?? 1,\r\n metadata.parent_artifact_id ?? null,\r\n metadata.artifact_chain ? JSON.stringify(metadata.artifact_chain) : null,\r\n metadata.tags ? JSON.stringify(metadata.tags) : null,\r\n metadata.metadata ? JSON.stringify(metadata.metadata) : null,\r\n metadata.acl_level ?? 2,\r\n retention_days,\r\n retention_policy,\r\n 'active'\r\n );\r\n\r\n // Retrieve and return created artifact\r\n const artifact = this.getArtifact(id);\r\n if (!artifact) {\r\n throw new ArtifactDatabaseError('Failed to retrieve created artifact', { id });\r\n }\r\n\r\n return artifact;\r\n } catch (error) {\r\n if (error instanceof ArtifactRegistryError) {\r\n throw error;\r\n }\r\n throw new ArtifactDatabaseError(\r\n `Failed to create artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { metadata, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get artifact by ID\r\n */\r\n getArtifact(id: string): Artifact | null {\r\n try {\r\n const stmt = this.db.prepare('SELECT * FROM artifacts WHERE id = ?');\r\n const row = stmt.get(id) as Artifact | undefined;\r\n return row ?? null;\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to get artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { id, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * List artifacts with optional filters\r\n */\r\n listArtifacts(filters?: ArtifactFilters): Artifact[] {\r\n try {\r\n let query = 'SELECT * FROM artifacts WHERE 1=1';\r\n const params: any[] = [];\r\n\r\n if (filters) {\r\n if (filters.type) {\r\n query += ' AND type = ?';\r\n params.push(filters.type);\r\n }\r\n\r\n if (filters.status) {\r\n query += ' AND status = ?';\r\n params.push(filters.status);\r\n }\r\n\r\n if (filters.retention_policy) {\r\n query += ' AND retention_policy = ?';\r\n params.push(filters.retention_policy);\r\n }\r\n\r\n if (filters.swarm_id) {\r\n query += ' AND swarm_id = ?';\r\n params.push(filters.swarm_id);\r\n }\r\n\r\n if (filters.agent_id) {\r\n query += ' AND agent_id = ?';\r\n params.push(filters.agent_id);\r\n }\r\n\r\n if (filters.task_id) {\r\n query += ' AND task_id = ?';\r\n params.push(filters.task_id);\r\n }\r\n\r\n if (filters.cleanup_eligible !== undefined) {\r\n query += ' AND cleanup_eligible = ?';\r\n params.push(filters.cleanup_eligible ? 1 : 0);\r\n }\r\n\r\n if (filters.created_after) {\r\n query += ' AND created_at >= ?';\r\n params.push(filters.created_after.toISOString());\r\n }\r\n\r\n if (filters.created_before) {\r\n query += ' AND created_at <= ?';\r\n params.push(filters.created_before.toISOString());\r\n }\r\n\r\n if (filters.expires_before) {\r\n query += ' AND expires_at IS NOT NULL AND expires_at <= ?';\r\n params.push(filters.expires_before.toISOString());\r\n }\r\n\r\n if (filters.tags && filters.tags.length > 0) {\r\n // JSON search for tags (SQLite JSON support)\r\n for (const tag of filters.tags) {\r\n query += ` AND tags LIKE ?`;\r\n params.push(`%\"${tag}\"%`);\r\n }\r\n }\r\n }\r\n\r\n query += ' ORDER BY created_at DESC';\r\n\r\n if (filters?.limit) {\r\n query += ' LIMIT ?';\r\n params.push(filters.limit);\r\n }\r\n\r\n if (filters?.offset) {\r\n query += ' OFFSET ?';\r\n params.push(filters.offset);\r\n }\r\n\r\n const stmt = this.db.prepare(query);\r\n return stmt.all(...params) as Artifact[];\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to list artifacts: ${error instanceof Error ? error.message : String(error)}`,\r\n { filters, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Archive artifact (mark as archived)\r\n */\r\n archiveArtifact(id: string): Artifact {\r\n try {\r\n const artifact = this.getArtifact(id);\r\n if (!artifact) {\r\n throw new ArtifactNotFoundError(id);\r\n }\r\n\r\n if (artifact.status === 'deleted') {\r\n throw new ArtifactValidationError('Cannot archive deleted artifact', { id, status: artifact.status });\r\n }\r\n\r\n const stmt = this.db.prepare(`\r\n UPDATE artifacts\r\n SET status = 'archived',\r\n archived_at = CURRENT_TIMESTAMP,\r\n updated_at = CURRENT_TIMESTAMP\r\n WHERE id = ?\r\n `);\r\n\r\n stmt.run(id);\r\n\r\n const updated = this.getArtifact(id);\r\n if (!updated) {\r\n throw new ArtifactDatabaseError('Failed to retrieve archived artifact', { id });\r\n }\r\n\r\n return updated;\r\n } catch (error) {\r\n if (error instanceof ArtifactRegistryError) {\r\n throw error;\r\n }\r\n throw new ArtifactDatabaseError(\r\n `Failed to archive artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { id, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Delete artifact (soft delete - mark as deleted)\r\n */\r\n deleteArtifact(id: string): Artifact {\r\n try {\r\n const artifact = this.getArtifact(id);\r\n if (!artifact) {\r\n throw new ArtifactNotFoundError(id);\r\n }\r\n\r\n const stmt = this.db.prepare(`\r\n UPDATE artifacts\r\n SET status = 'deleted',\r\n deleted_at = CURRENT_TIMESTAMP,\r\n updated_at = CURRENT_TIMESTAMP\r\n WHERE id = ?\r\n `);\r\n\r\n stmt.run(id);\r\n\r\n const updated = this.getArtifact(id);\r\n if (!updated) {\r\n throw new ArtifactDatabaseError('Failed to retrieve deleted artifact', { id });\r\n }\r\n\r\n return updated;\r\n } catch (error) {\r\n if (error instanceof ArtifactRegistryError) {\r\n throw error;\r\n }\r\n throw new ArtifactDatabaseError(\r\n `Failed to delete artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { id, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get artifact statistics by retention policy\r\n */\r\n getStatsByRetentionPolicy(): Record<RetentionPolicy, ArtifactStats> {\r\n try {\r\n const stmt = this.db.prepare(`\r\n SELECT\r\n retention_policy,\r\n COUNT(*) as total,\r\n SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) as active,\r\n SUM(CASE WHEN status = 'archived' THEN 1 ELSE 0 END) as archived,\r\n SUM(CASE WHEN status = 'deleted' THEN 1 ELSE 0 END) as deleted,\r\n SUM(CASE WHEN cleanup_eligible = 1 THEN 1 ELSE 0 END) as cleanup_eligible,\r\n COALESCE(SUM(size_bytes), 0) as total_size_bytes\r\n FROM artifacts\r\n GROUP BY retention_policy\r\n `);\r\n\r\n const rows = stmt.all() as Array<{ retention_policy: RetentionPolicy } & ArtifactStats>;\r\n const stats: Record<string, ArtifactStats> = {};\r\n\r\n for (const row of rows) {\r\n const { retention_policy, ...statsData } = row;\r\n stats[retention_policy] = statsData;\r\n }\r\n\r\n return stats as Record<RetentionPolicy, ArtifactStats>;\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to get statistics: ${error instanceof Error ? error.message : String(error)}`,\r\n { error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Find expired artifacts eligible for cleanup\r\n */\r\n findExpiredArtifacts(): Artifact[] {\r\n try {\r\n const stmt = this.db.prepare(`\r\n SELECT * FROM artifacts\r\n WHERE status = 'active'\r\n AND expires_at IS NOT NULL\r\n AND datetime('now') >= expires_at\r\n ORDER BY created_at ASC\r\n `);\r\n\r\n return stmt.all() as Artifact[];\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to find expired artifacts: ${error instanceof Error ? error.message : String(error)}`,\r\n { error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Close database connection\r\n */\r\n close(): void {\r\n this.db.close();\r\n }\r\n}\r\n"],"names":["Database","createHash","readFileSync","existsSync","mkdirSync","statSync","join","dirname","ArtifactRegistryError","Error","message","code","details","name","ArtifactNotFoundError","id","ArtifactValidationError","ArtifactDatabaseError","ArtifactRegistry","db","instance","dbPath","dbDir","recursive","pragma","initializeSchema","error","String","getInstance","schemaPath","__dirname","schema","withoutMultiLineComments","replace","cleanedSchema","split","filter","line","trimmed","trim","length","startsWith","exec","generateId","timestamp","Date","now","random","Math","toString","substring","calculateChecksum","filePath","content","update","digest","validateMetadata","metadata","type","validTypes","includes","storage_location","acl_level","undefined","retention_policy","validPolicies","createArtifact","size_bytes","checksum","content_hash","stats","size","retention_days","stmt","prepare","run","format","is_compressed","compression_type","swarm_id","agent_id","task_id","version","parent_artifact_id","artifact_chain","JSON","stringify","tags","artifact","getArtifact","row","get","listArtifacts","filters","query","params","push","status","cleanup_eligible","created_after","toISOString","created_before","expires_before","tag","limit","offset","all","archiveArtifact","updated","deleteArtifact","getStatsByRetentionPolicy","rows","statsData","findExpiredArtifacts","close"],"mappings":"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"}
|