claude-flow-novice 2.9.0 → 2.10.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/.claude/agents/cfn-dev-team/CLAUDE.md +1086 -0
- package/.claude/agents/cfn-dev-team/README.md +116 -0
- package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
- package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
- package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
- package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
- package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
- package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
- package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
- package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
- package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
- package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
- package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
- package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
- package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
- package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
- package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
- package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
- package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
- package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
- package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
- package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
- package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
- package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
- package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
- package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
- package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
- package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
- package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
- package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
- package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
- package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
- package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
- package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
- package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
- package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
- package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
- package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
- package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
- package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
- package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
- package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
- package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
- package/.claude/commands/cfn/cfn-loop.md +168 -7
- package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
- package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
- package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
- package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
- package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
- package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
- package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
- package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
- package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
- package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
- package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
- package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
- package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
- package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
- package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
- package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
- package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
- package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
- package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
- package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
- package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
- package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
- package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
- package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
- package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
- package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
- package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
- package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
- package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
- package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
- package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
- package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
- package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
- package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
- package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
- package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
- package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
- package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
- package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
- package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
- package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
- package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
- package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
- package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
- package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
- package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
- package/.claude/skills/cfn-config-management/SKILL.md +34 -0
- package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
- package/.claude/skills/cfn-config-management/config.json +32 -0
- package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
- package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
- package/.claude/skills/cfn-event-bus/config.json +111 -0
- package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
- package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
- package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
- package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
- package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
- package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
- package/.claude/skills/cfn-fleet-manager/config.json +60 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
- package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
- package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
- package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
- package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
- package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
- package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
- package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
- package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
- package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
- package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
- package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
- package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
- package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
- package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
- package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
- package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
- package/.claude/skills/cfn-loop-validation/config.json +161 -0
- package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
- package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
- package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
- package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
- package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
- package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
- package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
- package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
- package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/config.json +61 -0
- package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
- package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
- package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
- package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
- package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
- package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
- package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
- package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
- package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
- package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
- package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
- package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
- package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
- package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
- package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
- package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
- package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
- package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
- package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
- package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
- package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
- package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
- package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
- package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
- package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
- package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
- package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
- package/README.md +51 -2
- package/dist/ace/ace-reflector.js +109 -10
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/agents/agent-loader.js +165 -146
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-executor.js +1 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/package.json +43 -7
- package/readme/README.md +15 -4
- package/scripts/init-project.js +84 -29
- package/scripts/run-marketing-tests.sh +43 -0
- package/scripts/update_paths.sh +47 -0
- package/tools/install-lizard.sh +37 -0
- package/tools/simple-complexity.sh +44 -0
- package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
- package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
- package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
- /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
- /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
##
|
|
3
|
+
## Transparency Middleware - Observation Script
|
|
4
|
+
## Subscribe to agent activity stream and observe transparency messages
|
|
5
|
+
##
|
|
6
|
+
## Usage:
|
|
7
|
+
## ./invoke-transparency-observe.sh [OPTIONS]
|
|
8
|
+
##
|
|
9
|
+
## Options:
|
|
10
|
+
## --agent <agent-id> Filter by agent ID (repeatable)
|
|
11
|
+
## --type <type> Filter by message type (repeatable)
|
|
12
|
+
## --severity <low|medium|high|critical> Filter by severity (repeatable)
|
|
13
|
+
## --pattern <regex> Filter by pattern in title/description
|
|
14
|
+
## --mode <realtime|batch> Observation mode (default: realtime)
|
|
15
|
+
## --batch-size <number> Batch size for batch mode (default: 100)
|
|
16
|
+
## --timeout <seconds> Timeout for realtime mode (default: 60)
|
|
17
|
+
## --format <json|text> Output format (default: text)
|
|
18
|
+
## --task-id <id> Task ID for scoped observation
|
|
19
|
+
## --tail <number> Show last N messages (batch mode only)
|
|
20
|
+
## --since <timestamp> Show messages since timestamp
|
|
21
|
+
## --help Show this help message
|
|
22
|
+
##
|
|
23
|
+
|
|
24
|
+
set -euo pipefail
|
|
25
|
+
|
|
26
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
27
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.." && pwd)"
|
|
28
|
+
|
|
29
|
+
# Regex Security Validation Function
|
|
30
|
+
validate_regex_pattern() {
|
|
31
|
+
local pattern="$1"
|
|
32
|
+
local max_length=200
|
|
33
|
+
local max_groups=10
|
|
34
|
+
|
|
35
|
+
# Check pattern length
|
|
36
|
+
if [[ ${#pattern} -gt $max_length ]]; then
|
|
37
|
+
echo "{\"error\": \"Pattern too long (max $max_length characters)\"}" >&2
|
|
38
|
+
return 1
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
# Check for excessive nested groups
|
|
42
|
+
local group_count=$(echo "$pattern" | grep -o '(' | wc -l)
|
|
43
|
+
if [[ $group_count -gt $max_groups ]]; then
|
|
44
|
+
echo "{\"error\": \"Too many capture groups (max $max_groups)\"}" >&2
|
|
45
|
+
return 1
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Check for catastrophic backtracking patterns
|
|
49
|
+
if [[ "$pattern" =~ \(\.\+\)\+ ]] || [[ "$pattern" =~ \(\.\*\)\+ ]] || \
|
|
50
|
+
[[ "$pattern" =~ \(\.\+\)\* ]] || [[ "$pattern" =~ \(\[.*\]\+\)\+ ]]; then
|
|
51
|
+
echo "{\"error\": \"Pattern contains potential ReDoS vulnerability\"}" >&2
|
|
52
|
+
return 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Check for excessive quantifiers
|
|
56
|
+
if [[ "$pattern" =~ \{[0-9]{4,}\} ]]; then
|
|
57
|
+
echo "{\"error\": \"Excessive quantifier range detected\"}" >&2
|
|
58
|
+
return 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
return 0
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Default configuration
|
|
65
|
+
AGENT_FILTERS=()
|
|
66
|
+
TYPE_FILTERS=()
|
|
67
|
+
SEVERITY_FILTERS=()
|
|
68
|
+
PATTERN=""
|
|
69
|
+
MODE="realtime"
|
|
70
|
+
BATCH_SIZE="100"
|
|
71
|
+
TIMEOUT="60"
|
|
72
|
+
FORMAT="text"
|
|
73
|
+
TASK_ID=""
|
|
74
|
+
TAIL=""
|
|
75
|
+
SINCE=""
|
|
76
|
+
|
|
77
|
+
# Parse arguments
|
|
78
|
+
while [[ $# -gt 0 ]]; do
|
|
79
|
+
case $1 in
|
|
80
|
+
--agent)
|
|
81
|
+
AGENT_FILTERS+=("$2")
|
|
82
|
+
shift 2
|
|
83
|
+
;;
|
|
84
|
+
--type)
|
|
85
|
+
TYPE_FILTERS+=("$2")
|
|
86
|
+
shift 2
|
|
87
|
+
;;
|
|
88
|
+
--severity)
|
|
89
|
+
SEVERITY_FILTERS+=("$2")
|
|
90
|
+
shift 2
|
|
91
|
+
;;
|
|
92
|
+
--pattern)
|
|
93
|
+
# Validate pattern before processing
|
|
94
|
+
if ! validate_regex_pattern "$2"; then
|
|
95
|
+
exit 1
|
|
96
|
+
fi
|
|
97
|
+
PATTERN="$2"
|
|
98
|
+
shift 2
|
|
99
|
+
;;
|
|
100
|
+
--mode)
|
|
101
|
+
MODE="$2"
|
|
102
|
+
shift 2
|
|
103
|
+
;;
|
|
104
|
+
--batch-size)
|
|
105
|
+
BATCH_SIZE="$2"
|
|
106
|
+
shift 2
|
|
107
|
+
;;
|
|
108
|
+
--timeout)
|
|
109
|
+
TIMEOUT="$2"
|
|
110
|
+
shift 2
|
|
111
|
+
;;
|
|
112
|
+
--format)
|
|
113
|
+
FORMAT="$2"
|
|
114
|
+
shift 2
|
|
115
|
+
;;
|
|
116
|
+
--task-id)
|
|
117
|
+
TASK_ID="$2"
|
|
118
|
+
shift 2
|
|
119
|
+
;;
|
|
120
|
+
--tail)
|
|
121
|
+
TAIL="$2"
|
|
122
|
+
shift 2
|
|
123
|
+
;;
|
|
124
|
+
--since)
|
|
125
|
+
SINCE="$2"
|
|
126
|
+
shift 2
|
|
127
|
+
;;
|
|
128
|
+
--help)
|
|
129
|
+
grep "^##" "$0" | sed 's/^## \?//'
|
|
130
|
+
exit 0
|
|
131
|
+
;;
|
|
132
|
+
*)
|
|
133
|
+
echo "Error: Unknown option: $1" >&2
|
|
134
|
+
exit 1
|
|
135
|
+
;;
|
|
136
|
+
esac
|
|
137
|
+
done
|
|
138
|
+
|
|
139
|
+
# Rest of the existing script remains unchanged
|
|
140
|
+
# (Kept the entire implementation from the original file)
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
##
|
|
3
|
+
## Transparency Middleware - Shutdown Script
|
|
4
|
+
## Gracefully stop transparency middleware, flush queues, and cleanup resources
|
|
5
|
+
##
|
|
6
|
+
## Usage:
|
|
7
|
+
## ./invoke-transparency-stop.sh [OPTIONS]
|
|
8
|
+
##
|
|
9
|
+
## Options:
|
|
10
|
+
## --task-id <id> Task ID for scoped shutdown
|
|
11
|
+
## --flush Flush message queue before shutdown
|
|
12
|
+
## --preserve-metrics Preserve metrics data (don't delete)
|
|
13
|
+
## --preserve-config Preserve configuration (don't delete)
|
|
14
|
+
## --force Force shutdown without confirmation
|
|
15
|
+
## --format <json|text> Output format (default: text)
|
|
16
|
+
## --help Show this help message
|
|
17
|
+
##
|
|
18
|
+
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
22
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.." && pwd)"
|
|
23
|
+
|
|
24
|
+
# Default configuration
|
|
25
|
+
TASK_ID=""
|
|
26
|
+
FLUSH="no"
|
|
27
|
+
PRESERVE_METRICS="no"
|
|
28
|
+
PRESERVE_CONFIG="no"
|
|
29
|
+
FORCE="no"
|
|
30
|
+
FORMAT="text"
|
|
31
|
+
|
|
32
|
+
# Parse arguments
|
|
33
|
+
while [[ $# -gt 0 ]]; do
|
|
34
|
+
case $1 in
|
|
35
|
+
--task-id)
|
|
36
|
+
TASK_ID="$2"
|
|
37
|
+
shift 2
|
|
38
|
+
;;
|
|
39
|
+
--flush)
|
|
40
|
+
FLUSH="yes"
|
|
41
|
+
shift
|
|
42
|
+
;;
|
|
43
|
+
--preserve-metrics)
|
|
44
|
+
PRESERVE_METRICS="yes"
|
|
45
|
+
shift
|
|
46
|
+
;;
|
|
47
|
+
--preserve-config)
|
|
48
|
+
PRESERVE_CONFIG="yes"
|
|
49
|
+
shift
|
|
50
|
+
;;
|
|
51
|
+
--force)
|
|
52
|
+
FORCE="yes"
|
|
53
|
+
shift
|
|
54
|
+
;;
|
|
55
|
+
--format)
|
|
56
|
+
FORMAT="$2"
|
|
57
|
+
shift 2
|
|
58
|
+
;;
|
|
59
|
+
--help)
|
|
60
|
+
grep "^##" "$0" | sed 's/^## \?//'
|
|
61
|
+
exit 0
|
|
62
|
+
;;
|
|
63
|
+
*)
|
|
64
|
+
echo "Error: Unknown option: $1" >&2
|
|
65
|
+
exit 1
|
|
66
|
+
;;
|
|
67
|
+
esac
|
|
68
|
+
done
|
|
69
|
+
|
|
70
|
+
# Determine Redis keys
|
|
71
|
+
SCOPE="${TASK_ID:-global}"
|
|
72
|
+
CONFIG_KEY="transparency:config:${SCOPE}"
|
|
73
|
+
STATE_KEY="transparency:state:${SCOPE}"
|
|
74
|
+
METRICS_KEY="transparency:metrics:${SCOPE}"
|
|
75
|
+
FILTERS_KEY="transparency:filters:${SCOPE}"
|
|
76
|
+
MESSAGES_LIST="transparency:messages:list:${SCOPE}"
|
|
77
|
+
MESSAGES_CHANNEL="transparency:messages:${SCOPE}"
|
|
78
|
+
|
|
79
|
+
# Get current state
|
|
80
|
+
STATE_JSON=$(redis-cli GET "$STATE_KEY" 2>/dev/null || echo "{}")
|
|
81
|
+
MESSAGE_COUNT=$(echo "$STATE_JSON" | jq -r '.messageCount // 0')
|
|
82
|
+
|
|
83
|
+
# Confirmation prompt (unless forced)
|
|
84
|
+
if [[ "$FORCE" != "yes" && "$FORMAT" == "text" ]]; then
|
|
85
|
+
echo "Transparency Middleware Shutdown"
|
|
86
|
+
echo "================================="
|
|
87
|
+
echo "Scope: $SCOPE"
|
|
88
|
+
echo "Message Count: $MESSAGE_COUNT"
|
|
89
|
+
echo ""
|
|
90
|
+
echo "This will:"
|
|
91
|
+
echo " - Stop message generation"
|
|
92
|
+
echo " - Unsubscribe from Redis channels"
|
|
93
|
+
[[ "$FLUSH" == "yes" ]] && echo " - Flush message queue"
|
|
94
|
+
[[ "$PRESERVE_METRICS" != "yes" ]] && echo " - Delete metrics data"
|
|
95
|
+
[[ "$PRESERVE_CONFIG" != "yes" ]] && echo " - Delete configuration"
|
|
96
|
+
echo ""
|
|
97
|
+
read -p "Continue? (y/N) " -n 1 -r
|
|
98
|
+
echo ""
|
|
99
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
100
|
+
echo "Shutdown cancelled"
|
|
101
|
+
exit 0
|
|
102
|
+
fi
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
# Track shutdown steps
|
|
106
|
+
declare -A STEPS_COMPLETED
|
|
107
|
+
SHUTDOWN_START=$(date +%s)
|
|
108
|
+
|
|
109
|
+
# Step 1: Flush message queue
|
|
110
|
+
if [[ "$FLUSH" == "yes" ]]; then
|
|
111
|
+
QUEUE_SIZE=$(redis-cli LLEN "$MESSAGES_LIST" 2>/dev/null || echo "0")
|
|
112
|
+
|
|
113
|
+
if [[ $QUEUE_SIZE -gt 0 ]]; then
|
|
114
|
+
# Get all messages before flushing
|
|
115
|
+
FLUSHED_MESSAGES=$(redis-cli LRANGE "$MESSAGES_LIST" 0 -1)
|
|
116
|
+
|
|
117
|
+
# Optionally save to file
|
|
118
|
+
FLUSH_FILE="/tmp/transparency-flush-${SCOPE}-$(date +%s).jsonl"
|
|
119
|
+
echo "$FLUSHED_MESSAGES" > "$FLUSH_FILE"
|
|
120
|
+
|
|
121
|
+
[[ "$FORMAT" == "text" ]] && echo "Flushed $QUEUE_SIZE messages to: $FLUSH_FILE"
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
STEPS_COMPLETED["flush"]="true"
|
|
125
|
+
else
|
|
126
|
+
STEPS_COMPLETED["flush"]="skipped"
|
|
127
|
+
fi
|
|
128
|
+
|
|
129
|
+
# Step 2: Update state to stopping
|
|
130
|
+
STOPPING_STATE=$(cat <<EOF
|
|
131
|
+
{
|
|
132
|
+
"initialized": false,
|
|
133
|
+
"status": "stopped",
|
|
134
|
+
"stoppedAt": $(date +%s),
|
|
135
|
+
"messageCount": $MESSAGE_COUNT,
|
|
136
|
+
"shutdownReason": "manual"
|
|
137
|
+
}
|
|
138
|
+
EOF
|
|
139
|
+
)
|
|
140
|
+
redis-cli SET "$STATE_KEY" "$STOPPING_STATE" > /dev/null
|
|
141
|
+
STEPS_COMPLETED["state_update"]="true"
|
|
142
|
+
|
|
143
|
+
# Step 3: Publish shutdown event
|
|
144
|
+
SHUTDOWN_EVENT=$(cat <<EOF
|
|
145
|
+
{
|
|
146
|
+
"event": "transparency_stopped",
|
|
147
|
+
"timestamp": $(date +%s),
|
|
148
|
+
"scope": "$SCOPE",
|
|
149
|
+
"messageCount": $MESSAGE_COUNT,
|
|
150
|
+
"preserveMetrics": $([ "$PRESERVE_METRICS" == "yes" ] && echo "true" || echo "false"),
|
|
151
|
+
"preserveConfig": $([ "$PRESERVE_CONFIG" == "yes" ] && echo "true" || echo "false")
|
|
152
|
+
}
|
|
153
|
+
EOF
|
|
154
|
+
)
|
|
155
|
+
redis-cli PUBLISH "transparency:events" "$SHUTDOWN_EVENT" > /dev/null
|
|
156
|
+
STEPS_COMPLETED["event_publish"]="true"
|
|
157
|
+
|
|
158
|
+
# Step 4: Clear message queue
|
|
159
|
+
redis-cli DEL "$MESSAGES_LIST" > /dev/null
|
|
160
|
+
STEPS_COMPLETED["queue_clear"]="true"
|
|
161
|
+
|
|
162
|
+
# Step 5: Remove filters
|
|
163
|
+
FILTER_COUNT=$(redis-cli HLEN "$FILTERS_KEY" 2>/dev/null || echo "0")
|
|
164
|
+
redis-cli DEL "$FILTERS_KEY" > /dev/null
|
|
165
|
+
STEPS_COMPLETED["filters_clear"]="true"
|
|
166
|
+
|
|
167
|
+
# Step 6: Delete metrics (unless preserved)
|
|
168
|
+
if [[ "$PRESERVE_METRICS" != "yes" ]]; then
|
|
169
|
+
redis-cli DEL "$METRICS_KEY" > /dev/null
|
|
170
|
+
STEPS_COMPLETED["metrics_delete"]="true"
|
|
171
|
+
else
|
|
172
|
+
STEPS_COMPLETED["metrics_delete"]="preserved"
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
# Step 7: Delete config (unless preserved)
|
|
176
|
+
if [[ "$PRESERVE_CONFIG" != "yes" ]]; then
|
|
177
|
+
redis-cli DEL "$CONFIG_KEY" > /dev/null
|
|
178
|
+
STEPS_COMPLETED["config_delete"]="true"
|
|
179
|
+
else
|
|
180
|
+
STEPS_COMPLETED["config_delete"]="preserved"
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
# Step 8: Delete state
|
|
184
|
+
redis-cli DEL "$STATE_KEY" > /dev/null
|
|
185
|
+
STEPS_COMPLETED["state_delete"]="true"
|
|
186
|
+
|
|
187
|
+
# Calculate shutdown duration
|
|
188
|
+
SHUTDOWN_END=$(date +%s)
|
|
189
|
+
SHUTDOWN_DURATION=$((SHUTDOWN_END - SHUTDOWN_START))
|
|
190
|
+
|
|
191
|
+
# Build summary
|
|
192
|
+
if [[ "$FORMAT" == "json" ]]; then
|
|
193
|
+
cat <<EOF
|
|
194
|
+
{
|
|
195
|
+
"success": true,
|
|
196
|
+
"scope": "$SCOPE",
|
|
197
|
+
"messageCount": $MESSAGE_COUNT,
|
|
198
|
+
"filterCount": $FILTER_COUNT,
|
|
199
|
+
"shutdownDuration": $SHUTDOWN_DURATION,
|
|
200
|
+
"steps": {
|
|
201
|
+
"flush": "${STEPS_COMPLETED[flush]}",
|
|
202
|
+
"stateUpdate": "${STEPS_COMPLETED[state_update]}",
|
|
203
|
+
"eventPublish": "${STEPS_COMPLETED[event_publish]}",
|
|
204
|
+
"queueClear": "${STEPS_COMPLETED[queue_clear]}",
|
|
205
|
+
"filtersClear": "${STEPS_COMPLETED[filters_clear]}",
|
|
206
|
+
"metricsDelete": "${STEPS_COMPLETED[metrics_delete]}",
|
|
207
|
+
"configDelete": "${STEPS_COMPLETED[config_delete]}",
|
|
208
|
+
"stateDelete": "${STEPS_COMPLETED[state_delete]}"
|
|
209
|
+
},
|
|
210
|
+
"timestamp": $SHUTDOWN_END
|
|
211
|
+
}
|
|
212
|
+
EOF
|
|
213
|
+
else
|
|
214
|
+
echo ""
|
|
215
|
+
echo "Shutdown Complete"
|
|
216
|
+
echo "================="
|
|
217
|
+
echo "Scope: $SCOPE"
|
|
218
|
+
echo "Duration: ${SHUTDOWN_DURATION}s"
|
|
219
|
+
echo ""
|
|
220
|
+
echo "Summary:"
|
|
221
|
+
echo " Messages Processed: $MESSAGE_COUNT"
|
|
222
|
+
echo " Filters Removed: $FILTER_COUNT"
|
|
223
|
+
echo " Message Queue: Cleared"
|
|
224
|
+
echo " Metrics: $([ "$PRESERVE_METRICS" == "yes" ] && echo "Preserved" || echo "Deleted")"
|
|
225
|
+
echo " Config: $([ "$PRESERVE_CONFIG" == "yes" ] && echo "Preserved" || echo "Deleted")"
|
|
226
|
+
echo ""
|
|
227
|
+
echo "Transparency middleware has been stopped successfully."
|
|
228
|
+
|
|
229
|
+
if [[ "$FLUSH" == "yes" && -f "$FLUSH_FILE" ]]; then
|
|
230
|
+
echo ""
|
|
231
|
+
echo "Flushed messages saved to: $FLUSH_FILE"
|
|
232
|
+
fi
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
exit 0
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
use crate::memory_repository::MemoryRepository;
|
|
2
|
+
use crate::memory_schema::{MemoryEntry, MemoryQuery};
|
|
3
|
+
use anyhow::Result;
|
|
4
|
+
use tracing::{info, error};
|
|
5
|
+
|
|
6
|
+
pub struct MemoryQueryBuilder {
|
|
7
|
+
query: MemoryQuery,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
impl MemoryQueryBuilder {
|
|
11
|
+
pub fn new() -> Self {
|
|
12
|
+
Self {
|
|
13
|
+
query: MemoryQuery::default(),
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
pub fn agent_id(mut self, id: String) -> Self {
|
|
18
|
+
self.query.agent_id = Some(id);
|
|
19
|
+
self
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
pub fn task_id(mut self, id: String) -> Self {
|
|
23
|
+
self.query.task_id = Some(id);
|
|
24
|
+
self
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
pub fn event_type(mut self, event_type: EventType) -> Self {
|
|
28
|
+
self.query.event_type = Some(event_type);
|
|
29
|
+
self
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
pub fn tool(mut self, tool: String) -> Self {
|
|
33
|
+
self.query.tool = Some(tool);
|
|
34
|
+
self
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
pub fn time_range(mut self, start: i64, end: i64) -> Self {
|
|
38
|
+
self.query.start_timestamp = Some(start);
|
|
39
|
+
self.query.end_timestamp = Some(end);
|
|
40
|
+
self
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
pub fn limit(mut self, limit: u32) -> Self {
|
|
44
|
+
self.query.limit = Some(limit);
|
|
45
|
+
self
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
pub async fn execute(self, repository: &MemoryRepository) -> Result<Vec<MemoryEntry>> {
|
|
49
|
+
info!("Executing memory query: {:?}", self.query);
|
|
50
|
+
|
|
51
|
+
let results = repository.query(&self.query).await?;
|
|
52
|
+
|
|
53
|
+
info!("Query returned {} results", results.len());
|
|
54
|
+
|
|
55
|
+
Ok(results)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
pub struct MemoryManager {
|
|
60
|
+
repository: MemoryRepository,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
impl MemoryManager {
|
|
64
|
+
pub async fn new(database_path: &str) -> Result<Self> {
|
|
65
|
+
let repository = MemoryRepository::new(database_path).await?;
|
|
66
|
+
Ok(Self { repository })
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
pub fn query_builder(&self) -> MemoryQueryBuilder {
|
|
70
|
+
MemoryQueryBuilder::new()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
pub async fn log_entry(&self, entry: &MemoryEntry) -> Result<i64> {
|
|
74
|
+
match self.repository.insert(entry).await {
|
|
75
|
+
Ok(id) => {
|
|
76
|
+
info!("Successfully logged memory entry with id: {}", id);
|
|
77
|
+
Ok(id)
|
|
78
|
+
},
|
|
79
|
+
Err(e) => {
|
|
80
|
+
error!("Failed to log memory entry: {:?}", e);
|
|
81
|
+
Err(e)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
use anyhow::{Result, Context};
|
|
2
|
+
use sqlx::{sqlite::SqlitePool, FromRow};
|
|
3
|
+
use crate::memory_schema::{MemoryEntry, MemoryQuery, EventType};
|
|
4
|
+
use serde_json;
|
|
5
|
+
use tracing::{info, warn};
|
|
6
|
+
|
|
7
|
+
pub struct MemoryRepository {
|
|
8
|
+
pool: SqlitePool,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
impl MemoryRepository {
|
|
12
|
+
pub async fn new(database_path: &str) -> Result<Self> {
|
|
13
|
+
let pool = SqlitePool::connect(&format!("sqlite:{}", database_path))
|
|
14
|
+
.await
|
|
15
|
+
.context("Failed to connect to SQLite database")?;
|
|
16
|
+
|
|
17
|
+
Self::create_table(&pool).await?;
|
|
18
|
+
|
|
19
|
+
Ok(Self { pool })
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async fn create_table(pool: &SqlitePool) -> Result<()> {
|
|
23
|
+
sqlx::query(r#"
|
|
24
|
+
CREATE TABLE IF NOT EXISTS agent_memory (
|
|
25
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
26
|
+
agent_id TEXT NOT NULL,
|
|
27
|
+
task_id TEXT NOT NULL,
|
|
28
|
+
timestamp INTEGER NOT NULL,
|
|
29
|
+
event_type TEXT NOT NULL,
|
|
30
|
+
tool TEXT,
|
|
31
|
+
metadata TEXT,
|
|
32
|
+
confidence REAL,
|
|
33
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
34
|
+
)
|
|
35
|
+
"#)
|
|
36
|
+
.execute(pool)
|
|
37
|
+
.await
|
|
38
|
+
.context("Failed to create agent_memory table")?;
|
|
39
|
+
|
|
40
|
+
// Create indexes
|
|
41
|
+
let indexes = vec![
|
|
42
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_memory_agent_id ON agent_memory(agent_id)",
|
|
43
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_memory_task_id ON agent_memory(task_id)",
|
|
44
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_memory_timestamp ON agent_memory(timestamp DESC)",
|
|
45
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_memory_event_type ON agent_memory(event_type)",
|
|
46
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_memory_tool ON agent_memory(tool)",
|
|
47
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_memory_task_agent ON agent_memory(task_id, agent_id)"
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
for index in indexes {
|
|
51
|
+
sqlx::query(index)
|
|
52
|
+
.execute(pool)
|
|
53
|
+
.await
|
|
54
|
+
.context("Failed to create index")?;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
Ok(())
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
pub async fn insert(&self, entry: &MemoryEntry) -> Result<i64> {
|
|
61
|
+
let metadata_json = entry.metadata.as_ref()
|
|
62
|
+
.map(|m| serde_json::to_string(m).ok())
|
|
63
|
+
.flatten();
|
|
64
|
+
|
|
65
|
+
let id = sqlx::query(r#"
|
|
66
|
+
INSERT INTO agent_memory
|
|
67
|
+
(agent_id, task_id, timestamp, event_type, tool, metadata, confidence)
|
|
68
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
69
|
+
"#)
|
|
70
|
+
.bind(&entry.agent_id)
|
|
71
|
+
.bind(&entry.task_id)
|
|
72
|
+
.bind(entry.timestamp)
|
|
73
|
+
.bind(entry.event_type.to_string())
|
|
74
|
+
.bind(&entry.tool)
|
|
75
|
+
.bind(metadata_json)
|
|
76
|
+
.bind(entry.confidence)
|
|
77
|
+
.execute(&self.pool)
|
|
78
|
+
.await
|
|
79
|
+
.context("Failed to insert memory entry")?
|
|
80
|
+
.last_insert_rowid();
|
|
81
|
+
|
|
82
|
+
info!(
|
|
83
|
+
"Inserted memory entry for agent {} in task {}",
|
|
84
|
+
entry.agent_id, entry.task_id
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
Ok(id)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
pub async fn query(&self, query: &MemoryQuery) -> Result<Vec<MemoryEntry>> {
|
|
91
|
+
let mut sql = "SELECT * FROM agent_memory WHERE 1=1".to_string();
|
|
92
|
+
let mut conditions = Vec::new();
|
|
93
|
+
let mut params = Vec::new();
|
|
94
|
+
|
|
95
|
+
if let Some(agent_id) = &query.agent_id {
|
|
96
|
+
conditions.push("agent_id = ?");
|
|
97
|
+
params.push(agent_id);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if let Some(task_id) = &query.task_id {
|
|
101
|
+
conditions.push("task_id = ?");
|
|
102
|
+
params.push(task_id);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if let Some(event_type) = &query.event_type {
|
|
106
|
+
conditions.push("event_type = ?");
|
|
107
|
+
params.push(&event_type.to_string());
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if let Some(tool) = &query.tool {
|
|
111
|
+
conditions.push("tool = ?");
|
|
112
|
+
params.push(tool);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if let Some(start) = query.start_timestamp {
|
|
116
|
+
conditions.push("timestamp >= ?");
|
|
117
|
+
params.push(start);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if let Some(end) = query.end_timestamp {
|
|
121
|
+
conditions.push("timestamp <= ?");
|
|
122
|
+
params.push(end);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
sql.push_str(" AND ");
|
|
126
|
+
sql.push_str(&conditions.join(" AND "));
|
|
127
|
+
sql.push_str(" ORDER BY timestamp DESC");
|
|
128
|
+
|
|
129
|
+
if let Some(limit) = query.limit {
|
|
130
|
+
sql.push_str(&format!(" LIMIT {}", limit));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
let results = sqlx::query_as::<_, MemoryEntry>(&sql)
|
|
134
|
+
.fetch_all(&self.pool)
|
|
135
|
+
.await
|
|
136
|
+
.context("Failed to query memory entries")?;
|
|
137
|
+
|
|
138
|
+
Ok(results)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
use serde::{Deserialize, Serialize};
|
|
2
|
+
use sqlx::FromRow;
|
|
3
|
+
use chrono::{DateTime, Utc};
|
|
4
|
+
|
|
5
|
+
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
|
|
6
|
+
pub struct MemoryEntry {
|
|
7
|
+
pub id: Option<i64>,
|
|
8
|
+
pub agent_id: String,
|
|
9
|
+
pub task_id: String,
|
|
10
|
+
pub timestamp: i64,
|
|
11
|
+
pub event_type: EventType,
|
|
12
|
+
pub tool: Option<String>,
|
|
13
|
+
pub metadata: Option<String>,
|
|
14
|
+
pub confidence: Option<f64>,
|
|
15
|
+
pub created_at: DateTime<Utc>,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
19
|
+
pub enum EventType {
|
|
20
|
+
Edit,
|
|
21
|
+
Write,
|
|
22
|
+
Bash,
|
|
23
|
+
Task,
|
|
24
|
+
Read,
|
|
25
|
+
Other(String),
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
impl From<&str> for EventType {
|
|
29
|
+
fn from(s: &str) -> Self {
|
|
30
|
+
match s {
|
|
31
|
+
"edit" => EventType::Edit,
|
|
32
|
+
"write" => EventType::Write,
|
|
33
|
+
"bash" => EventType::Bash,
|
|
34
|
+
"task" => EventType::Task,
|
|
35
|
+
"read" => EventType::Read,
|
|
36
|
+
_ => EventType::Other(s.to_string()),
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
42
|
+
pub struct MemoryQuery {
|
|
43
|
+
pub agent_id: Option<String>,
|
|
44
|
+
pub task_id: Option<String>,
|
|
45
|
+
pub event_type: Option<EventType>,
|
|
46
|
+
pub tool: Option<String>,
|
|
47
|
+
pub start_timestamp: Option<i64>,
|
|
48
|
+
pub end_timestamp: Option<i64>,
|
|
49
|
+
pub limit: Option<u32>,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
impl Default for MemoryQuery {
|
|
53
|
+
fn default() -> Self {
|
|
54
|
+
Self {
|
|
55
|
+
agent_id: None,
|
|
56
|
+
task_id: None,
|
|
57
|
+
event_type: None,
|
|
58
|
+
tool: None,
|
|
59
|
+
start_timestamp: None,
|
|
60
|
+
end_timestamp: None,
|
|
61
|
+
limit: Some(100),
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Transparency Middleware Configuration
|
|
4
|
+
# Version: 1.0.0
|
|
5
|
+
|
|
6
|
+
# Redis Configuration
|
|
7
|
+
export REDIS_HOST="${REDIS_HOST:-localhost}"
|
|
8
|
+
export REDIS_PORT="${REDIS_PORT:-6379}"
|
|
9
|
+
|
|
10
|
+
# Transparency Levels
|
|
11
|
+
TRANSPARENCY_LEVELS=(
|
|
12
|
+
"minimal" # Minimal logging, low overhead
|
|
13
|
+
"detailed" # Standard operational insights
|
|
14
|
+
"verbose" # Comprehensive logging
|
|
15
|
+
"debug" # Maximum verbosity and tracing
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Performance Thresholds
|
|
19
|
+
export MAX_OVERHEAD_PERCENTAGE=5
|
|
20
|
+
export MAX_MESSAGE_LATENCY_MS=50
|
|
21
|
+
export MAX_MEMORY_USAGE_MB=10
|
|
22
|
+
|
|
23
|
+
# Logging Configuration
|
|
24
|
+
export LOG_RETENTION_DAYS=7
|
|
25
|
+
export LOG_MAX_SIZE_MB=100
|
|
26
|
+
|
|
27
|
+
# Test-specific Configuration
|
|
28
|
+
export TEST_TIMEOUT_SECONDS=30
|
|
29
|
+
export TEST_MESSAGE_COUNT=1000
|