@howlil/ez-agents 3.5.0 → 4.0.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/README.md +735 -537
- package/agents/ez-architect-agent.md +267 -0
- package/agents/ez-backend-agent.md +303 -0
- package/agents/ez-chief-strategist.md +271 -0
- package/agents/ez-codebase-mapper.md +770 -770
- package/agents/ez-context-manager.md +319 -0
- package/agents/ez-debugger.md +1255 -1255
- package/agents/ez-design-expert.md +347 -0
- package/agents/ez-devops-agent.md +331 -0
- package/agents/ez-executor.md +487 -487
- package/agents/ez-frontend-agent.md +322 -0
- package/agents/ez-phase-researcher.md +553 -553
- package/agents/ez-planner.md +1307 -1307
- package/agents/ez-product-engineer.md +435 -0
- package/agents/ez-project-researcher.md +629 -629
- package/agents/ez-qa-agent.md +320 -0
- package/agents/ez-release-agent.md +333 -333
- package/agents/ez-requirements-agent.md +377 -377
- package/agents/ez-roadmapper.md +650 -650
- package/agents/ez-technical-writer.md +551 -0
- package/agents/ez-ux-expert.md +393 -0
- package/agents/ez-verifier.md +579 -579
- package/bin/guards/autonomy-guard.cjs +346 -0
- package/bin/guards/context-budget-guard.cjs +278 -0
- package/bin/guards/hallucination-guard.cjs +380 -0
- package/bin/guards/hidden-state-guard.cjs +182 -0
- package/bin/guards/team-overhead-guard.cjs +266 -0
- package/bin/guards/tool-sprawl-guard.cjs +271 -0
- package/bin/lib/analytics/analytics-collector.cjs +86 -0
- package/bin/lib/analytics/analytics-reporter.cjs +130 -0
- package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
- package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
- package/bin/lib/analytics/nps-tracker.cjs +147 -0
- package/bin/lib/archetype-detector.cjs +289 -0
- package/bin/lib/assistant-adapter.cjs +361 -0
- package/bin/lib/audit-exec.cjs +175 -0
- package/bin/lib/auth.cjs +176 -0
- package/bin/lib/backup-service.cjs +422 -0
- package/bin/lib/bdd-validator.cjs +622 -0
- package/bin/lib/business-flow-mapper.cjs +429 -0
- package/bin/lib/circuit-breaker.cjs +276 -0
- package/bin/lib/code-complexity-analyzer.cjs +360 -0
- package/bin/lib/codebase-analyzer.cjs +241 -0
- package/bin/lib/commands.cjs +691 -0
- package/bin/lib/config.cjs +236 -0
- package/bin/lib/constraint-extractor.cjs +526 -0
- package/bin/lib/content-scanner.cjs +238 -0
- package/bin/lib/context-cache.cjs +154 -0
- package/bin/lib/context-compressor.cjs +102 -0
- package/bin/lib/context-deduplicator.cjs +105 -0
- package/bin/lib/context-errors.cjs +78 -0
- package/bin/lib/context-manager.cjs +338 -0
- package/bin/lib/context-metadata-tracker.cjs +140 -0
- package/bin/lib/context-relevance-scorer.cjs +99 -0
- package/bin/lib/core.cjs +507 -0
- package/bin/lib/cost-alerts.cjs +174 -0
- package/bin/lib/cost-tracker.cjs +275 -0
- package/bin/lib/crash-recovery.cjs +220 -0
- package/bin/lib/dependency-graph.cjs +319 -0
- package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
- package/bin/lib/deploy/deploy-detector.cjs +69 -0
- package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
- package/bin/lib/deploy/deploy-health-check.cjs +88 -0
- package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
- package/bin/lib/deploy/deploy-rollback.cjs +72 -0
- package/bin/lib/deploy/deploy-runner.cjs +97 -0
- package/bin/lib/deploy/deploy-status.cjs +74 -0
- package/bin/lib/discussion-synthesizer.cjs +439 -0
- package/bin/lib/error-cache.cjs +114 -0
- package/bin/lib/error-registry.cjs +177 -0
- package/bin/lib/file-access.cjs +207 -0
- package/bin/lib/file-lock.cjs +236 -0
- package/bin/lib/finops/budget-enforcer.cjs +126 -0
- package/bin/lib/finops/cost-reporter.cjs +132 -0
- package/bin/lib/finops/finops-analyzer.cjs +112 -0
- package/bin/lib/finops/spot-manager.cjs +118 -0
- package/bin/lib/framework-detector.cjs +396 -0
- package/bin/lib/frontmatter.cjs +313 -0
- package/bin/lib/fs-utils.cjs +153 -0
- package/bin/lib/gate-executor.cjs +272 -0
- package/bin/lib/gates/README.md +374 -0
- package/bin/lib/gates/gate-01-requirement.cjs +303 -0
- package/bin/lib/gates/gate-02-architecture.cjs +555 -0
- package/bin/lib/gates/gate-03-code.cjs +635 -0
- package/bin/lib/gates/gate-04-security.cjs +829 -0
- package/bin/lib/git-errors.cjs +83 -0
- package/bin/lib/git-utils.cjs +321 -0
- package/bin/lib/git-workflow-engine.cjs +1157 -0
- package/bin/lib/health-check.cjs +227 -0
- package/bin/lib/index.cjs +279 -0
- package/bin/lib/init.cjs +725 -0
- package/bin/lib/lock-logger.cjs +194 -0
- package/bin/lib/lock-state.cjs +263 -0
- package/bin/lib/lockfile-validator.cjs +227 -0
- package/bin/lib/log-rotation.cjs +71 -0
- package/bin/lib/logger.cjs +125 -0
- package/bin/lib/memory-compression.cjs +256 -0
- package/bin/lib/milestone.cjs +247 -0
- package/bin/lib/model-provider.cjs +241 -0
- package/bin/lib/package-manager-detector.cjs +203 -0
- package/bin/lib/package-manager-executor.cjs +385 -0
- package/bin/lib/package-manager-service.cjs +216 -0
- package/bin/lib/perf/api-monitor.cjs +88 -0
- package/bin/lib/perf/db-optimizer.cjs +78 -0
- package/bin/lib/perf/frontend-performance.cjs +56 -0
- package/bin/lib/perf/perf-analyzer.cjs +77 -0
- package/bin/lib/perf/perf-baseline.cjs +102 -0
- package/bin/lib/perf/perf-reporter.cjs +117 -0
- package/bin/lib/perf/regression-detector.cjs +92 -0
- package/bin/lib/phase.cjs +963 -0
- package/bin/lib/planning-write.cjs +123 -0
- package/bin/lib/project-reporter.cjs +565 -0
- package/bin/lib/quality-gate.cjs +332 -0
- package/bin/lib/quality-metrics.cjs +324 -0
- package/bin/lib/recovery-manager.cjs +98 -0
- package/bin/lib/release-validator.cjs +617 -0
- package/bin/lib/retry.cjs +119 -0
- package/bin/lib/roadmap.cjs +309 -0
- package/bin/lib/safe-exec.cjs +173 -0
- package/bin/lib/safe-path.cjs +130 -0
- package/bin/lib/security-errors.cjs +62 -0
- package/bin/lib/session-chain.cjs +304 -0
- package/bin/lib/session-errors.cjs +81 -0
- package/bin/lib/session-export.cjs +251 -0
- package/bin/lib/session-import.cjs +262 -0
- package/bin/lib/session-manager.cjs +280 -0
- package/bin/lib/skill-context.cjs +148 -0
- package/bin/lib/skill-matcher.cjs +236 -0
- package/bin/lib/skill-registry.cjs +360 -0
- package/bin/lib/skill-resolver.cjs +449 -0
- package/bin/lib/skill-triggers.cjs +90 -0
- package/bin/lib/skill-validator.cjs +270 -0
- package/bin/lib/skill-versioning.cjs +355 -0
- package/bin/lib/stack-detector.cjs +399 -0
- package/bin/lib/state.cjs +736 -0
- package/bin/lib/tech-debt-analyzer.cjs +309 -0
- package/bin/lib/temp-file.cjs +239 -0
- package/bin/lib/template.cjs +223 -0
- package/bin/lib/test-file-lock.cjs +112 -0
- package/bin/lib/test-graceful.cjs +93 -0
- package/bin/lib/test-logger.cjs +60 -0
- package/bin/lib/test-safe-exec.cjs +38 -0
- package/bin/lib/test-safe-path.cjs +33 -0
- package/bin/lib/test-temp-file.cjs +125 -0
- package/bin/lib/tier-manager.cjs +428 -0
- package/bin/lib/timeout-exec.cjs +63 -0
- package/bin/lib/tradeoff-analyzer.cjs +284 -0
- package/bin/lib/url-fetch.cjs +170 -0
- package/bin/lib/verify.cjs +863 -0
- package/bin/update.js +217 -214
- package/commands/deploy.cjs +53 -0
- package/commands/ez/add-tests.md +41 -41
- package/commands/ez/audit-milestone.md +36 -36
- package/commands/ez/complete-milestone.md +136 -136
- package/commands/ez/discuss-phase.md +90 -90
- package/commands/ez/execute-phase.md +52 -52
- package/commands/ez/help.md +22 -22
- package/commands/ez/map-codebase.md +71 -71
- package/commands/ez/new-milestone.md +44 -44
- package/commands/ez/new-project.md +51 -42
- package/commands/ez/plan-phase.md +53 -53
- package/commands/ez/progress.md +36 -36
- package/commands/ez/quick.md +45 -45
- package/commands/ez/resume-work.md +40 -40
- package/commands/ez/run-phase.md +580 -0
- package/commands/ez/settings.md +36 -36
- package/commands/ez/update.md +37 -37
- package/commands/ez/verify-work.md +402 -38
- package/commands/health-check.cjs +44 -0
- package/commands/rollback.cjs +47 -0
- package/ez-agents/bin/ez-tools.cjs +599 -2
- package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
- package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
- package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
- package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
- package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
- package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
- package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
- package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
- package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
- package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
- package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
- package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
- package/ez-agents/bin/lib/audit-exec.cjs +166 -167
- package/ez-agents/bin/lib/auth.cjs +176 -176
- package/ez-agents/bin/lib/backup-service.cjs +422 -0
- package/ez-agents/bin/lib/bdd-validator.cjs +622 -622
- package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
- package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
- package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
- package/ez-agents/bin/lib/commands.cjs +685 -685
- package/ez-agents/bin/lib/config.cjs +41 -1
- package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
- package/ez-agents/bin/lib/content-scanner.cjs +238 -238
- package/ez-agents/bin/lib/context-cache.cjs +154 -154
- package/ez-agents/bin/lib/context-errors.cjs +71 -71
- package/ez-agents/bin/lib/context-manager.cjs +220 -220
- package/ez-agents/bin/lib/core.cjs +507 -512
- package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
- package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
- package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
- package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
- package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
- package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
- package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
- package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
- package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
- package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
- package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
- package/ez-agents/bin/lib/file-access.cjs +207 -207
- package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
- package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
- package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
- package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
- package/ez-agents/bin/lib/framework-detector.cjs +396 -0
- package/ez-agents/bin/lib/frontmatter.cjs +3 -1
- package/ez-agents/bin/lib/gates/README.md +374 -0
- package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
- package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
- package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
- package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
- package/ez-agents/bin/lib/git-errors.cjs +83 -83
- package/ez-agents/bin/lib/git-utils.cjs +321 -321
- package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -1157
- package/ez-agents/bin/lib/health-check.cjs +162 -162
- package/ez-agents/bin/lib/index.cjs +2 -8
- package/ez-agents/bin/lib/init.cjs +0 -2
- package/ez-agents/bin/lib/lockfile-validator.cjs +227 -227
- package/ez-agents/bin/lib/log-rotation.cjs +71 -0
- package/ez-agents/bin/lib/logger.cjs +22 -47
- package/ez-agents/bin/lib/memory-compression.cjs +256 -256
- package/ez-agents/bin/lib/package-manager-detector.cjs +203 -203
- package/ez-agents/bin/lib/package-manager-executor.cjs +385 -385
- package/ez-agents/bin/lib/package-manager-service.cjs +216 -216
- package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
- package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
- package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
- package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
- package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
- package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
- package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
- package/ez-agents/bin/lib/project-reporter.cjs +502 -0
- package/ez-agents/bin/lib/quality-gate.cjs +332 -0
- package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
- package/ez-agents/bin/lib/release-validator.cjs +617 -614
- package/ez-agents/bin/lib/security-errors.cjs +62 -0
- package/ez-agents/bin/lib/session-chain.cjs +304 -304
- package/ez-agents/bin/lib/session-errors.cjs +81 -81
- package/ez-agents/bin/lib/session-export.cjs +251 -251
- package/ez-agents/bin/lib/session-import.cjs +262 -262
- package/ez-agents/bin/lib/session-manager.cjs +280 -280
- package/ez-agents/bin/lib/skill-context.cjs +148 -0
- package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
- package/ez-agents/bin/lib/skill-registry.cjs +341 -0
- package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
- package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
- package/ez-agents/bin/lib/skill-validator.cjs +270 -0
- package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
- package/ez-agents/bin/lib/stack-detector.cjs +399 -0
- package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
- package/ez-agents/bin/lib/tier-manager.cjs +428 -428
- package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
- package/ez-agents/bin/lib/url-fetch.cjs +170 -170
- package/ez-agents/bin/lib/verify.cjs +863 -863
- package/ez-agents/references/decimal-phase-calculation.md +65 -65
- package/ez-agents/references/git-integration.md +248 -248
- package/ez-agents/references/git-planning-commit.md +38 -38
- package/ez-agents/references/metrics-schema.md +118 -118
- package/ez-agents/references/model-profile-resolution.md +34 -34
- package/ez-agents/references/model-profiles.md +93 -93
- package/ez-agents/references/phase-argument-parsing.md +61 -61
- package/ez-agents/references/planning-config.md +340 -340
- package/ez-agents/references/tier-strategy.md +103 -103
- package/ez-agents/references/ui-brand.md +160 -160
- package/ez-agents/references/verification-patterns.md +612 -612
- package/ez-agents/templates/DEBUG.md +164 -164
- package/ez-agents/templates/UAT.md +247 -247
- package/ez-agents/templates/agent-output-format.md +404 -0
- package/ez-agents/templates/bdd-feature.md +173 -173
- package/ez-agents/templates/codebase/architecture.md +255 -255
- package/ez-agents/templates/codebase/structure.md +285 -285
- package/ez-agents/templates/copilot-instructions.md +7 -7
- package/ez-agents/templates/debug-subagent-prompt.md +91 -91
- package/ez-agents/templates/discovery.md +146 -146
- package/ez-agents/templates/discussion.md +68 -68
- package/ez-agents/templates/handoff-protocol.md +294 -0
- package/ez-agents/templates/incident-runbook.md +205 -205
- package/ez-agents/templates/mode-workflow-templates.md +301 -0
- package/ez-agents/templates/phase-prompt.md +610 -610
- package/ez-agents/templates/planner-subagent-prompt.md +117 -117
- package/ez-agents/templates/project.md +184 -184
- package/ez-agents/templates/release-checklist.md +136 -133
- package/ez-agents/templates/research.md +552 -552
- package/ez-agents/templates/rollback-plan.md +201 -201
- package/ez-agents/templates/security-user-setup.md +244 -0
- package/ez-agents/templates/skill-validation-rules.md +476 -0
- package/ez-agents/templates/state.md +180 -176
- package/ez-agents/templates/summary-complex.md +59 -59
- package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
- package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
- package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
- package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
- package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
- package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
- package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
- package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
- package/ez-agents/workflows/audit-milestone.md +1 -1
- package/ez-agents/workflows/autonomous.md +844 -844
- package/ez-agents/workflows/complete-milestone.md +1 -1
- package/ez-agents/workflows/discuss-phase.md +1 -1
- package/ez-agents/workflows/execute-phase.md +124 -3
- package/ez-agents/workflows/help.md +42 -181
- package/ez-agents/workflows/hotfix.md +291 -291
- package/ez-agents/workflows/new-milestone.md +713 -713
- package/ez-agents/workflows/new-project.md +1089 -1107
- package/ez-agents/workflows/plan-phase.md +0 -40
- package/ez-agents/workflows/release.md +253 -253
- package/ez-agents/workflows/resume-session.md +215 -215
- package/ez-agents/workflows/run-phase.md +531 -0
- package/ez-agents/workflows/settings.md +2 -35
- package/hooks/dist/ez-check-update.js +81 -81
- package/hooks/dist/ez-context-monitor.js +148 -141
- package/hooks/dist/ez-statusline.js +115 -115
- package/package.json +78 -71
- package/scripts/fix-qwen-installation.js +144 -144
- package/agents/ez-integration-checker.md +0 -443
- package/agents/ez-nyquist-auditor.md +0 -176
- package/agents/ez-observer-agent.md +0 -260
- package/agents/ez-plan-checker.md +0 -706
- package/agents/ez-research-synthesizer.md +0 -247
- package/agents/ez-scrum-master-agent.md +0 -242
- package/agents/ez-tech-lead-agent.md +0 -267
- package/agents/ez-ui-auditor.md +0 -439
- package/agents/ez-ui-checker.md +0 -300
- package/agents/ez-ui-researcher.md +0 -353
- package/commands/ez/add-phase.md +0 -43
- package/commands/ez/add-todo.md +0 -47
- package/commands/ez/arch-review.md +0 -102
- package/commands/ez/auth.md +0 -87
- package/commands/ez/autonomous.md +0 -41
- package/commands/ez/check-todos.md +0 -45
- package/commands/ez/cleanup.md +0 -18
- package/commands/ez/debug.md +0 -168
- package/commands/ez/export-session.md +0 -79
- package/commands/ez/gather-requirements.md +0 -117
- package/commands/ez/git-workflow.md +0 -72
- package/commands/ez/health.md +0 -22
- package/commands/ez/hotfix.md +0 -120
- package/commands/ez/import-session.md +0 -82
- package/commands/ez/insert-phase.md +0 -32
- package/commands/ez/join-discord.md +0 -18
- package/commands/ez/list-phase-assumptions.md +0 -46
- package/commands/ez/list-sessions.md +0 -96
- package/commands/ez/package-manager.md +0 -316
- package/commands/ez/pause-work.md +0 -38
- package/commands/ez/plan-milestone-gaps.md +0 -34
- package/commands/ez/preflight.md +0 -79
- package/commands/ez/reapply-patches.md +0 -124
- package/commands/ez/release.md +0 -153
- package/commands/ez/remove-phase.md +0 -31
- package/commands/ez/research-phase.md +0 -190
- package/commands/ez/resume.md +0 -107
- package/commands/ez/set-profile.md +0 -34
- package/commands/ez/standup.md +0 -85
- package/commands/ez/stats.md +0 -18
- package/commands/ez/ui-phase.md +0 -34
- package/commands/ez/ui-review.md +0 -32
- package/commands/ez/validate-phase.md +0 -35
- package/ez-agents/bin/lib/metrics-tracker.cjs +0 -406
- package/ez-agents/templates/UI-SPEC.md +0 -100
- package/ez-agents/templates/VALIDATION.md +0 -76
- package/ez-agents/templates/context.md +0 -352
- package/ez-agents/templates/verification-report.md +0 -322
- package/ez-agents/workflows/arch-review.md +0 -54
- package/ez-agents/workflows/export-session.md +0 -255
- package/ez-agents/workflows/gather-requirements.md +0 -206
- package/ez-agents/workflows/import-session.md +0 -303
- package/ez-agents/workflows/research-phase.md +0 -74
- package/ez-agents/workflows/standup.md +0 -64
- package/ez-agents/workflows/ui-phase.md +0 -290
- package/ez-agents/workflows/ui-review.md +0 -157
- package/ez-agents/workflows/validate-phase.md +0 -167
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* EZ Health Check — Health monitoring for EZ workflow
|
|
5
|
+
*
|
|
6
|
+
* Validates EZ environment and configuration
|
|
7
|
+
* Used by workflows to detect failures and use fallback functions
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const HealthCheck = require('./health-check.cjs');
|
|
11
|
+
* const health = new HealthCheck();
|
|
12
|
+
* const result = health.runAll();
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
const path = require('path');
|
|
17
|
+
|
|
18
|
+
class HealthCheck {
|
|
19
|
+
/**
|
|
20
|
+
* Create a HealthCheck instance
|
|
21
|
+
*/
|
|
22
|
+
constructor() {
|
|
23
|
+
this.issues = [];
|
|
24
|
+
this.warnings = [];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Check Node.js version (must be >= 16)
|
|
29
|
+
* @returns {boolean} - True if version is acceptable
|
|
30
|
+
*/
|
|
31
|
+
checkNodeVersion() {
|
|
32
|
+
try {
|
|
33
|
+
const version = process.version;
|
|
34
|
+
const major = parseInt(version.slice(1).split('.')[0]);
|
|
35
|
+
if (major < 16) {
|
|
36
|
+
this.issues.push(`Node.js version ${version} is below required 16.x`);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
} catch (err) {
|
|
41
|
+
this.issues.push('Cannot determine Node.js version');
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Check if .planning directory exists
|
|
48
|
+
* @returns {boolean} - True if exists
|
|
49
|
+
*/
|
|
50
|
+
checkPlanningDirectory() {
|
|
51
|
+
const planningDir = '.planning';
|
|
52
|
+
if (!fs.existsSync(planningDir)) {
|
|
53
|
+
this.warnings.push('.planning directory does not exist');
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Check if config.json exists and is valid JSON
|
|
61
|
+
* @returns {boolean} - True if exists and valid
|
|
62
|
+
*/
|
|
63
|
+
checkConfigFile() {
|
|
64
|
+
const configPath = '.planning/config.json';
|
|
65
|
+
if (!fs.existsSync(configPath)) {
|
|
66
|
+
this.warnings.push('config.json not found');
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
71
|
+
return true;
|
|
72
|
+
} catch (err) {
|
|
73
|
+
this.issues.push('config.json is invalid JSON');
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Check if STATE.md exists
|
|
80
|
+
* @returns {boolean} - True if exists
|
|
81
|
+
*/
|
|
82
|
+
checkStateFile() {
|
|
83
|
+
const statePath = '.planning/STATE.md';
|
|
84
|
+
if (!fs.existsSync(statePath)) {
|
|
85
|
+
this.warnings.push('STATE.md not found');
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Check if ROADMAP.md exists
|
|
93
|
+
* @returns {boolean} - True if exists
|
|
94
|
+
*/
|
|
95
|
+
checkRoadmapFile() {
|
|
96
|
+
const roadmapPath = '.planning/ROADMAP.md';
|
|
97
|
+
if (!fs.existsSync(roadmapPath)) {
|
|
98
|
+
this.warnings.push('ROADMAP.md not found');
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Check if PROJECT.md exists
|
|
106
|
+
* @returns {boolean} - True if exists
|
|
107
|
+
*/
|
|
108
|
+
checkProjectFile() {
|
|
109
|
+
const projectPath = '.planning/PROJECT.md';
|
|
110
|
+
if (!fs.existsSync(projectPath)) {
|
|
111
|
+
this.warnings.push('PROJECT.md not found');
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Check if REQUIREMENTS.md exists
|
|
119
|
+
* @returns {boolean} - True if exists
|
|
120
|
+
*/
|
|
121
|
+
checkRequirementsFile() {
|
|
122
|
+
const reqPath = '.planning/REQUIREMENTS.md';
|
|
123
|
+
if (!fs.existsSync(reqPath)) {
|
|
124
|
+
this.warnings.push('REQUIREMENTS.md not found');
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Check if git is available in PATH
|
|
132
|
+
* @returns {boolean} - True if git is available
|
|
133
|
+
*/
|
|
134
|
+
checkGitAvailability() {
|
|
135
|
+
try {
|
|
136
|
+
const { execSync } = require('child_process');
|
|
137
|
+
execSync('git --version', { stdio: 'ignore', timeout: 5000 });
|
|
138
|
+
return true;
|
|
139
|
+
} catch (err) {
|
|
140
|
+
this.warnings.push('git is not available in PATH');
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Check if required API keys are configured
|
|
147
|
+
* @returns {Object} - { ok: boolean, missing: string[] }
|
|
148
|
+
*/
|
|
149
|
+
checkApiKeys() {
|
|
150
|
+
const missing = [];
|
|
151
|
+
const requiredKeys = ['ANTHROPIC_API_KEY'];
|
|
152
|
+
|
|
153
|
+
for (const key of requiredKeys) {
|
|
154
|
+
if (!process.env[key]) {
|
|
155
|
+
// Also check ~/.ez/ directory
|
|
156
|
+
const homeDir = require('os').homedir();
|
|
157
|
+
const keyPath = path.join(homeDir, '.ez', key.toLowerCase().replace('_api_key', ''));
|
|
158
|
+
if (!fs.existsSync(keyPath)) {
|
|
159
|
+
missing.push(key);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (missing.length > 0) {
|
|
165
|
+
return { ok: false, missing };
|
|
166
|
+
}
|
|
167
|
+
return { ok: true };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Check if npm dependencies are installed
|
|
172
|
+
* @returns {Object} - { ok: boolean, missing: string[] }
|
|
173
|
+
*/
|
|
174
|
+
checkDependencies() {
|
|
175
|
+
const missing = [];
|
|
176
|
+
const requiredDeps = ['proper-lockfile', 'semver'];
|
|
177
|
+
|
|
178
|
+
for (const dep of requiredDeps) {
|
|
179
|
+
try {
|
|
180
|
+
require.resolve(dep);
|
|
181
|
+
} catch (err) {
|
|
182
|
+
missing.push(dep);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (missing.length > 0) {
|
|
187
|
+
return { ok: false, missing };
|
|
188
|
+
}
|
|
189
|
+
return { ok: true };
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Run all health checks
|
|
194
|
+
* @returns {Object} - Health status object
|
|
195
|
+
*/
|
|
196
|
+
runAll() {
|
|
197
|
+
const results = {
|
|
198
|
+
status: 'healthy',
|
|
199
|
+
timestamp: new Date().toISOString(),
|
|
200
|
+
node_version: process.version,
|
|
201
|
+
checks: {
|
|
202
|
+
node_version: this.checkNodeVersion(),
|
|
203
|
+
planning_dir: this.checkPlanningDirectory(),
|
|
204
|
+
config_file: this.checkConfigFile(),
|
|
205
|
+
state_file: this.checkStateFile(),
|
|
206
|
+
roadmap_file: this.checkRoadmapFile(),
|
|
207
|
+
project_file: this.checkProjectFile(),
|
|
208
|
+
requirements_file: this.checkRequirementsFile(),
|
|
209
|
+
git: this.checkGitAvailability(),
|
|
210
|
+
api_keys: this.checkApiKeys(),
|
|
211
|
+
dependencies: this.checkDependencies()
|
|
212
|
+
},
|
|
213
|
+
issues: this.issues,
|
|
214
|
+
warnings: this.warnings
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
if (this.issues.length > 0) {
|
|
218
|
+
results.status = 'unhealthy';
|
|
219
|
+
} else if (this.warnings.length > 0) {
|
|
220
|
+
results.status = 'degraded';
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return results;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
module.exports = HealthCheck;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* EZ Lib Index — Central export for all EZ libraries
|
|
5
|
+
*
|
|
6
|
+
* Provides single import point for all utility modules.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const lib = require('./index.cjs');
|
|
10
|
+
* const logger = new lib.Logger();
|
|
11
|
+
* const git = new lib.GitUtils(process.cwd());
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
|
|
17
|
+
// Core utilities
|
|
18
|
+
const Logger = require('./logger.cjs');
|
|
19
|
+
const LoggerInstance = new Logger();
|
|
20
|
+
|
|
21
|
+
// File system
|
|
22
|
+
const fsUtils = require('./fs-utils.cjs');
|
|
23
|
+
|
|
24
|
+
// Security
|
|
25
|
+
const safeExec = require('./safe-exec.cjs');
|
|
26
|
+
const safePath = require('./safe-path.cjs');
|
|
27
|
+
const auth = require('./auth.cjs');
|
|
28
|
+
const auditExec = require('./audit-exec.cjs');
|
|
29
|
+
|
|
30
|
+
// Git
|
|
31
|
+
const GitUtils = require('./git-utils.cjs');
|
|
32
|
+
const GitWorkflowEngine = require('./git-workflow-engine.cjs');
|
|
33
|
+
const GitErrors = require('./git-errors.cjs');
|
|
34
|
+
|
|
35
|
+
// Reliability
|
|
36
|
+
const retry = require('./retry.cjs');
|
|
37
|
+
const CircuitBreaker = require('./circuit-breaker.cjs');
|
|
38
|
+
|
|
39
|
+
// Concurrency
|
|
40
|
+
const fileLock = require('./file-lock.cjs');
|
|
41
|
+
const tempFile = require('./temp-file.cjs');
|
|
42
|
+
|
|
43
|
+
// Health & Testing
|
|
44
|
+
const healthCheck = require('./health-check.cjs');
|
|
45
|
+
const timeoutExec = require('./timeout-exec.cjs');
|
|
46
|
+
|
|
47
|
+
// Multi-model
|
|
48
|
+
const modelProvider = require('./model-provider.cjs');
|
|
49
|
+
|
|
50
|
+
// Adapters
|
|
51
|
+
const assistantAdapter = require('./assistant-adapter.cjs');
|
|
52
|
+
|
|
53
|
+
// Package Manager
|
|
54
|
+
const PackageManagerService = require('./package-manager-service.cjs');
|
|
55
|
+
const PackageManagerDetector = require('./package-manager-detector.cjs');
|
|
56
|
+
const PackageManagerExecutor = require('./package-manager-executor.cjs');
|
|
57
|
+
const LockfileValidator = require('./lockfile-validator.cjs');
|
|
58
|
+
|
|
59
|
+
// BDD & Requirements (Phase 30)
|
|
60
|
+
const bddValidator = require('./bdd-validator.cjs');
|
|
61
|
+
|
|
62
|
+
// Discussion Synthesis (Phase 31)
|
|
63
|
+
const discussionSynthesizer = require('./discussion-synthesizer.cjs');
|
|
64
|
+
|
|
65
|
+
// Tier Management & Release Validation (Phase 32-33)
|
|
66
|
+
const TierManager = require('./tier-manager.cjs');
|
|
67
|
+
const ReleaseValidator = require('./release-validator.cjs');
|
|
68
|
+
|
|
69
|
+
// Context Optimization (Phase 43)
|
|
70
|
+
const ContextRelevanceScorer = require('./context-relevance-scorer.cjs');
|
|
71
|
+
const ContextCompressor = require('./context-compressor.cjs');
|
|
72
|
+
const ContextDeduplicator = require('./context-deduplicator.cjs');
|
|
73
|
+
const ContextMetadataTracker = require('./context-metadata-tracker.cjs');
|
|
74
|
+
const ContextManager = require('./context-manager.cjs');
|
|
75
|
+
|
|
76
|
+
// Analytics
|
|
77
|
+
const AnalyticsCollector = require('./analytics/analytics-collector.cjs');
|
|
78
|
+
const AnalyticsReporter = require('./analytics/analytics-reporter.cjs');
|
|
79
|
+
const CohortAnalyzer = require('./analytics/cohort-analyzer.cjs');
|
|
80
|
+
const FunnelAnalyzer = require('./analytics/funnel-analyzer.cjs');
|
|
81
|
+
const NpsTracker = require('./analytics/nps-tracker.cjs');
|
|
82
|
+
|
|
83
|
+
// Deploy
|
|
84
|
+
const DeployAuditLog = require('./deploy/deploy-audit-log.cjs');
|
|
85
|
+
const DeployDetector = require('./deploy/deploy-detector.cjs');
|
|
86
|
+
const DeployEnvManager = require('./deploy/deploy-env-manager.cjs');
|
|
87
|
+
const DeployHealthCheck = require('./deploy/deploy-health-check.cjs');
|
|
88
|
+
const DeployPreFlight = require('./deploy/deploy-pre-flight.cjs');
|
|
89
|
+
const DeployRollback = require('./deploy/deploy-rollback.cjs');
|
|
90
|
+
const DeployRunner = require('./deploy/deploy-runner.cjs');
|
|
91
|
+
const DeployStatus = require('./deploy/deploy-status.cjs');
|
|
92
|
+
|
|
93
|
+
// FinOps
|
|
94
|
+
const BudgetEnforcer = require('./finops/budget-enforcer.cjs');
|
|
95
|
+
const CostReporter = require('./finops/cost-reporter.cjs');
|
|
96
|
+
const FinopsAnalyzer = require('./finops/finops-analyzer.cjs');
|
|
97
|
+
const SpotManager = require('./finops/spot-manager.cjs');
|
|
98
|
+
|
|
99
|
+
// Gates
|
|
100
|
+
const Gate01Requirement = require('./gates/gate-01-requirement.cjs');
|
|
101
|
+
const Gate02Architecture = require('./gates/gate-02-architecture.cjs');
|
|
102
|
+
const Gate03Code = require('./gates/gate-03-code.cjs');
|
|
103
|
+
const Gate04Security = require('./gates/gate-04-security.cjs');
|
|
104
|
+
|
|
105
|
+
// Perf
|
|
106
|
+
const ApiMonitor = require('./perf/api-monitor.cjs');
|
|
107
|
+
const DbOptimizer = require('./perf/db-optimizer.cjs');
|
|
108
|
+
const FrontendPerformance = require('./perf/frontend-performance.cjs');
|
|
109
|
+
const PerfAnalyzer = require('./perf/perf-analyzer.cjs');
|
|
110
|
+
const PerfBaseline = require('./perf/perf-baseline.cjs');
|
|
111
|
+
const PerfReporter = require('./perf/perf-reporter.cjs');
|
|
112
|
+
const RegressionDetector = require('./perf/regression-detector.cjs');
|
|
113
|
+
|
|
114
|
+
// Standalone analyzers
|
|
115
|
+
const ArchetypeDetector = require('./archetype-detector.cjs');
|
|
116
|
+
const BackupService = require('./backup-service.cjs');
|
|
117
|
+
const BusinessFlowMapper = require('./business-flow-mapper.cjs');
|
|
118
|
+
const CodeComplexityAnalyzer = require('./code-complexity-analyzer.cjs');
|
|
119
|
+
const CodebaseAnalyzer = require('./codebase-analyzer.cjs');
|
|
120
|
+
const ConstraintExtractor = require('./constraint-extractor.cjs');
|
|
121
|
+
const DependencyGraph = require('./dependency-graph.cjs');
|
|
122
|
+
const FrameworkDetector = require('./framework-detector.cjs');
|
|
123
|
+
const LogRotation = require('./log-rotation.cjs');
|
|
124
|
+
const RecoveryManager = require('./recovery-manager.cjs');
|
|
125
|
+
const SkillTriggers = require('./skill-triggers.cjs');
|
|
126
|
+
const SkillValidator = require('./skill-validator.cjs');
|
|
127
|
+
const SkillVersioning = require('./skill-versioning.cjs');
|
|
128
|
+
const StackDetector = require('./stack-detector.cjs');
|
|
129
|
+
const TechDebtAnalyzer = require('./tech-debt-analyzer.cjs');
|
|
130
|
+
const TradeoffAnalyzer = require('./tradeoff-analyzer.cjs');
|
|
131
|
+
const QualityGate = require('./quality-gate.cjs');
|
|
132
|
+
|
|
133
|
+
module.exports = {
|
|
134
|
+
// Core
|
|
135
|
+
Logger,
|
|
136
|
+
logger: LoggerInstance,
|
|
137
|
+
|
|
138
|
+
// File system
|
|
139
|
+
...fsUtils,
|
|
140
|
+
|
|
141
|
+
// Security
|
|
142
|
+
...safeExec,
|
|
143
|
+
...safePath,
|
|
144
|
+
...auth,
|
|
145
|
+
...auditExec,
|
|
146
|
+
|
|
147
|
+
// Git
|
|
148
|
+
GitUtils,
|
|
149
|
+
GitWorkflowEngine,
|
|
150
|
+
GitErrors,
|
|
151
|
+
|
|
152
|
+
// Reliability
|
|
153
|
+
...retry,
|
|
154
|
+
CircuitBreaker,
|
|
155
|
+
|
|
156
|
+
// Concurrency
|
|
157
|
+
...fileLock,
|
|
158
|
+
...tempFile,
|
|
159
|
+
|
|
160
|
+
// Health & Testing
|
|
161
|
+
...healthCheck,
|
|
162
|
+
...timeoutExec,
|
|
163
|
+
|
|
164
|
+
// Multi-model
|
|
165
|
+
...modelProvider,
|
|
166
|
+
|
|
167
|
+
// Adapters
|
|
168
|
+
...assistantAdapter,
|
|
169
|
+
|
|
170
|
+
// Package Manager
|
|
171
|
+
PackageManagerService,
|
|
172
|
+
PackageManagerDetector,
|
|
173
|
+
PackageManagerExecutor,
|
|
174
|
+
LockfileValidator,
|
|
175
|
+
|
|
176
|
+
// BDD & Requirements (Phase 30)
|
|
177
|
+
...bddValidator,
|
|
178
|
+
|
|
179
|
+
// Discussion Synthesis (Phase 31)
|
|
180
|
+
...discussionSynthesizer,
|
|
181
|
+
|
|
182
|
+
// Tier Management & Release (Phase 32-33)
|
|
183
|
+
TierManager,
|
|
184
|
+
ReleaseValidator,
|
|
185
|
+
|
|
186
|
+
// Context Optimization (Phase 43)
|
|
187
|
+
ContextRelevanceScorer,
|
|
188
|
+
ContextCompressor,
|
|
189
|
+
ContextDeduplicator,
|
|
190
|
+
ContextMetadataTracker,
|
|
191
|
+
ContextManager,
|
|
192
|
+
|
|
193
|
+
// Analytics
|
|
194
|
+
AnalyticsCollector,
|
|
195
|
+
AnalyticsReporter,
|
|
196
|
+
CohortAnalyzer,
|
|
197
|
+
FunnelAnalyzer,
|
|
198
|
+
NpsTracker,
|
|
199
|
+
|
|
200
|
+
// Deploy
|
|
201
|
+
DeployAuditLog,
|
|
202
|
+
DeployDetector,
|
|
203
|
+
DeployEnvManager,
|
|
204
|
+
DeployHealthCheck,
|
|
205
|
+
DeployPreFlight,
|
|
206
|
+
DeployRollback,
|
|
207
|
+
DeployRunner,
|
|
208
|
+
DeployStatus,
|
|
209
|
+
|
|
210
|
+
// FinOps
|
|
211
|
+
BudgetEnforcer,
|
|
212
|
+
CostReporter,
|
|
213
|
+
FinopsAnalyzer,
|
|
214
|
+
SpotManager,
|
|
215
|
+
|
|
216
|
+
// Gates
|
|
217
|
+
Gate01Requirement,
|
|
218
|
+
Gate02Architecture,
|
|
219
|
+
Gate03Code,
|
|
220
|
+
Gate04Security,
|
|
221
|
+
|
|
222
|
+
// Perf
|
|
223
|
+
ApiMonitor,
|
|
224
|
+
DbOptimizer,
|
|
225
|
+
FrontendPerformance,
|
|
226
|
+
PerfAnalyzer,
|
|
227
|
+
PerfBaseline,
|
|
228
|
+
PerfReporter,
|
|
229
|
+
RegressionDetector,
|
|
230
|
+
|
|
231
|
+
// Standalone analyzers
|
|
232
|
+
ArchetypeDetector,
|
|
233
|
+
BackupService,
|
|
234
|
+
BusinessFlowMapper,
|
|
235
|
+
CodeComplexityAnalyzer,
|
|
236
|
+
CodebaseAnalyzer,
|
|
237
|
+
ConstraintExtractor,
|
|
238
|
+
DependencyGraph,
|
|
239
|
+
FrameworkDetector,
|
|
240
|
+
LogRotation,
|
|
241
|
+
RecoveryManager,
|
|
242
|
+
SkillTriggers,
|
|
243
|
+
SkillValidator,
|
|
244
|
+
SkillVersioning,
|
|
245
|
+
StackDetector,
|
|
246
|
+
TechDebtAnalyzer,
|
|
247
|
+
TradeoffAnalyzer,
|
|
248
|
+
QualityGate,
|
|
249
|
+
|
|
250
|
+
// Version info
|
|
251
|
+
version: '3.0.0',
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Get health status of all modules
|
|
255
|
+
*/
|
|
256
|
+
getHealthStatus() {
|
|
257
|
+
return {
|
|
258
|
+
version: this.version,
|
|
259
|
+
nodeVersion: process.version,
|
|
260
|
+
platform: process.platform,
|
|
261
|
+
modules: {
|
|
262
|
+
logger: 'ok',
|
|
263
|
+
fsUtils: 'ok',
|
|
264
|
+
safeExec: 'ok',
|
|
265
|
+
safePath: 'ok',
|
|
266
|
+
auth: auth.isKeychainAvailable() ? 'keychain' : 'fallback',
|
|
267
|
+
gitUtils: 'ok',
|
|
268
|
+
gitWorkflowEngine: 'ok',
|
|
269
|
+
gitErrors: 'ok',
|
|
270
|
+
retry: 'ok',
|
|
271
|
+
circuitBreaker: 'ok',
|
|
272
|
+
fileLock: 'ok',
|
|
273
|
+
tempFile: 'ok',
|
|
274
|
+
modelProvider: 'ok',
|
|
275
|
+
assistantAdapter: 'ok'
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
};
|