@lumenflow/cli 3.1.2 → 3.1.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/README.md +36 -35
- package/dist/agent-issues-query.js +13 -8
- package/dist/agent-log-issue.js +15 -4
- package/dist/agent-session-end.js +15 -4
- package/dist/agent-session.js +18 -6
- package/dist/backlog-prune.js +1 -1
- package/dist/commands/integrate.js +32 -18
- package/dist/config-get.js +27 -15
- package/dist/config-set.js +104 -37
- package/dist/delegation-list.js +1 -1
- package/dist/doctor.js +19 -13
- package/dist/file-delete.js +1 -1
- package/dist/file-edit.js +1 -1
- package/dist/file-read.js +1 -1
- package/dist/file-write.js +1 -1
- package/dist/flow-bottlenecks.js +1 -1
- package/dist/flow-report.js +10 -9
- package/dist/gates.js +3 -2
- package/dist/git-branch.js +1 -1
- package/dist/git-diff.js +1 -1
- package/dist/git-log.js +1 -1
- package/dist/init.js +238 -42
- package/dist/initiative-add-wu.js +1 -1
- package/dist/initiative-bulk-assign-wus.js +1 -1
- package/dist/initiative-create.js +2 -2
- package/dist/initiative-edit.js +1 -1
- package/dist/initiative-list.js +1 -1
- package/dist/initiative-plan.js +1 -3
- package/dist/initiative-status.js +47 -6
- package/dist/lane-edit.js +19 -10
- package/dist/lane-health.js +13 -24
- package/dist/lane-lock.js +4 -5
- package/dist/lane-setup.js +5 -5
- package/dist/lane-status.js +4 -5
- package/dist/lane-suggest.js +9 -7
- package/dist/lane-validate.js +4 -5
- package/dist/lumenflow-upgrade.js +17 -11
- package/dist/mem-checkpoint.js +1 -1
- package/dist/mem-cleanup.js +6 -23
- package/dist/mem-context.js +1 -1
- package/dist/mem-create.js +1 -1
- package/dist/mem-delete.js +1 -1
- package/dist/mem-export.js +1 -1
- package/dist/mem-inbox.js +1 -1
- package/dist/mem-init.js +1 -1
- package/dist/mem-ready.js +1 -1
- package/dist/mem-recover.js +1 -1
- package/dist/mem-signal.js +1 -1
- package/dist/mem-start.js +1 -1
- package/dist/mem-summarize.js +8 -7
- package/dist/mem-triage.js +7 -5
- package/dist/metrics-cli.js +1 -1
- package/dist/metrics-snapshot.js +1 -1
- package/dist/onboard.js +295 -120
- package/dist/orchestrate-init-status.js +12 -7
- package/dist/orchestrate-initiative.js +23 -12
- package/dist/orchestrate-monitor.js +20 -8
- package/dist/pack-scaffold.js +1 -1
- package/dist/plan-create.js +1 -3
- package/dist/plan-edit.js +1 -3
- package/dist/plan-link.js +1 -3
- package/dist/plan-promote.js +1 -3
- package/dist/release.js +1 -3
- package/dist/signal-cleanup.js +4 -18
- package/dist/state-bootstrap.js +11 -8
- package/dist/state-cleanup.js +5 -19
- package/dist/state-doctor.js +213 -9
- package/dist/task-claim.js +1 -1
- package/dist/validate.js +1 -1
- package/dist/workspace-init.js +61 -61
- package/dist/wu-block.js +1 -1
- package/dist/wu-brief.js +1 -1
- package/dist/wu-claim.js +1 -1
- package/dist/wu-cleanup.js +1 -1
- package/dist/wu-create.js +3 -3
- package/dist/wu-delegate.js +1 -1
- package/dist/wu-deps.js +1 -1
- package/dist/wu-done.js +66 -34
- package/dist/wu-edit.js +1 -1
- package/dist/wu-infer-lane.js +1 -1
- package/dist/wu-preflight.js +1 -1
- package/dist/wu-prep.js +1 -1
- package/dist/wu-proto.js +1 -1
- package/dist/wu-prune.js +1 -1
- package/dist/wu-recover.js +1 -1
- package/dist/wu-release.js +1 -1
- package/dist/wu-repair.js +1 -1
- package/dist/wu-sandbox.js +40 -27
- package/dist/wu-status.js +1 -1
- package/dist/wu-unblock.js +1 -1
- package/dist/wu-unlock-lane.js +1 -1
- package/dist/wu-validate.js +1 -1
- package/package.json +12 -8
- package/packs/software-delivery/constants.ts +10 -0
- package/packs/software-delivery/extensions.ts +140 -0
- package/packs/software-delivery/gate-policies.ts +134 -0
- package/packs/software-delivery/index.ts +8 -0
- package/packs/software-delivery/manifest-schema.ts +236 -0
- package/packs/software-delivery/manifest.ts +417 -0
- package/packs/software-delivery/manifest.yaml +711 -0
- package/packs/software-delivery/pack-registration.ts +113 -0
- package/packs/software-delivery/tool-impl/agent-tools.ts +263 -0
- package/packs/software-delivery/tool-impl/delegation-tools.ts +66 -0
- package/packs/software-delivery/tool-impl/flow-metrics-tools.ts +219 -0
- package/packs/software-delivery/tool-impl/git-runner.ts +113 -0
- package/packs/software-delivery/tool-impl/git-tools.ts +316 -0
- package/packs/software-delivery/tool-impl/index.ts +15 -0
- package/packs/software-delivery/tool-impl/initiative-orchestration-tools.ts +720 -0
- package/packs/software-delivery/tool-impl/lane-lock.ts +246 -0
- package/packs/software-delivery/tool-impl/memory-tools.ts +415 -0
- package/packs/software-delivery/tool-impl/pending-runtime-tools.ts +21 -0
- package/packs/software-delivery/tool-impl/runtime-cli-adapter.ts +328 -0
- package/packs/software-delivery/tool-impl/runtime-native-tools.ts +687 -0
- package/packs/software-delivery/tool-impl/worker-loader.ts +52 -0
- package/packs/software-delivery/tool-impl/worktree-tools.ts +46 -0
- package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +759 -0
- package/packs/software-delivery/tools/delegation-tools.ts +23 -0
- package/packs/software-delivery/tools/git-tools.ts +55 -0
- package/packs/software-delivery/tools/index.ts +8 -0
- package/packs/software-delivery/tools/lane-lock-tool.ts +37 -0
- package/packs/software-delivery/tools/types.ts +71 -0
- package/packs/software-delivery/tools/worktree-tools.ts +49 -0
- package/templates/core/LUMENFLOW.md.template +3 -3
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
- package/templates/core/ai/onboarding/lumenflow-force-usage.md.template +1 -1
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +5 -5
- package/templates/core/ai/onboarding/starting-prompt.md.template +3 -3
- package/templates/core/ai/onboarding/vendor-support.md.template +1 -1
- package/templates/core/ai/onboarding/wu-create-checklist.md.template +1 -1
- package/dist/agent-issues-query.js.map +0 -1
- package/dist/agent-log-issue.js.map +0 -1
- package/dist/agent-session-end.js.map +0 -1
- package/dist/agent-session.js.map +0 -1
- package/dist/backlog-prune.js.map +0 -1
- package/dist/cli-entry-point.js +0 -149
- package/dist/cli-entry-point.js.map +0 -1
- package/dist/commands/integrate.js.map +0 -1
- package/dist/commands.js.map +0 -1
- package/dist/config-get.js.map +0 -1
- package/dist/config-set.js.map +0 -1
- package/dist/delegation-list.js.map +0 -1
- package/dist/deps-add.js +0 -259
- package/dist/deps-add.js.map +0 -1
- package/dist/deps-remove.js +0 -105
- package/dist/deps-remove.js.map +0 -1
- package/dist/docs-sync.js.map +0 -1
- package/dist/doctor.js.map +0 -1
- package/dist/file-delete.js.map +0 -1
- package/dist/file-edit.js.map +0 -1
- package/dist/file-read.js.map +0 -1
- package/dist/file-write.js.map +0 -1
- package/dist/flow-bottlenecks.js.map +0 -1
- package/dist/flow-report.js.map +0 -1
- package/dist/formatters.js +0 -151
- package/dist/formatters.js.map +0 -1
- package/dist/gate-defaults.js +0 -131
- package/dist/gate-defaults.js.map +0 -1
- package/dist/gate-registry.js +0 -73
- package/dist/gate-registry.js.map +0 -1
- package/dist/gates-graceful-degradation.js +0 -153
- package/dist/gates-graceful-degradation.js.map +0 -1
- package/dist/gates-plan-resolvers.js +0 -152
- package/dist/gates-plan-resolvers.js.map +0 -1
- package/dist/gates-runners.js +0 -509
- package/dist/gates-runners.js.map +0 -1
- package/dist/gates-types.js +0 -4
- package/dist/gates-types.js.map +0 -1
- package/dist/gates-utils.js +0 -323
- package/dist/gates-utils.js.map +0 -1
- package/dist/gates.js.map +0 -1
- package/dist/git-branch.js.map +0 -1
- package/dist/git-diff.js.map +0 -1
- package/dist/git-log.js.map +0 -1
- package/dist/git-status.js.map +0 -1
- package/dist/guard-locked.js +0 -172
- package/dist/guard-locked.js.map +0 -1
- package/dist/guard-main-branch.js +0 -217
- package/dist/guard-main-branch.js.map +0 -1
- package/dist/guard-worktree-commit.js +0 -163
- package/dist/guard-worktree-commit.js.map +0 -1
- package/dist/hooks/auto-checkpoint-utils.js +0 -54
- package/dist/hooks/auto-checkpoint-utils.js.map +0 -1
- package/dist/hooks/enforcement-checks.js +0 -399
- package/dist/hooks/enforcement-checks.js.map +0 -1
- package/dist/hooks/enforcement-generator.js +0 -139
- package/dist/hooks/enforcement-generator.js.map +0 -1
- package/dist/hooks/enforcement-sync.js +0 -385
- package/dist/hooks/enforcement-sync.js.map +0 -1
- package/dist/hooks/generators/auto-checkpoint.js +0 -125
- package/dist/hooks/generators/auto-checkpoint.js.map +0 -1
- package/dist/hooks/generators/enforce-worktree.js +0 -190
- package/dist/hooks/generators/enforce-worktree.js.map +0 -1
- package/dist/hooks/generators/index.js +0 -18
- package/dist/hooks/generators/index.js.map +0 -1
- package/dist/hooks/generators/pre-compact-checkpoint.js +0 -136
- package/dist/hooks/generators/pre-compact-checkpoint.js.map +0 -1
- package/dist/hooks/generators/require-wu.js +0 -117
- package/dist/hooks/generators/require-wu.js.map +0 -1
- package/dist/hooks/generators/session-start-recovery.js +0 -103
- package/dist/hooks/generators/session-start-recovery.js.map +0 -1
- package/dist/hooks/generators/signal-utils.js +0 -54
- package/dist/hooks/generators/signal-utils.js.map +0 -1
- package/dist/hooks/generators/warn-incomplete.js +0 -67
- package/dist/hooks/generators/warn-incomplete.js.map +0 -1
- package/dist/hooks/index.js +0 -10
- package/dist/hooks/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init-detection.js +0 -232
- package/dist/init-detection.js.map +0 -1
- package/dist/init-lane-validation.js +0 -143
- package/dist/init-lane-validation.js.map +0 -1
- package/dist/init-scaffolding.js +0 -158
- package/dist/init-scaffolding.js.map +0 -1
- package/dist/init-templates.js +0 -1982
- package/dist/init-templates.js.map +0 -1
- package/dist/init.js.map +0 -1
- package/dist/initiative-add-wu.js.map +0 -1
- package/dist/initiative-bulk-assign-wus.js.map +0 -1
- package/dist/initiative-create.js.map +0 -1
- package/dist/initiative-edit.js.map +0 -1
- package/dist/initiative-list.js.map +0 -1
- package/dist/initiative-plan.js.map +0 -1
- package/dist/initiative-remove-wu.js.map +0 -1
- package/dist/initiative-status.js.map +0 -1
- package/dist/lane-edit.js.map +0 -1
- package/dist/lane-health.js.map +0 -1
- package/dist/lane-lifecycle-process.js +0 -366
- package/dist/lane-lifecycle-process.js.map +0 -1
- package/dist/lane-lock.js.map +0 -1
- package/dist/lane-setup.js.map +0 -1
- package/dist/lane-status.js.map +0 -1
- package/dist/lane-suggest.js.map +0 -1
- package/dist/lane-validate.js.map +0 -1
- package/dist/lifecycle-regression-harness.js +0 -181
- package/dist/lifecycle-regression-harness.js.map +0 -1
- package/dist/lumenflow-upgrade.js.map +0 -1
- package/dist/mem-checkpoint.js.map +0 -1
- package/dist/mem-cleanup.js.map +0 -1
- package/dist/mem-context.js.map +0 -1
- package/dist/mem-create.js.map +0 -1
- package/dist/mem-delete.js.map +0 -1
- package/dist/mem-export.js.map +0 -1
- package/dist/mem-inbox.js.map +0 -1
- package/dist/mem-index.js +0 -214
- package/dist/mem-index.js.map +0 -1
- package/dist/mem-init.js.map +0 -1
- package/dist/mem-profile.js +0 -210
- package/dist/mem-profile.js.map +0 -1
- package/dist/mem-promote.js +0 -257
- package/dist/mem-promote.js.map +0 -1
- package/dist/mem-ready.js.map +0 -1
- package/dist/mem-recover.js.map +0 -1
- package/dist/mem-signal.js.map +0 -1
- package/dist/mem-start.js.map +0 -1
- package/dist/mem-summarize.js.map +0 -1
- package/dist/mem-triage.js.map +0 -1
- package/dist/merge-block.js +0 -225
- package/dist/merge-block.js.map +0 -1
- package/dist/metrics-cli.js.map +0 -1
- package/dist/metrics-snapshot.js.map +0 -1
- package/dist/onboard.js.map +0 -1
- package/dist/onboarding-smoke-test.js +0 -418
- package/dist/onboarding-smoke-test.js.map +0 -1
- package/dist/orchestrate-init-status.js.map +0 -1
- package/dist/orchestrate-initiative.js.map +0 -1
- package/dist/orchestrate-monitor.js.map +0 -1
- package/dist/pack-author.js.map +0 -1
- package/dist/pack-hash.js.map +0 -1
- package/dist/pack-install.js.map +0 -1
- package/dist/pack-publish.js.map +0 -1
- package/dist/pack-scaffold.js.map +0 -1
- package/dist/pack-search.js.map +0 -1
- package/dist/pack-validate.js.map +0 -1
- package/dist/plan-create.js.map +0 -1
- package/dist/plan-edit.js.map +0 -1
- package/dist/plan-link.js.map +0 -1
- package/dist/plan-promote.js.map +0 -1
- package/dist/public-manifest.js +0 -920
- package/dist/public-manifest.js.map +0 -1
- package/dist/release.js.map +0 -1
- package/dist/rotate-progress.js +0 -253
- package/dist/rotate-progress.js.map +0 -1
- package/dist/session-coordinator.js +0 -303
- package/dist/session-coordinator.js.map +0 -1
- package/dist/shared-validators.js +0 -81
- package/dist/shared-validators.js.map +0 -1
- package/dist/signal-cleanup.js.map +0 -1
- package/dist/state-bootstrap.js.map +0 -1
- package/dist/state-cleanup.js.map +0 -1
- package/dist/state-doctor-fix.js +0 -226
- package/dist/state-doctor-fix.js.map +0 -1
- package/dist/state-doctor-stamps.js +0 -23
- package/dist/state-doctor-stamps.js.map +0 -1
- package/dist/state-doctor.js.map +0 -1
- package/dist/strict-progress.js +0 -255
- package/dist/strict-progress.js.map +0 -1
- package/dist/sync-templates.js.map +0 -1
- package/dist/task-claim.js.map +0 -1
- package/dist/trace-gen.js +0 -401
- package/dist/trace-gen.js.map +0 -1
- package/dist/validate-agent-skills.js +0 -223
- package/dist/validate-agent-skills.js.map +0 -1
- package/dist/validate-agent-sync.js +0 -151
- package/dist/validate-agent-sync.js.map +0 -1
- package/dist/validate-backlog-sync.js +0 -77
- package/dist/validate-backlog-sync.js.map +0 -1
- package/dist/validate-skills-spec.js +0 -211
- package/dist/validate-skills-spec.js.map +0 -1
- package/dist/validate.js.map +0 -1
- package/dist/validator-defaults.js +0 -107
- package/dist/validator-defaults.js.map +0 -1
- package/dist/validator-registry.js +0 -71
- package/dist/validator-registry.js.map +0 -1
- package/dist/workspace-init.js.map +0 -1
- package/dist/wu-block.js.map +0 -1
- package/dist/wu-brief.js.map +0 -1
- package/dist/wu-claim-branch.js +0 -123
- package/dist/wu-claim-branch.js.map +0 -1
- package/dist/wu-claim-cloud.js +0 -79
- package/dist/wu-claim-cloud.js.map +0 -1
- package/dist/wu-claim-mode.js +0 -82
- package/dist/wu-claim-mode.js.map +0 -1
- package/dist/wu-claim-output.js +0 -85
- package/dist/wu-claim-output.js.map +0 -1
- package/dist/wu-claim-repair-guidance.js +0 -12
- package/dist/wu-claim-repair-guidance.js.map +0 -1
- package/dist/wu-claim-resume-handler.js +0 -87
- package/dist/wu-claim-resume-handler.js.map +0 -1
- package/dist/wu-claim-state.js +0 -581
- package/dist/wu-claim-state.js.map +0 -1
- package/dist/wu-claim-validation.js +0 -457
- package/dist/wu-claim-validation.js.map +0 -1
- package/dist/wu-claim-worktree.js +0 -223
- package/dist/wu-claim-worktree.js.map +0 -1
- package/dist/wu-claim.js.map +0 -1
- package/dist/wu-cleanup-cloud.js +0 -78
- package/dist/wu-cleanup-cloud.js.map +0 -1
- package/dist/wu-cleanup.js.map +0 -1
- package/dist/wu-code-path-coverage.js +0 -83
- package/dist/wu-code-path-coverage.js.map +0 -1
- package/dist/wu-create-cloud.js +0 -30
- package/dist/wu-create-cloud.js.map +0 -1
- package/dist/wu-create-content.js +0 -264
- package/dist/wu-create-content.js.map +0 -1
- package/dist/wu-create-readiness.js +0 -59
- package/dist/wu-create-readiness.js.map +0 -1
- package/dist/wu-create-validation.js +0 -128
- package/dist/wu-create-validation.js.map +0 -1
- package/dist/wu-create.js.map +0 -1
- package/dist/wu-delegate.js.map +0 -1
- package/dist/wu-delete.js.map +0 -1
- package/dist/wu-deps.js.map +0 -1
- package/dist/wu-done-auto-cleanup.js +0 -203
- package/dist/wu-done-auto-cleanup.js.map +0 -1
- package/dist/wu-done-check.js +0 -38
- package/dist/wu-done-check.js.map +0 -1
- package/dist/wu-done-cloud.js +0 -48
- package/dist/wu-done-cloud.js.map +0 -1
- package/dist/wu-done-decay.js +0 -86
- package/dist/wu-done-decay.js.map +0 -1
- package/dist/wu-done.js.map +0 -1
- package/dist/wu-edit-operations.js +0 -399
- package/dist/wu-edit-operations.js.map +0 -1
- package/dist/wu-edit-validators.js +0 -282
- package/dist/wu-edit-validators.js.map +0 -1
- package/dist/wu-edit.js.map +0 -1
- package/dist/wu-infer-lane.js.map +0 -1
- package/dist/wu-preflight.js.map +0 -1
- package/dist/wu-prep.js.map +0 -1
- package/dist/wu-proto.js.map +0 -1
- package/dist/wu-prune.js.map +0 -1
- package/dist/wu-recover.js.map +0 -1
- package/dist/wu-release.js.map +0 -1
- package/dist/wu-repair.js.map +0 -1
- package/dist/wu-sandbox.js.map +0 -1
- package/dist/wu-spawn-completion.js +0 -33
- package/dist/wu-spawn-completion.js.map +0 -1
- package/dist/wu-spawn-prompt-builders.js +0 -1197
- package/dist/wu-spawn-prompt-builders.js.map +0 -1
- package/dist/wu-spawn-strategy-resolver.js +0 -322
- package/dist/wu-spawn-strategy-resolver.js.map +0 -1
- package/dist/wu-spawn.js +0 -59
- package/dist/wu-spawn.js.map +0 -1
- package/dist/wu-state-cloud.js +0 -41
- package/dist/wu-state-cloud.js.map +0 -1
- package/dist/wu-status.js.map +0 -1
- package/dist/wu-unblock.js.map +0 -1
- package/dist/wu-unlock-lane.js.map +0 -1
- package/dist/wu-validate.js.map +0 -1
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
3
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
-
/**
|
|
5
|
-
* @file validate-agent-sync.ts
|
|
6
|
-
* @description Validates agent sync state (WU-1111)
|
|
7
|
-
*
|
|
8
|
-
* Validates that agent configuration files exist and are properly structured.
|
|
9
|
-
* Checks .claude/agents/ for valid agent definitions.
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* validate-agent-sync # Validate agent configuration
|
|
13
|
-
*
|
|
14
|
-
* Exit codes:
|
|
15
|
-
* 0 - Agent configuration valid
|
|
16
|
-
* 1 - Validation errors found
|
|
17
|
-
*
|
|
18
|
-
* @see {@link .claude/agents/} - Agent definitions
|
|
19
|
-
*/
|
|
20
|
-
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
21
|
-
import path from 'node:path';
|
|
22
|
-
import { FILE_SYSTEM, EMOJI } from '@lumenflow/core/wu-constants';
|
|
23
|
-
import { runCLI } from './cli-entry-point.js';
|
|
24
|
-
const LOG_PREFIX = '[validate-agent-sync]';
|
|
25
|
-
/**
|
|
26
|
-
* Validate agent sync state
|
|
27
|
-
*
|
|
28
|
-
* @param options - Validation options
|
|
29
|
-
* @param options.cwd - Working directory (default: process.cwd())
|
|
30
|
-
* @returns Validation result
|
|
31
|
-
*/
|
|
32
|
-
export async function validateAgentSync(options = {}) {
|
|
33
|
-
const { cwd = process.cwd() } = options;
|
|
34
|
-
const errors = [];
|
|
35
|
-
const warnings = [];
|
|
36
|
-
const agents = [];
|
|
37
|
-
const agentDir = path.join(cwd, '.claude', 'agents');
|
|
38
|
-
// Check if agents directory exists
|
|
39
|
-
if (!existsSync(agentDir)) {
|
|
40
|
-
errors.push(`Agents directory not found: ${agentDir}`);
|
|
41
|
-
return { valid: false, errors, warnings, agents };
|
|
42
|
-
}
|
|
43
|
-
// Read agent definitions
|
|
44
|
-
const files = readdirSync(agentDir).filter((f) => f.endsWith('.json') || f.endsWith('.md'));
|
|
45
|
-
if (files.length === 0) {
|
|
46
|
-
warnings.push('No agent definitions found in .claude/agents/');
|
|
47
|
-
return { valid: true, errors, warnings, agents };
|
|
48
|
-
}
|
|
49
|
-
for (const file of files) {
|
|
50
|
-
const filePath = path.join(agentDir, file);
|
|
51
|
-
const agentName = path.basename(file, path.extname(file));
|
|
52
|
-
agents.push(agentName);
|
|
53
|
-
if (file.endsWith('.json')) {
|
|
54
|
-
// Validate JSON agent definition
|
|
55
|
-
try {
|
|
56
|
-
const content = readFileSync(filePath, { encoding: FILE_SYSTEM.UTF8 });
|
|
57
|
-
const agentDef = JSON.parse(content);
|
|
58
|
-
// Check required fields
|
|
59
|
-
if (!agentDef.name) {
|
|
60
|
-
warnings.push(`${agentName}: Missing "name" field`);
|
|
61
|
-
}
|
|
62
|
-
if (!agentDef.description) {
|
|
63
|
-
warnings.push(`${agentName}: Missing "description" field`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (e) {
|
|
67
|
-
errors.push(`${agentName}: Failed to parse JSON: ${e.message}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else if (file.endsWith('.md')) {
|
|
71
|
-
// Validate markdown agent definition
|
|
72
|
-
try {
|
|
73
|
-
const content = readFileSync(filePath, { encoding: FILE_SYSTEM.UTF8 });
|
|
74
|
-
// Check for title
|
|
75
|
-
if (!content.includes('# ')) {
|
|
76
|
-
warnings.push(`${agentName}: Missing title heading`);
|
|
77
|
-
}
|
|
78
|
-
// Check for minimum content
|
|
79
|
-
if (content.length < 50) {
|
|
80
|
-
warnings.push(`${agentName}: Agent definition is very short`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch (e) {
|
|
84
|
-
errors.push(`${agentName}: Failed to read file: ${e.message}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
valid: errors.length === 0,
|
|
90
|
-
errors,
|
|
91
|
-
warnings,
|
|
92
|
-
agents,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Main CLI entry point
|
|
97
|
-
*/
|
|
98
|
-
async function main() {
|
|
99
|
-
const args = process.argv.slice(2);
|
|
100
|
-
// Parse arguments
|
|
101
|
-
let cwd = process.cwd();
|
|
102
|
-
for (let i = 0; i < args.length; i++) {
|
|
103
|
-
const arg = args[i];
|
|
104
|
-
if (arg === '--cwd' || arg === '-C') {
|
|
105
|
-
cwd = args[++i];
|
|
106
|
-
}
|
|
107
|
-
else if (arg === '--help' || arg === '-h') {
|
|
108
|
-
console.log(`Usage: validate-agent-sync [options]
|
|
109
|
-
|
|
110
|
-
Validate agent configuration and sync state.
|
|
111
|
-
|
|
112
|
-
Options:
|
|
113
|
-
--cwd, -C DIR Working directory (default: current directory)
|
|
114
|
-
-h, --help Show this help message
|
|
115
|
-
|
|
116
|
-
Examples:
|
|
117
|
-
validate-agent-sync
|
|
118
|
-
validate-agent-sync --cwd /path/to/project
|
|
119
|
-
`);
|
|
120
|
-
process.exit(0);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
console.log(`${LOG_PREFIX} Validating agent sync...`);
|
|
124
|
-
const result = await validateAgentSync({ cwd });
|
|
125
|
-
if (result.errors.length > 0) {
|
|
126
|
-
console.log(`${EMOJI.FAILURE} Validation errors:`);
|
|
127
|
-
result.errors.forEach((e) => console.log(` ${e}`));
|
|
128
|
-
}
|
|
129
|
-
if (result.warnings.length > 0) {
|
|
130
|
-
console.log(`${EMOJI.WARNING} Warnings:`);
|
|
131
|
-
result.warnings.forEach((w) => console.log(` ${w}`));
|
|
132
|
-
}
|
|
133
|
-
if (result.agents.length > 0) {
|
|
134
|
-
console.log(`${LOG_PREFIX} Found ${result.agents.length} agent(s):`);
|
|
135
|
-
result.agents.forEach((a) => console.log(` - ${a}`));
|
|
136
|
-
}
|
|
137
|
-
if (result.valid) {
|
|
138
|
-
console.log(`${EMOJI.SUCCESS} Agent sync validation passed`);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
process.exit(1);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// WU-1181: Use import.meta.main instead of process.argv[1] comparison
|
|
145
|
-
// The old pattern fails with pnpm symlinks because process.argv[1] is the symlink
|
|
146
|
-
// path but import.meta.url resolves to the real path - they never match
|
|
147
|
-
// WU-1537: Use import.meta.main + runCLI for consistent EPIPE and error handling
|
|
148
|
-
if (import.meta.main) {
|
|
149
|
-
void runCLI(main);
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=validate-agent-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-agent-sync.js","sourceRoot":"","sources":["../src/validate-agent-sync.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AACzC;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAY3C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA4B,EAAE;IAE9B,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAErD,mCAAmC;IACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,yBAAyB;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,iCAAiC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAsB,EAAE,CAAC,CAAC;gBACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAErC,wBAAwB;gBACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,wBAAwB,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,+BAA+B,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,2BAA2B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,qCAAqC;YACrC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAsB,EAAE,CAAC,CAAC;gBAEzF,kBAAkB;gBAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,yBAAyB,CAAC,CAAC;gBACvD,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,kCAAkC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,0BAA0B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,kBAAkB;IAClB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACpC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWjB,CAAC,CAAC;YACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,UAAU,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,kFAAkF;AAClF,wEAAwE;AACxE,iFAAiF;AACjF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
3
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
-
/**
|
|
5
|
-
* @file validate-backlog-sync.ts
|
|
6
|
-
* @description Validates backlog.md is in sync with WU YAML files (WU-1111)
|
|
7
|
-
*
|
|
8
|
-
* Checks that all WU YAML files are referenced in backlog.md and vice versa.
|
|
9
|
-
* This is the TypeScript replacement for tools/validate-backlog-sync.js.
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* validate-backlog-sync # Validate sync
|
|
13
|
-
*
|
|
14
|
-
* Exit codes:
|
|
15
|
-
* 0 - Backlog is in sync
|
|
16
|
-
* 1 - Sync issues found
|
|
17
|
-
*
|
|
18
|
-
* @see {@link docs/04-operations/tasks/backlog.md} - Backlog file
|
|
19
|
-
*/
|
|
20
|
-
import { validateBacklogSync, } from '@lumenflow/core/validators/backlog-sync';
|
|
21
|
-
import { EMOJI } from '@lumenflow/core/wu-constants';
|
|
22
|
-
import { runCLI } from './cli-entry-point.js';
|
|
23
|
-
const LOG_PREFIX = '[validate-backlog-sync]';
|
|
24
|
-
export { validateBacklogSync };
|
|
25
|
-
/**
|
|
26
|
-
* Main CLI entry point
|
|
27
|
-
*/
|
|
28
|
-
async function main() {
|
|
29
|
-
const args = process.argv.slice(2);
|
|
30
|
-
// Parse arguments
|
|
31
|
-
let cwd = process.cwd();
|
|
32
|
-
for (let i = 0; i < args.length; i++) {
|
|
33
|
-
const arg = args[i];
|
|
34
|
-
if (arg === '--cwd' || arg === '-C') {
|
|
35
|
-
cwd = args[++i];
|
|
36
|
-
}
|
|
37
|
-
else if (arg === '--help' || arg === '-h') {
|
|
38
|
-
console.log(`Usage: validate-backlog-sync [options]
|
|
39
|
-
|
|
40
|
-
Validate that backlog.md is in sync with WU YAML files.
|
|
41
|
-
|
|
42
|
-
Options:
|
|
43
|
-
--cwd, -C DIR Working directory (default: current directory)
|
|
44
|
-
-h, --help Show this help message
|
|
45
|
-
|
|
46
|
-
Examples:
|
|
47
|
-
validate-backlog-sync
|
|
48
|
-
`);
|
|
49
|
-
process.exit(0);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
console.log(`${LOG_PREFIX} Validating backlog sync...`);
|
|
53
|
-
const result = await validateBacklogSync({ cwd });
|
|
54
|
-
if (result.errors.length > 0) {
|
|
55
|
-
console.log(`${EMOJI.FAILURE} Sync errors:`);
|
|
56
|
-
result.errors.forEach((e) => console.log(` ${e}`));
|
|
57
|
-
}
|
|
58
|
-
if (result.warnings.length > 0) {
|
|
59
|
-
console.log(`${EMOJI.WARNING} Warnings:`);
|
|
60
|
-
result.warnings.forEach((w) => console.log(` ${w}`));
|
|
61
|
-
}
|
|
62
|
-
console.log(`${LOG_PREFIX} WU files: ${result.wuCount}, Backlog references: ${result.backlogCount}`);
|
|
63
|
-
if (result.valid) {
|
|
64
|
-
console.log(`${EMOJI.SUCCESS} Backlog is in sync`);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// WU-1181: Use import.meta.main instead of process.argv[1] comparison
|
|
71
|
-
// The old pattern fails with pnpm symlinks because process.argv[1] is the symlink
|
|
72
|
-
// path but import.meta.url resolves to the real path - they never match
|
|
73
|
-
// WU-1537: Use import.meta.main + runCLI for consistent EPIPE and error handling
|
|
74
|
-
if (import.meta.main) {
|
|
75
|
-
void runCLI(main);
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=validate-backlog-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-backlog-sync.js","sourceRoot":"","sources":["../src/validate-backlog-sync.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AACzC;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,mBAAmB,GAEpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAG7C,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,kBAAkB;IAClB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACpC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;CAUjB,CAAC,CAAC;YACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,6BAA6B,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAElD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,CACT,GAAG,UAAU,cAAc,MAAM,CAAC,OAAO,yBAAyB,MAAM,CAAC,YAAY,EAAE,CACxF,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,kFAAkF;AAClF,wEAAwE;AACxE,iFAAiF;AACjF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
3
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
-
/**
|
|
5
|
-
* @file validate-skills-spec.ts
|
|
6
|
-
* @description Validates skills spec format (WU-1111)
|
|
7
|
-
*
|
|
8
|
-
* Validates that skill specification files follow the required format
|
|
9
|
-
* with proper sections and structure.
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* validate-skills-spec SKILL.md # Validate specific file
|
|
13
|
-
* validate-skills-spec --dir ./skills # Validate all in directory
|
|
14
|
-
*
|
|
15
|
-
* Exit codes:
|
|
16
|
-
* 0 - Validation passed
|
|
17
|
-
* 1 - Validation errors found
|
|
18
|
-
*
|
|
19
|
-
* @see {@link .claude/skills/} - Skill definitions
|
|
20
|
-
*/
|
|
21
|
-
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
22
|
-
import path from 'node:path';
|
|
23
|
-
import { FILE_SYSTEM, EMOJI } from '@lumenflow/core/wu-constants';
|
|
24
|
-
import { runCLI } from './cli-entry-point.js';
|
|
25
|
-
const LOG_PREFIX = '[validate-skills-spec]';
|
|
26
|
-
/**
|
|
27
|
-
* Required sections for a valid skill spec
|
|
28
|
-
*/
|
|
29
|
-
const REQUIRED_SECTIONS = ['When to Use'];
|
|
30
|
-
/**
|
|
31
|
-
* Recommended sections (produce warnings if missing)
|
|
32
|
-
*/
|
|
33
|
-
const RECOMMENDED_SECTIONS = ['Examples'];
|
|
34
|
-
/**
|
|
35
|
-
* Validate a skill specification file
|
|
36
|
-
*
|
|
37
|
-
* @param skillPath - Path to skill spec file
|
|
38
|
-
* @returns Validation result
|
|
39
|
-
*/
|
|
40
|
-
export function validateSkillsSpec(skillPath) {
|
|
41
|
-
const errors = [];
|
|
42
|
-
const warnings = [];
|
|
43
|
-
if (!existsSync(skillPath)) {
|
|
44
|
-
errors.push(`Skill file not found: ${skillPath}`);
|
|
45
|
-
return { valid: false, errors, warnings };
|
|
46
|
-
}
|
|
47
|
-
const content = readFileSync(skillPath, { encoding: FILE_SYSTEM.UTF8 });
|
|
48
|
-
const lines = content.split('\n');
|
|
49
|
-
// Check for title heading (# Title)
|
|
50
|
-
const hasTitle = lines.some((line) => /^#\s+\S/.test(line));
|
|
51
|
-
if (!hasTitle) {
|
|
52
|
-
errors.push('Missing title heading (# Skill Name)');
|
|
53
|
-
}
|
|
54
|
-
// Check for required sections
|
|
55
|
-
for (const section of REQUIRED_SECTIONS) {
|
|
56
|
-
// eslint-disable-next-line security/detect-non-literal-regexp -- section name from internal constant array, not user input
|
|
57
|
-
const sectionPattern = new RegExp(`^##\\s+${section}`, 'im');
|
|
58
|
-
if (!sectionPattern.test(content)) {
|
|
59
|
-
errors.push(`Missing required section: "## ${section}"`);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// Check for recommended sections
|
|
63
|
-
for (const section of RECOMMENDED_SECTIONS) {
|
|
64
|
-
// eslint-disable-next-line security/detect-non-literal-regexp -- section name from internal constant array, not user input
|
|
65
|
-
const sectionPattern = new RegExp(`^##\\s+${section}`, 'im');
|
|
66
|
-
if (!sectionPattern.test(content)) {
|
|
67
|
-
warnings.push(`Missing recommended section: "## ${section}"`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Check "When to Use" section has content
|
|
71
|
-
const whenToUseMatch = content.match(/##\s+When to Use\s*\n([\s\S]*?)(?=\n##|$)/i);
|
|
72
|
-
if (whenToUseMatch) {
|
|
73
|
-
const sectionContent = whenToUseMatch[1].trim();
|
|
74
|
-
if (sectionContent.length < 20) {
|
|
75
|
-
warnings.push('"When to Use" section has minimal content');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Check for minimum overall content
|
|
79
|
-
if (content.length < 100) {
|
|
80
|
-
warnings.push('Skill spec is very short (< 100 characters)');
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
valid: errors.length === 0,
|
|
84
|
-
errors,
|
|
85
|
-
warnings,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Validate all skill specs in a directory
|
|
90
|
-
*
|
|
91
|
-
* @param dir - Directory to scan
|
|
92
|
-
* @returns Map of file path to validation result
|
|
93
|
-
*/
|
|
94
|
-
export function validateSkillsSpecDir(dir) {
|
|
95
|
-
const results = new Map();
|
|
96
|
-
if (!existsSync(dir)) {
|
|
97
|
-
results.set(dir, {
|
|
98
|
-
valid: false,
|
|
99
|
-
errors: [`Directory not found: ${dir}`],
|
|
100
|
-
warnings: [],
|
|
101
|
-
});
|
|
102
|
-
return results;
|
|
103
|
-
}
|
|
104
|
-
const entries = readdirSync(dir);
|
|
105
|
-
for (const entry of entries) {
|
|
106
|
-
const entryPath = path.join(dir, entry);
|
|
107
|
-
const stat = statSync(entryPath);
|
|
108
|
-
if (stat.isDirectory()) {
|
|
109
|
-
// Check for SKILL.md in subdirectory
|
|
110
|
-
const skillFile = path.join(entryPath, 'SKILL.md');
|
|
111
|
-
if (existsSync(skillFile)) {
|
|
112
|
-
results.set(entry, validateSkillsSpec(skillFile));
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else if (entry.endsWith('.md')) {
|
|
116
|
-
results.set(entry, validateSkillsSpec(entryPath));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return results;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Main CLI entry point
|
|
123
|
-
*/
|
|
124
|
-
async function main() {
|
|
125
|
-
const args = process.argv.slice(2);
|
|
126
|
-
// Parse arguments
|
|
127
|
-
let skillPath;
|
|
128
|
-
let dir;
|
|
129
|
-
for (let i = 0; i < args.length; i++) {
|
|
130
|
-
const arg = args[i];
|
|
131
|
-
if (arg === '--dir' || arg === '-d') {
|
|
132
|
-
dir = args[++i];
|
|
133
|
-
}
|
|
134
|
-
else if (arg === '--help' || arg === '-h') {
|
|
135
|
-
console.log(`Usage: validate-skills-spec [file.md] [options]
|
|
136
|
-
|
|
137
|
-
Validate skill specification format.
|
|
138
|
-
|
|
139
|
-
Options:
|
|
140
|
-
--dir, -d DIR Validate all specs in directory
|
|
141
|
-
-h, --help Show this help message
|
|
142
|
-
|
|
143
|
-
Examples:
|
|
144
|
-
validate-skills-spec SKILL.md
|
|
145
|
-
validate-skills-spec --dir .claude/skills
|
|
146
|
-
`);
|
|
147
|
-
process.exit(0);
|
|
148
|
-
}
|
|
149
|
-
else if (!skillPath) {
|
|
150
|
-
skillPath = arg;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (!skillPath && !dir) {
|
|
154
|
-
console.error(`${LOG_PREFIX} Error: Provide a skill file or --dir option`);
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
if (skillPath) {
|
|
158
|
-
// Validate single file
|
|
159
|
-
console.log(`${LOG_PREFIX} Validating ${skillPath}...`);
|
|
160
|
-
const result = validateSkillsSpec(skillPath);
|
|
161
|
-
if (result.errors.length > 0) {
|
|
162
|
-
console.log(`${EMOJI.FAILURE} Validation failed:`);
|
|
163
|
-
result.errors.forEach((e) => console.log(` ${e}`));
|
|
164
|
-
}
|
|
165
|
-
if (result.warnings.length > 0) {
|
|
166
|
-
console.log(`${EMOJI.WARNING} Warnings:`);
|
|
167
|
-
result.warnings.forEach((w) => console.log(` ${w}`));
|
|
168
|
-
}
|
|
169
|
-
if (result.valid) {
|
|
170
|
-
console.log(`${EMOJI.SUCCESS} Skill spec is valid`);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
process.exit(1);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else if (dir) {
|
|
177
|
-
// Validate directory
|
|
178
|
-
console.log(`${LOG_PREFIX} Validating skills in ${dir}...`);
|
|
179
|
-
const results = validateSkillsSpecDir(dir);
|
|
180
|
-
let totalValid = 0;
|
|
181
|
-
let totalInvalid = 0;
|
|
182
|
-
for (const [name, result] of results) {
|
|
183
|
-
if (result.errors.length > 0) {
|
|
184
|
-
console.log(`${EMOJI.FAILURE} ${name}:`);
|
|
185
|
-
result.errors.forEach((e) => console.log(` ${e}`));
|
|
186
|
-
totalInvalid++;
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
totalValid++;
|
|
190
|
-
}
|
|
191
|
-
if (result.warnings.length > 0) {
|
|
192
|
-
console.log(`${EMOJI.WARNING} ${name}: ${result.warnings.length} warning(s)`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
console.log('');
|
|
196
|
-
console.log(`${LOG_PREFIX} Summary:`);
|
|
197
|
-
console.log(` ${EMOJI.SUCCESS} Valid: ${totalValid}`);
|
|
198
|
-
console.log(` ${EMOJI.FAILURE} Invalid: ${totalInvalid}`);
|
|
199
|
-
if (totalInvalid > 0) {
|
|
200
|
-
process.exit(1);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// WU-1181: Use import.meta.main instead of process.argv[1] comparison
|
|
205
|
-
// The old pattern fails with pnpm symlinks because process.argv[1] is the symlink
|
|
206
|
-
// path but import.meta.url resolves to the real path - they never match
|
|
207
|
-
// WU-1537: Use import.meta.main + runCLI for consistent EPIPE and error handling
|
|
208
|
-
if (import.meta.main) {
|
|
209
|
-
void runCLI(main);
|
|
210
|
-
}
|
|
211
|
-
//# sourceMappingURL=validate-skills-spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-skills-spec.js","sourceRoot":"","sources":["../src/validate-skills-spec.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
/**
|
|
4
|
-
* Register preflight validators into the registry.
|
|
5
|
-
*
|
|
6
|
-
* Preflight validators run before gates to catch issues early
|
|
7
|
-
* (e.g., missing code paths, type mismatches, spec completeness).
|
|
8
|
-
*
|
|
9
|
-
* @param registry - Validator registry to populate
|
|
10
|
-
*/
|
|
11
|
-
export function registerPreflightValidators(registry) {
|
|
12
|
-
// WU-1805: Preflight code_paths validation before gates
|
|
13
|
-
registry.register({
|
|
14
|
-
name: 'code-path-preflight',
|
|
15
|
-
phase: 'preflight',
|
|
16
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
17
|
-
blocking: true,
|
|
18
|
-
});
|
|
19
|
-
// WU-2310: Type vs code_paths preflight validation
|
|
20
|
-
registry.register({
|
|
21
|
-
name: 'type-vs-code-paths',
|
|
22
|
-
phase: 'preflight',
|
|
23
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
24
|
-
blocking: true,
|
|
25
|
-
});
|
|
26
|
-
// Spec completeness validation
|
|
27
|
-
registry.register({
|
|
28
|
-
name: 'spec-completeness',
|
|
29
|
-
phase: 'preflight',
|
|
30
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
31
|
-
blocking: true,
|
|
32
|
-
});
|
|
33
|
-
// WU consistency check
|
|
34
|
-
registry.register({
|
|
35
|
-
name: 'wu-consistency',
|
|
36
|
-
phase: 'preflight',
|
|
37
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
38
|
-
blocking: true,
|
|
39
|
-
});
|
|
40
|
-
// WU-1503: Dirty-main pre-merge guard
|
|
41
|
-
registry.register({
|
|
42
|
-
name: 'dirty-main-guard',
|
|
43
|
-
phase: 'preflight',
|
|
44
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
45
|
-
blocking: true,
|
|
46
|
-
});
|
|
47
|
-
// Preflight tasks validation
|
|
48
|
-
registry.register({
|
|
49
|
-
name: 'preflight-tasks',
|
|
50
|
-
phase: 'preflight',
|
|
51
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
52
|
-
blocking: true,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Register completion validators into the registry.
|
|
57
|
-
*
|
|
58
|
-
* Completion validators run after gates pass, before the final
|
|
59
|
-
* merge/stamp/cleanup sequence.
|
|
60
|
-
*
|
|
61
|
-
* @param registry - Validator registry to populate
|
|
62
|
-
*/
|
|
63
|
-
export function registerCompletionValidators(registry) {
|
|
64
|
-
// Code paths existence validation
|
|
65
|
-
registry.register({
|
|
66
|
-
name: 'code-paths-exist',
|
|
67
|
-
phase: 'completion',
|
|
68
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
69
|
-
blocking: true,
|
|
70
|
-
});
|
|
71
|
-
// WU-1542: Mandatory agents compliance
|
|
72
|
-
registry.register({
|
|
73
|
-
name: 'mandatory-agents-compliance',
|
|
74
|
-
phase: 'completion',
|
|
75
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
76
|
-
blocking: true,
|
|
77
|
-
});
|
|
78
|
-
// WU-1012: Docs-only flag validation
|
|
79
|
-
registry.register({
|
|
80
|
-
name: 'docs-only-flag',
|
|
81
|
-
phase: 'completion',
|
|
82
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
83
|
-
blocking: true,
|
|
84
|
-
});
|
|
85
|
-
// WU-1999: Exposure validation (non-blocking warnings)
|
|
86
|
-
registry.register({
|
|
87
|
-
name: 'exposure-warnings',
|
|
88
|
-
phase: 'completion',
|
|
89
|
-
validate: () => ({ valid: true, warnings: [] }),
|
|
90
|
-
blocking: false,
|
|
91
|
-
});
|
|
92
|
-
// WU-2022: Feature accessibility validation
|
|
93
|
-
registry.register({
|
|
94
|
-
name: 'feature-accessibility',
|
|
95
|
-
phase: 'completion',
|
|
96
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
97
|
-
blocking: true,
|
|
98
|
-
});
|
|
99
|
-
// Backlog sync validation
|
|
100
|
-
registry.register({
|
|
101
|
-
name: 'backlog-sync',
|
|
102
|
-
phase: 'completion',
|
|
103
|
-
validate: () => ({ valid: true, errors: [] }),
|
|
104
|
-
blocking: true,
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=validator-defaults.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator-defaults.js","sourceRoot":"","sources":["../src/validator-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
/**
|
|
4
|
-
* Registry for wu-done validators.
|
|
5
|
-
*
|
|
6
|
-
* Validators are registered with a phase (preflight or completion) and
|
|
7
|
-
* executed in insertion order within each phase.
|
|
8
|
-
*/
|
|
9
|
-
export class ValidatorRegistry {
|
|
10
|
-
validators = [];
|
|
11
|
-
nameIndex = new Map();
|
|
12
|
-
/**
|
|
13
|
-
* Register a single validator definition.
|
|
14
|
-
*
|
|
15
|
-
* @param validator - Validator definition to register
|
|
16
|
-
* @throws Error if a validator with the same name is already registered
|
|
17
|
-
*/
|
|
18
|
-
register(validator) {
|
|
19
|
-
if (this.nameIndex.has(validator.name)) {
|
|
20
|
-
throw new Error(`Validator "${validator.name}" is already registered`);
|
|
21
|
-
}
|
|
22
|
-
this.nameIndex.set(validator.name, this.validators.length);
|
|
23
|
-
this.validators.push(validator);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Get validators for a specific phase, in insertion order.
|
|
27
|
-
*
|
|
28
|
-
* @param phase - Phase to filter by
|
|
29
|
-
* @returns Copy of the validators for the given phase
|
|
30
|
-
*/
|
|
31
|
-
getByPhase(phase) {
|
|
32
|
-
return this.validators.filter((v) => v.phase === phase).map((v) => ({ ...v }));
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get all registered validators across all phases.
|
|
36
|
-
*
|
|
37
|
-
* @returns Copy of all validators
|
|
38
|
-
*/
|
|
39
|
-
getAll() {
|
|
40
|
-
return [...this.validators];
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Check if a validator with the given name is registered.
|
|
44
|
-
*
|
|
45
|
-
* @param name - Validator name to check
|
|
46
|
-
* @returns true if the validator exists
|
|
47
|
-
*/
|
|
48
|
-
has(name) {
|
|
49
|
-
return this.nameIndex.has(name);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Get all phases that have at least one registered validator.
|
|
53
|
-
*
|
|
54
|
-
* @returns Array of phase names
|
|
55
|
-
*/
|
|
56
|
-
getPhases() {
|
|
57
|
-
const phases = new Set();
|
|
58
|
-
for (const v of this.validators) {
|
|
59
|
-
phases.add(v.phase);
|
|
60
|
-
}
|
|
61
|
-
return [...phases];
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Remove all registered validators.
|
|
65
|
-
*/
|
|
66
|
-
clear() {
|
|
67
|
-
this.validators.length = 0;
|
|
68
|
-
this.nameIndex.clear();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=validator-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator-registry.js","sourceRoot":"","sources":["../src/validator-registry.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAwCzC;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACX,UAAU,GAA0B,EAAE,CAAC;IACvC,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvD;;;;;OAKG;IACH,QAAQ,CAAC,SAA8B;QACrC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,KAAqB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
|