@lumenflow/cli 3.5.1 → 3.6.1

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.
Files changed (41) hide show
  1. package/dist/config-get.js +61 -20
  2. package/dist/config-get.js.map +1 -1
  3. package/dist/config-set.js +469 -70
  4. package/dist/config-set.js.map +1 -1
  5. package/dist/release.js +193 -223
  6. package/dist/release.js.map +1 -1
  7. package/dist/workspace-init.js +35 -3
  8. package/dist/workspace-init.js.map +1 -1
  9. package/dist/wu-brief.js +1 -1
  10. package/dist/wu-brief.js.map +1 -1
  11. package/dist/wu-claim.js +3 -2
  12. package/dist/wu-claim.js.map +1 -1
  13. package/dist/wu-create.js +74 -10
  14. package/dist/wu-create.js.map +1 -1
  15. package/dist/wu-delete.js +3 -3
  16. package/dist/wu-delete.js.map +1 -1
  17. package/dist/wu-done-already-merged.js +154 -0
  18. package/dist/wu-done-already-merged.js.map +1 -0
  19. package/dist/wu-done-git-ops.js +288 -0
  20. package/dist/wu-done-git-ops.js.map +1 -0
  21. package/dist/wu-done-policies.js +268 -0
  22. package/dist/wu-done-policies.js.map +1 -0
  23. package/dist/wu-done.js +64 -645
  24. package/dist/wu-done.js.map +1 -1
  25. package/dist/wu-edit.js +2 -2
  26. package/dist/wu-edit.js.map +1 -1
  27. package/dist/wu-repair.js +26 -8
  28. package/dist/wu-repair.js.map +1 -1
  29. package/dist/wu-spawn-prompt-builders.js.map +1 -1
  30. package/dist/wu-spawn-strategy-resolver.js +66 -24
  31. package/dist/wu-spawn-strategy-resolver.js.map +1 -1
  32. package/package.json +7 -7
  33. package/packs/software-delivery/manifest-schema.ts +2 -0
  34. package/packs/software-delivery/manifest.ts +1 -0
  35. package/packs/software-delivery/manifest.yaml +1 -0
  36. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +16 -2
  37. package/templates/core/ai/onboarding/quick-ref-commands.md.template +2 -1
  38. package/templates/core/ai/onboarding/starting-prompt.md.template +13 -2
  39. package/templates/vendors/claude/.claude/skills/initiative-management/SKILL.md.template +9 -6
  40. package/templates/vendors/claude/.claude/skills/multi-agent-coordination/SKILL.md.template +6 -0
  41. package/templates/vendors/claude/.claude/skills/orchestration/SKILL.md.template +11 -5
@@ -3,29 +3,73 @@
3
3
  // SPDX-License-Identifier: AGPL-3.0-only
4
4
  /**
5
5
  * @file config-get.ts
6
- * WU-1902 / WU-1973: Safe config:get CLI command for reading workspace.yaml values
6
+ * WU-2186: Safe config:get CLI command for reading workspace.yaml values
7
7
  *
8
- * Reads and displays current values from workspace.yaml using dotpath notation.
9
- * Canonical keys use the software_delivery prefix.
8
+ * Uses routeConfigKey for consistent routing with config:set.
9
+ * All keys must be fully qualified from workspace root.
10
+ * No implicit software_delivery prefixing or fallback behavior.
10
11
  *
11
12
  * Usage:
12
13
  * pnpm config:get --key software_delivery.methodology.testing
13
14
  * pnpm config:get --key software_delivery.gates.minCoverage
15
+ * pnpm config:get --key control_plane.sync_interval
14
16
  */
15
17
  import path from 'node:path';
16
18
  import { existsSync, readFileSync } from 'node:fs';
17
19
  import YAML from 'yaml';
18
- import { findProjectRoot } from '@lumenflow/core/config';
20
+ import { findProjectRoot, WRITABLE_ROOT_KEYS } from '@lumenflow/core/config';
19
21
  import { die } from '@lumenflow/core/error-handler';
20
22
  import { FILE_SYSTEM } from '@lumenflow/core/wu-constants';
21
23
  import { runCLI } from './cli-entry-point.js';
22
- import { parseConfigGetArgs, getConfigValue, normalizeWorkspaceConfigKey, WORKSPACE_FILE_NAME, WORKSPACE_CONFIG_PREFIX, } from './config-set.js';
24
+ import { parseConfigGetArgs, getConfigValue, routeConfigKey, loadPackConfigKeys, WORKSPACE_FILE_NAME, } from './config-set.js';
23
25
  // ---------------------------------------------------------------------------
24
26
  // Constants
25
27
  // ---------------------------------------------------------------------------
26
28
  const LOG_PREFIX = '[config:get]';
27
29
  const WORKSPACE_INIT_COMMAND = 'pnpm workspace-init --yes';
28
30
  // ---------------------------------------------------------------------------
31
+ // Core logic: applyConfigGet (pure, no side effects)
32
+ // ---------------------------------------------------------------------------
33
+ /**
34
+ * Apply a config:get operation to a full workspace object.
35
+ *
36
+ * Routes the key using routeConfigKey (same as config:set) to determine
37
+ * the correct read scope. No fallback to software_delivery for unqualified keys.
38
+ *
39
+ * @param workspace - Full workspace object (raw YAML parse)
40
+ * @param key - Fully qualified dotpath key (e.g., "software_delivery.gates.minCoverage")
41
+ * @param packConfigKeys - Map of config_key -> pack_id from loaded pack manifests
42
+ * @returns Result with value or error
43
+ */
44
+ export function applyConfigGet(workspace, key, packConfigKeys) {
45
+ const route = routeConfigKey(key, packConfigKeys);
46
+ switch (route.type) {
47
+ case 'managed-error':
48
+ return {
49
+ ok: false,
50
+ error: `Key "${route.rootKey}" is managed by a dedicated command. Use \`pnpm ${route.command}\` instead.`,
51
+ };
52
+ case 'unknown-error': {
53
+ const hint = route.suggestion ? ` ${route.suggestion}` : '';
54
+ return {
55
+ ok: false,
56
+ error: `Unknown root key "${route.rootKey}".${hint} Valid root keys: ${[...WRITABLE_ROOT_KEYS].join(', ')}, or a pack config_key (${[...packConfigKeys.keys()].join(', ')}).`,
57
+ };
58
+ }
59
+ case 'workspace-root': {
60
+ // Read from workspace root (e.g., control_plane.endpoint, memory_namespace)
61
+ const value = getConfigValue(workspace, key);
62
+ return { ok: true, value };
63
+ }
64
+ case 'pack-config': {
65
+ // Read from workspace root using the fully-qualified key
66
+ // (pack config is stored at workspace root under the config_key)
67
+ const value = getConfigValue(workspace, key);
68
+ return { ok: true, value };
69
+ }
70
+ }
71
+ }
72
+ // ---------------------------------------------------------------------------
29
73
  // Main: config:get
30
74
  // ---------------------------------------------------------------------------
31
75
  export async function main() {
@@ -39,29 +83,26 @@ export async function main() {
39
83
  // Read raw workspace (preserving YAML structure, not Zod-parsed defaults)
40
84
  const content = readFileSync(workspacePath, FILE_SYSTEM.UTF8);
41
85
  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
- }
86
+ // Load pack config_keys from workspace for routing
87
+ const packConfigKeys = loadPackConfigKeys(projectRoot, workspace);
88
+ // Route and read using workspace-aware routing (no fallback)
89
+ const result = applyConfigGet(workspace, options.key, packConfigKeys);
90
+ if (!result.ok) {
91
+ console.log(`${LOG_PREFIX} ${result.error}`);
92
+ process.exitCode = 1;
93
+ return;
53
94
  }
54
- if (value === undefined) {
95
+ if (result.value === undefined) {
55
96
  console.log(`${LOG_PREFIX} Key "${options.key}" is not set (undefined)`);
56
97
  process.exitCode = 0;
57
98
  return;
58
99
  }
59
100
  // Format output based on type
60
- if (typeof value === 'object' && value !== null) {
61
- console.log(YAML.stringify(value).trimEnd());
101
+ if (typeof result.value === 'object' && result.value !== null) {
102
+ console.log(YAML.stringify(result.value).trimEnd());
62
103
  }
63
104
  else {
64
- console.log(String(value));
105
+ console.log(String(result.value));
65
106
  }
66
107
  }
67
108
  if (import.meta.main) {
@@ -1 +1 @@
1
- {"version":3,"file":"config-get.js","sourceRoot":"","sources":["../src/config-get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-get.js","sourceRoot":"","sources":["../src/config-get.ts"],"names":[],"mappings":"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"}