@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
package/README.md
CHANGED
|
@@ -152,39 +152,40 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
|
|
|
152
152
|
|
|
153
153
|
### System & Setup
|
|
154
154
|
|
|
155
|
-
| Command | Description
|
|
156
|
-
| -------------------------- |
|
|
157
|
-
| `backlog-prune` | Clean stale backlog entries
|
|
158
|
-
| `
|
|
159
|
-
| `config-
|
|
160
|
-
| `
|
|
161
|
-
| `
|
|
162
|
-
| `lumenflow
|
|
163
|
-
| `lumenflow-
|
|
164
|
-
| `lumenflow-
|
|
165
|
-
| `lumenflow-
|
|
166
|
-
| `lumenflow-
|
|
167
|
-
| `lumenflow-
|
|
168
|
-
| `lumenflow-
|
|
169
|
-
| `lumenflow-
|
|
170
|
-
| `lumenflow-
|
|
171
|
-
| `
|
|
172
|
-
| `
|
|
173
|
-
| `pack-
|
|
174
|
-
| `pack-
|
|
175
|
-
| `pack-
|
|
176
|
-
| `pack-
|
|
177
|
-
| `pack-
|
|
178
|
-
| `pack-
|
|
179
|
-
| `
|
|
180
|
-
| `plan-
|
|
181
|
-
| `plan-
|
|
182
|
-
| `plan-
|
|
183
|
-
| `
|
|
184
|
-
| `state-
|
|
185
|
-
| `state-
|
|
186
|
-
| `
|
|
187
|
-
| `
|
|
155
|
+
| Command | Description |
|
|
156
|
+
| -------------------------- | ------------------------------------------------------------------- |
|
|
157
|
+
| `backlog-prune` | Clean stale backlog entries |
|
|
158
|
+
| `cloud-connect` | Connect workspace.yaml to cloud control plane |
|
|
159
|
+
| `config-get` | Read and display a value from workspace.yaml software_delivery |
|
|
160
|
+
| `config-set` | Safely update workspace.yaml software_delivery via micro-worktree |
|
|
161
|
+
| `init-plan` | Link plan to initiative (alias) |
|
|
162
|
+
| `lumenflow` | Initialize LumenFlow in a project |
|
|
163
|
+
| `lumenflow-commands` | List all available CLI commands |
|
|
164
|
+
| `lumenflow-docs-sync` | Sync agent docs (for upgrades) (alias) |
|
|
165
|
+
| `lumenflow-doctor` | Diagnose LumenFlow configuration |
|
|
166
|
+
| `lumenflow-init` | Initialize LumenFlow in a project (alias) |
|
|
167
|
+
| `lumenflow-integrate` | Generate enforcement hooks for client |
|
|
168
|
+
| `lumenflow-onboard` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding |
|
|
169
|
+
| `lumenflow-release` | Run release workflow |
|
|
170
|
+
| `lumenflow-sync-templates` | Sync templates to project |
|
|
171
|
+
| `lumenflow-upgrade` | Upgrade LumenFlow packages |
|
|
172
|
+
| `onboard` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding |
|
|
173
|
+
| `pack-author` | Author a secure domain pack from templates |
|
|
174
|
+
| `pack-hash` | Compute integrity hash for a domain pack |
|
|
175
|
+
| `pack-install` | Install a domain pack into workspace |
|
|
176
|
+
| `pack-publish` | Publish a domain pack to a registry |
|
|
177
|
+
| `pack-scaffold` | Scaffold a new domain pack |
|
|
178
|
+
| `pack-search` | Search for domain packs in a registry |
|
|
179
|
+
| `pack-validate` | Validate a domain pack for integrity |
|
|
180
|
+
| `plan-create` | Create a new plan |
|
|
181
|
+
| `plan-edit` | Edit plan content |
|
|
182
|
+
| `plan-link` | Link plan to WU or initiative |
|
|
183
|
+
| `plan-promote` | Promote plan to WU |
|
|
184
|
+
| `state-bootstrap` | Bootstrap state store |
|
|
185
|
+
| `state-cleanup` | Clean up stale state data |
|
|
186
|
+
| `state-doctor` | Diagnose state store issues |
|
|
187
|
+
| `sync-templates` | Sync templates to project (alias) |
|
|
188
|
+
| `workspace-init` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding |
|
|
188
189
|
|
|
189
190
|
### File & Git Operations
|
|
190
191
|
|
|
@@ -295,9 +296,9 @@ pnpm update @lumenflow/cli @lumenflow/core @lumenflow/memory @lumenflow/agent @l
|
|
|
295
296
|
pnpm exec lumenflow docs:sync
|
|
296
297
|
```
|
|
297
298
|
|
|
298
|
-
**Important**: Always run `docs:sync` after
|
|
299
|
+
**Important**: Always run `docs:sync` after package changes to update agent onboarding documentation, workflow rules, and vendor-specific configurations.
|
|
299
300
|
|
|
300
|
-
For
|
|
301
|
+
For current setup guidance and troubleshooting, see [LUMENFLOW.md](https://lumenflow.dev).
|
|
301
302
|
|
|
302
303
|
## License
|
|
303
304
|
|
|
@@ -23,6 +23,7 @@ import chalk from 'chalk';
|
|
|
23
23
|
import { die } from '@lumenflow/core/error-handler';
|
|
24
24
|
import { LUMENFLOW_PATHS } from '@lumenflow/core/wu-constants';
|
|
25
25
|
import { runCLI } from './cli-entry-point.js';
|
|
26
|
+
import { TOP_ISSUES_DISPLAY_LIMIT, RECENT_ISSUES_DISPLAY_LIMIT, ISSUE_TITLE_TRUNCATION_LENGTH, ISSUE_TITLE_TRUNCATED_TEXT_LENGTH, SEVERITY_PADDING_WIDTH, CATEGORY_PADDING_WIDTH, } from './constants.js';
|
|
26
27
|
/** Log prefix for console output */
|
|
27
28
|
const LOG_PREFIX = '[agent:issues-query]';
|
|
28
29
|
/** Default days to query */
|
|
@@ -175,7 +176,7 @@ function displaySummary(issues, sinceDays) {
|
|
|
175
176
|
const count = bySeverity.get(severity)?.length ?? 0;
|
|
176
177
|
if (count > 0) {
|
|
177
178
|
const color = getSeverityColor(severity);
|
|
178
|
-
console.log(` ${color(severity.toUpperCase().padEnd(
|
|
179
|
+
console.log(` ${color(severity.toUpperCase().padEnd(SEVERITY_PADDING_WIDTH))} ${count}`);
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
182
|
console.log('');
|
|
@@ -189,7 +190,7 @@ function displaySummary(issues, sinceDays) {
|
|
|
189
190
|
})
|
|
190
191
|
.filter(Boolean)
|
|
191
192
|
.join(' ');
|
|
192
|
-
console.log(` ${String(category).padEnd(
|
|
193
|
+
console.log(` ${String(category).padEnd(CATEGORY_PADDING_WIDTH)} ${categoryIssues.length} issues (${severityCounts})`);
|
|
193
194
|
}
|
|
194
195
|
console.log('');
|
|
195
196
|
// Top 5 most common issues
|
|
@@ -200,12 +201,14 @@ function displaySummary(issues, sinceDays) {
|
|
|
200
201
|
}
|
|
201
202
|
const topIssues = Array.from(issueCount.entries())
|
|
202
203
|
.sort((a, b) => b[1] - a[1])
|
|
203
|
-
.slice(0,
|
|
204
|
+
.slice(0, TOP_ISSUES_DISPLAY_LIMIT);
|
|
204
205
|
if (topIssues.length > 0) {
|
|
205
|
-
console.log(
|
|
206
|
+
console.log(` Top ${TOP_ISSUES_DISPLAY_LIMIT} Most Common:`);
|
|
206
207
|
for (const [key, count] of topIssues) {
|
|
207
208
|
const [category, title] = key.split(':');
|
|
208
|
-
const truncatedTitle = title.length >
|
|
209
|
+
const truncatedTitle = title.length > ISSUE_TITLE_TRUNCATION_LENGTH
|
|
210
|
+
? title.slice(0, ISSUE_TITLE_TRUNCATED_TEXT_LENGTH) + '...'
|
|
211
|
+
: title;
|
|
209
212
|
console.log(` ${count}x [${category}] ${truncatedTitle}`);
|
|
210
213
|
}
|
|
211
214
|
console.log('');
|
|
@@ -213,13 +216,15 @@ function displaySummary(issues, sinceDays) {
|
|
|
213
216
|
// Recent issues (last 5)
|
|
214
217
|
const recentIssues = [...issues]
|
|
215
218
|
.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
|
|
216
|
-
.slice(0,
|
|
219
|
+
.slice(0, RECENT_ISSUES_DISPLAY_LIMIT);
|
|
217
220
|
console.log(' Recent Issues:');
|
|
218
221
|
for (const issue of recentIssues) {
|
|
219
222
|
const date = new Date(issue.timestamp).toISOString().split('T')[0];
|
|
220
223
|
const badge = formatSeverityBadge(issue.severity);
|
|
221
224
|
const wuInfo = issue.wuId ? ` (${issue.wuId})` : '';
|
|
222
|
-
const truncatedTitle = issue.title.length >
|
|
225
|
+
const truncatedTitle = issue.title.length > ISSUE_TITLE_TRUNCATION_LENGTH
|
|
226
|
+
? issue.title.slice(0, ISSUE_TITLE_TRUNCATED_TEXT_LENGTH) + '...'
|
|
227
|
+
: issue.title;
|
|
223
228
|
console.log(` ${date} ${badge} ${truncatedTitle}${wuInfo}`);
|
|
224
229
|
}
|
|
225
230
|
console.log('');
|
|
@@ -227,7 +232,7 @@ function displaySummary(issues, sinceDays) {
|
|
|
227
232
|
/**
|
|
228
233
|
* Main function
|
|
229
234
|
*/
|
|
230
|
-
async function main() {
|
|
235
|
+
export async function main() {
|
|
231
236
|
const opts = parseArgs();
|
|
232
237
|
const baseDir = process.cwd();
|
|
233
238
|
const sinceDate = new Date();
|
package/dist/agent-log-issue.js
CHANGED
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
import { Command } from 'commander';
|
|
18
18
|
import { logIncident, getCurrentSession } from '@lumenflow/agent';
|
|
19
19
|
import { EXIT_CODES, INCIDENT_SEVERITY, LUMENFLOW_PATHS } from '@lumenflow/core/wu-constants';
|
|
20
|
+
import { ProcessExitError } from '@lumenflow/core/error-handler';
|
|
20
21
|
import chalk from 'chalk';
|
|
22
|
+
import { runCLI } from './cli-entry-point.js';
|
|
21
23
|
/**
|
|
22
24
|
* WU-1182: Collector function for Commander.js repeatable options.
|
|
23
25
|
* Accumulates multiple flag values into an array.
|
|
@@ -49,9 +51,10 @@ const program = new Command()
|
|
|
49
51
|
try {
|
|
50
52
|
const session = await getCurrentSession();
|
|
51
53
|
if (!session) {
|
|
52
|
-
|
|
54
|
+
const message = 'Error: No active session';
|
|
55
|
+
console.error(chalk.red(message));
|
|
53
56
|
console.error('Run: pnpm agent:session --wu WU-XXX --tier N');
|
|
54
|
-
|
|
57
|
+
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
55
58
|
}
|
|
56
59
|
const incident = {
|
|
57
60
|
category: opts.category,
|
|
@@ -77,6 +80,9 @@ const program = new Command()
|
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
catch (err) {
|
|
83
|
+
if (err instanceof ProcessExitError) {
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
80
86
|
const error = err;
|
|
81
87
|
console.error(chalk.red(`Error: ${error.message ?? 'Unknown error'}`));
|
|
82
88
|
if (error.issues) {
|
|
@@ -85,8 +91,13 @@ const program = new Command()
|
|
|
85
91
|
console.error(chalk.red(` - ${issue.path.join('.')}: ${issue.message}`));
|
|
86
92
|
});
|
|
87
93
|
}
|
|
88
|
-
|
|
94
|
+
throw new ProcessExitError(error.message ?? 'Unknown error', EXIT_CODES.ERROR);
|
|
89
95
|
}
|
|
90
96
|
});
|
|
91
|
-
|
|
97
|
+
export async function main() {
|
|
98
|
+
await program.parseAsync(process.argv);
|
|
99
|
+
}
|
|
100
|
+
if (import.meta.main) {
|
|
101
|
+
void runCLI(main);
|
|
102
|
+
}
|
|
92
103
|
//# sourceMappingURL=agent-log-issue.js.map
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
import { Command } from 'commander';
|
|
13
13
|
import { endSession, getCurrentSession } from '@lumenflow/agent';
|
|
14
14
|
import { EXIT_CODES } from '@lumenflow/core/wu-constants';
|
|
15
|
+
import { ProcessExitError } from '@lumenflow/core/error-handler';
|
|
15
16
|
import chalk from 'chalk';
|
|
17
|
+
import { runCLI } from './cli-entry-point.js';
|
|
16
18
|
const program = new Command()
|
|
17
19
|
.name('agent:session:end')
|
|
18
20
|
.description('End the current agent session')
|
|
@@ -20,8 +22,9 @@ const program = new Command()
|
|
|
20
22
|
try {
|
|
21
23
|
const session = await getCurrentSession();
|
|
22
24
|
if (!session) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
const message = 'No active session to end.';
|
|
26
|
+
console.error(chalk.yellow(message));
|
|
27
|
+
throw new ProcessExitError(message, EXIT_CODES.SUCCESS);
|
|
25
28
|
}
|
|
26
29
|
const summary = await endSession();
|
|
27
30
|
console.log(chalk.green(`✓ Session ended`));
|
|
@@ -31,10 +34,18 @@ const program = new Command()
|
|
|
31
34
|
console.log(` Incidents: ${summary.incidents_logged} (${summary.incidents_major} major)`);
|
|
32
35
|
}
|
|
33
36
|
catch (err) {
|
|
37
|
+
if (err instanceof ProcessExitError) {
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
34
40
|
const message = err instanceof Error ? err.message : String(err);
|
|
35
41
|
console.error(chalk.red(`Error: ${message}`));
|
|
36
|
-
|
|
42
|
+
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
37
43
|
}
|
|
38
44
|
});
|
|
39
|
-
|
|
45
|
+
export async function main() {
|
|
46
|
+
await program.parseAsync(process.argv);
|
|
47
|
+
}
|
|
48
|
+
if (import.meta.main) {
|
|
49
|
+
void runCLI(main);
|
|
50
|
+
}
|
|
40
51
|
//# sourceMappingURL=agent-session-end.js.map
|
package/dist/agent-session.js
CHANGED
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
import { Command } from 'commander';
|
|
13
13
|
import { startSession, getCurrentSession } from '@lumenflow/agent';
|
|
14
14
|
import { EXIT_CODES } from '@lumenflow/core/wu-constants';
|
|
15
|
+
import { ProcessExitError } from '@lumenflow/core/error-handler';
|
|
15
16
|
import chalk from 'chalk';
|
|
17
|
+
import { runCLI } from './cli-entry-point.js';
|
|
16
18
|
const program = new Command()
|
|
17
19
|
.name('agent:session')
|
|
18
20
|
.description('Start an agent session')
|
|
@@ -24,14 +26,16 @@ const program = new Command()
|
|
|
24
26
|
// Check for existing session
|
|
25
27
|
const existing = await getCurrentSession();
|
|
26
28
|
if (existing) {
|
|
27
|
-
|
|
29
|
+
const message = `Session already active for ${existing.wu_id}`;
|
|
30
|
+
console.error(chalk.red(message));
|
|
28
31
|
console.error(`Run: pnpm agent:session:end to close it first.`);
|
|
29
|
-
|
|
32
|
+
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
30
33
|
}
|
|
31
34
|
const tier = parseInt(opts.tier, 10);
|
|
32
35
|
if (![1, 2, 3].includes(tier)) {
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
const message = 'Invalid tier. Must be 1, 2, or 3.';
|
|
37
|
+
console.error(chalk.red(message));
|
|
38
|
+
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
35
39
|
}
|
|
36
40
|
const sessionId = await startSession(opts.wu, tier, opts.agentType);
|
|
37
41
|
console.log(chalk.green(`✓ Session started`));
|
|
@@ -41,10 +45,18 @@ const program = new Command()
|
|
|
41
45
|
console.log(` Agent: ${chalk.cyan(opts.agentType)}`);
|
|
42
46
|
}
|
|
43
47
|
catch (err) {
|
|
48
|
+
if (err instanceof ProcessExitError) {
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
44
51
|
const message = err instanceof Error ? err.message : String(err);
|
|
45
52
|
console.error(chalk.red(`Error: ${message}`));
|
|
46
|
-
|
|
53
|
+
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
47
54
|
}
|
|
48
55
|
});
|
|
49
|
-
|
|
56
|
+
export async function main() {
|
|
57
|
+
await program.parseAsync(process.argv);
|
|
58
|
+
}
|
|
59
|
+
if (import.meta.main) {
|
|
60
|
+
void runCLI(main);
|
|
61
|
+
}
|
|
50
62
|
//# sourceMappingURL=agent-session.js.map
|
package/dist/backlog-prune.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Integrate LumenFlow with Claude Code (WU-1367)
|
|
7
7
|
*
|
|
8
8
|
* This command generates enforcement hooks and updates Claude Code
|
|
9
|
-
* configuration based on .
|
|
9
|
+
* configuration based on workspace.yaml software_delivery settings.
|
|
10
10
|
*
|
|
11
11
|
* Usage:
|
|
12
12
|
* pnpm lumenflow:integrate --client claude-code
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import * as fs from 'node:fs';
|
|
18
18
|
import * as path from 'node:path';
|
|
19
19
|
import * as yaml from 'yaml';
|
|
20
|
-
import { createWUParser, WU_OPTIONS, CLAUDE_HOOKS, DIRECTORIES, LUMENFLOW_CLIENT_IDS, } from '@lumenflow/core';
|
|
20
|
+
import { createWUParser, WU_OPTIONS, CLAUDE_HOOKS, DIRECTORIES, LUMENFLOW_CLIENT_IDS, WORKSPACE_CONFIG_FILE_NAME, WORKSPACE_V2_KEYS, } from '@lumenflow/core';
|
|
21
21
|
import { generateEnforcementHooks, generateEnforceWorktreeScript, generateRequireWuScript, generateWarnIncompleteScript, } from '../hooks/enforcement-generator.js';
|
|
22
22
|
import { runCLI } from '../cli-entry-point.js';
|
|
23
23
|
/**
|
|
@@ -181,22 +181,34 @@ export async function integrateClaudeCode(projectDir, config) {
|
|
|
181
181
|
return created;
|
|
182
182
|
}
|
|
183
183
|
/**
|
|
184
|
-
* Read
|
|
184
|
+
* Read software_delivery config from workspace.yaml.
|
|
185
185
|
*/
|
|
186
|
-
function
|
|
187
|
-
const configPath = path.join(projectDir,
|
|
186
|
+
function readWorkspaceSoftwareDeliveryConfig(projectDir) {
|
|
187
|
+
const configPath = path.join(projectDir, WORKSPACE_CONFIG_FILE_NAME);
|
|
188
188
|
if (!fs.existsSync(configPath)) {
|
|
189
189
|
return null;
|
|
190
190
|
}
|
|
191
191
|
try {
|
|
192
192
|
const content = fs.readFileSync(configPath, 'utf-8');
|
|
193
|
-
const
|
|
194
|
-
|
|
193
|
+
const workspaceDoc = yaml.parse(content);
|
|
194
|
+
if (!workspaceDoc || typeof workspaceDoc !== 'object') {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
const workspace = workspaceDoc;
|
|
198
|
+
const softwareDelivery = workspace[WORKSPACE_V2_KEYS.SOFTWARE_DELIVERY];
|
|
199
|
+
if (!softwareDelivery || typeof softwareDelivery !== 'object') {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
return softwareDelivery;
|
|
195
203
|
}
|
|
196
204
|
catch {
|
|
197
205
|
return null;
|
|
198
206
|
}
|
|
199
207
|
}
|
|
208
|
+
function readEnforcementConfig(projectDir) {
|
|
209
|
+
const softwareDelivery = readWorkspaceSoftwareDeliveryConfig(projectDir);
|
|
210
|
+
return softwareDelivery?.agents?.clients?.[LUMENFLOW_CLIENT_IDS.CLAUDE_CODE]?.enforcement ?? null;
|
|
211
|
+
}
|
|
200
212
|
/**
|
|
201
213
|
* Main entry point for integrate command
|
|
202
214
|
*/
|
|
@@ -208,20 +220,22 @@ export async function main() {
|
|
|
208
220
|
process.exit(1);
|
|
209
221
|
}
|
|
210
222
|
const projectDir = process.cwd();
|
|
211
|
-
// Read enforcement config from .
|
|
223
|
+
// Read enforcement config from workspace.yaml software_delivery
|
|
212
224
|
const enforcement = readEnforcementConfig(projectDir);
|
|
213
225
|
if (!enforcement) {
|
|
214
|
-
console.log(
|
|
215
|
-
|
|
226
|
+
console.log(`[integrate] No enforcement config found in ${WORKSPACE_CONFIG_FILE_NAME} ` +
|
|
227
|
+
`${WORKSPACE_V2_KEYS.SOFTWARE_DELIVERY}.agents.clients.${LUMENFLOW_CLIENT_IDS.CLAUDE_CODE}`);
|
|
228
|
+
console.log('[integrate] Add this to your workspace config to enable enforcement hooks:');
|
|
216
229
|
console.log(`
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
230
|
+
${WORKSPACE_V2_KEYS.SOFTWARE_DELIVERY}:
|
|
231
|
+
agents:
|
|
232
|
+
clients:
|
|
233
|
+
${LUMENFLOW_CLIENT_IDS.CLAUDE_CODE}:
|
|
234
|
+
enforcement:
|
|
235
|
+
hooks: true
|
|
236
|
+
block_outside_worktree: true
|
|
237
|
+
require_wu_for_edits: true
|
|
238
|
+
warn_on_stop_without_wu_done: true
|
|
225
239
|
`);
|
|
226
240
|
return;
|
|
227
241
|
}
|
package/dist/config-get.js
CHANGED
|
@@ -3,42 +3,54 @@
|
|
|
3
3
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
4
|
/**
|
|
5
5
|
* @file config-get.ts
|
|
6
|
-
* WU-1902: Safe config:get CLI command for reading .
|
|
6
|
+
* WU-1902 / WU-1973: Safe config:get CLI command for reading workspace.yaml values
|
|
7
7
|
*
|
|
8
|
-
* Reads and displays current values from
|
|
9
|
-
*
|
|
8
|
+
* Reads and displays current values from workspace.yaml using dotpath notation.
|
|
9
|
+
* Canonical keys use the software_delivery prefix.
|
|
10
10
|
*
|
|
11
11
|
* Usage:
|
|
12
|
-
* pnpm config:get --key methodology.testing
|
|
13
|
-
* pnpm config:get --key gates.minCoverage
|
|
12
|
+
* pnpm config:get --key software_delivery.methodology.testing
|
|
13
|
+
* pnpm config:get --key software_delivery.gates.minCoverage
|
|
14
14
|
*/
|
|
15
15
|
import path from 'node:path';
|
|
16
16
|
import { existsSync, readFileSync } from 'node:fs';
|
|
17
17
|
import YAML from 'yaml';
|
|
18
18
|
import { findProjectRoot } from '@lumenflow/core/config';
|
|
19
19
|
import { die } from '@lumenflow/core/error-handler';
|
|
20
|
-
import {
|
|
20
|
+
import { FILE_SYSTEM } from '@lumenflow/core/wu-constants';
|
|
21
21
|
import { runCLI } from './cli-entry-point.js';
|
|
22
|
-
import { parseConfigGetArgs, getConfigValue } from './config-set.js';
|
|
22
|
+
import { parseConfigGetArgs, getConfigValue, normalizeWorkspaceConfigKey, WORKSPACE_FILE_NAME, WORKSPACE_CONFIG_PREFIX, } from './config-set.js';
|
|
23
23
|
// ---------------------------------------------------------------------------
|
|
24
24
|
// Constants
|
|
25
25
|
// ---------------------------------------------------------------------------
|
|
26
26
|
const LOG_PREFIX = '[config:get]';
|
|
27
|
+
const WORKSPACE_INIT_COMMAND = 'pnpm workspace-init --yes';
|
|
27
28
|
// ---------------------------------------------------------------------------
|
|
28
29
|
// Main: config:get
|
|
29
30
|
// ---------------------------------------------------------------------------
|
|
30
|
-
async function main() {
|
|
31
|
+
export async function main() {
|
|
31
32
|
const userArgs = process.argv.slice(2);
|
|
32
33
|
const options = parseConfigGetArgs(userArgs);
|
|
33
34
|
const projectRoot = findProjectRoot();
|
|
34
|
-
const
|
|
35
|
-
if (!existsSync(
|
|
36
|
-
die(`${LOG_PREFIX} Missing ${
|
|
35
|
+
const workspacePath = path.join(projectRoot, WORKSPACE_FILE_NAME);
|
|
36
|
+
if (!existsSync(workspacePath)) {
|
|
37
|
+
die(`${LOG_PREFIX} Missing ${WORKSPACE_FILE_NAME}. Run \`${WORKSPACE_INIT_COMMAND}\` first.`);
|
|
38
|
+
}
|
|
39
|
+
// Read raw workspace (preserving YAML structure, not Zod-parsed defaults)
|
|
40
|
+
const content = readFileSync(workspacePath, FILE_SYSTEM.UTF8);
|
|
41
|
+
const workspace = YAML.parse(content) ?? {};
|
|
42
|
+
// Canonical read path (full workspace key)
|
|
43
|
+
let value = getConfigValue(workspace, options.key);
|
|
44
|
+
if (value === undefined) {
|
|
45
|
+
// Shorthand compatibility: methodology.testing -> software_delivery.methodology.testing
|
|
46
|
+
const shorthandKey = normalizeWorkspaceConfigKey(options.key);
|
|
47
|
+
if (shorthandKey !== options.key) {
|
|
48
|
+
value = getConfigValue(workspace, `${WORKSPACE_CONFIG_PREFIX}${shorthandKey}`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
value = getConfigValue(workspace, `${WORKSPACE_CONFIG_PREFIX}${options.key}`);
|
|
52
|
+
}
|
|
37
53
|
}
|
|
38
|
-
// Read raw config (preserving YAML structure, not Zod-parsed)
|
|
39
|
-
const content = readFileSync(configPath, FILE_SYSTEM.UTF8);
|
|
40
|
-
const config = YAML.parse(content) ?? {};
|
|
41
|
-
const value = getConfigValue(config, options.key);
|
|
42
54
|
if (value === undefined) {
|
|
43
55
|
console.log(`${LOG_PREFIX} Key "${options.key}" is not set (undefined)`);
|
|
44
56
|
process.exitCode = 0;
|