create-quiver 0.15.2 → 0.15.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.
Files changed (97) hide show
  1. package/README.md +1 -0
  2. package/README_FOR_AI.md +6 -4
  3. package/docs/CLI_UX_GUIDE.md +1 -1
  4. package/docs/COMMANDS.md.template +14 -3
  5. package/docs/INDEX.md +87 -0
  6. package/docs/WORKFLOW.md.template +2 -2
  7. package/docs/reference/commands.md +13 -1
  8. package/package.json +3 -1
  9. package/specs/quiver-v34-cli-dashboard-status/EVIDENCE_REPORT.md +119 -0
  10. package/specs/quiver-v34-cli-dashboard-status/EXECUTION_PLAN.md +77 -0
  11. package/specs/quiver-v34-cli-dashboard-status/SPEC.md +152 -0
  12. package/specs/quiver-v34-cli-dashboard-status/STATUS.md +29 -0
  13. package/specs/quiver-v34-cli-dashboard-status/pr.md +99 -0
  14. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/CLOSURE_BRIEF.md +19 -0
  15. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/EXECUTION_BRIEF.md +49 -0
  16. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/slice.json +68 -0
  17. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/CLOSURE_BRIEF.md +19 -0
  18. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/EXECUTION_BRIEF.md +53 -0
  19. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/slice.json +78 -0
  20. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/CLOSURE_BRIEF.md +19 -0
  21. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/EXECUTION_BRIEF.md +53 -0
  22. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/slice.json +82 -0
  23. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/CLOSURE_BRIEF.md +19 -0
  24. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/EXECUTION_BRIEF.md +54 -0
  25. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/slice.json +77 -0
  26. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/CLOSURE_BRIEF.md +19 -0
  27. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/EXECUTION_BRIEF.md +54 -0
  28. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/slice.json +88 -0
  29. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/CLOSURE_BRIEF.md +26 -0
  30. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/EXECUTION_BRIEF.md +57 -0
  31. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/slice.json +85 -0
  32. package/specs/quiver-v35-compact-dashboard-version-ux/EVIDENCE_REPORT.md +43 -0
  33. package/specs/quiver-v35-compact-dashboard-version-ux/EXECUTION_PLAN.md +85 -0
  34. package/specs/quiver-v35-compact-dashboard-version-ux/SPEC.md +147 -0
  35. package/specs/quiver-v35-compact-dashboard-version-ux/STATUS.md +33 -0
  36. package/specs/quiver-v35-compact-dashboard-version-ux/pr.md +106 -0
  37. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/CLOSURE_BRIEF.md +19 -0
  38. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/EXECUTION_BRIEF.md +38 -0
  39. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/slice.json +64 -0
  40. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/CLOSURE_BRIEF.md +19 -0
  41. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/EXECUTION_BRIEF.md +49 -0
  42. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/slice.json +80 -0
  43. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/CLOSURE_BRIEF.md +19 -0
  44. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/EXECUTION_BRIEF.md +48 -0
  45. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/slice.json +73 -0
  46. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/CLOSURE_BRIEF.md +19 -0
  47. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/EXECUTION_BRIEF.md +48 -0
  48. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/slice.json +72 -0
  49. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/CLOSURE_BRIEF.md +19 -0
  50. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/EXECUTION_BRIEF.md +49 -0
  51. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/slice.json +82 -0
  52. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/CLOSURE_BRIEF.md +19 -0
  53. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/EXECUTION_BRIEF.md +50 -0
  54. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/slice.json +90 -0
  55. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/CLOSURE_BRIEF.md +21 -0
  56. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/EXECUTION_BRIEF.md +51 -0
  57. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/slice.json +85 -0
  58. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/CLOSURE_BRIEF.md +20 -0
  59. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/EXECUTION_BRIEF.md +49 -0
  60. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/slice.json +79 -0
  61. package/specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md +33 -0
  62. package/specs/quiver-v36-ai-run-watch-portable/EXECUTION_PLAN.md +39 -0
  63. package/specs/quiver-v36-ai-run-watch-portable/SPEC.md +166 -0
  64. package/specs/quiver-v36-ai-run-watch-portable/STATUS.md +31 -0
  65. package/specs/quiver-v36-ai-run-watch-portable/pr.md +78 -0
  66. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/CLOSURE_BRIEF.md +19 -0
  67. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/EXECUTION_BRIEF.md +43 -0
  68. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/slice.json +61 -0
  69. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/CLOSURE_BRIEF.md +18 -0
  70. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/EXECUTION_BRIEF.md +43 -0
  71. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/slice.json +65 -0
  72. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/CLOSURE_BRIEF.md +18 -0
  73. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/EXECUTION_BRIEF.md +43 -0
  74. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/slice.json +66 -0
  75. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/CLOSURE_BRIEF.md +18 -0
  76. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/EXECUTION_BRIEF.md +41 -0
  77. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/slice.json +71 -0
  78. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/CLOSURE_BRIEF.md +18 -0
  79. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/EXECUTION_BRIEF.md +44 -0
  80. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/slice.json +73 -0
  81. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/CLOSURE_BRIEF.md +18 -0
  82. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/EXECUTION_BRIEF.md +44 -0
  83. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/slice.json +71 -0
  84. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/CLOSURE_BRIEF.md +19 -0
  85. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/EXECUTION_BRIEF.md +45 -0
  86. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json +77 -0
  87. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/CLOSURE_BRIEF.md +22 -0
  88. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/EXECUTION_BRIEF.md +46 -0
  89. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/slice.json +87 -0
  90. package/src/create-quiver/commands/dashboard.js +31 -0
  91. package/src/create-quiver/index.js +97 -2
  92. package/src/create-quiver/lib/cli/ux-flags.js +6 -0
  93. package/src/create-quiver/lib/dashboard.js +896 -0
  94. package/src/create-quiver/lib/init-docs.js +6 -0
  95. package/src/create-quiver/lib/init-layout.js +2 -0
  96. package/src/create-quiver/lib/project-state-resolver.js +22 -2
  97. package/src/create-quiver/lib/version.js +157 -0
@@ -398,7 +398,9 @@ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
398
398
  The generated project includes \`quiver:*\` npm scripts that call the Node CLI:
399
399
 
400
400
  \`\`\`bash
401
+ npm run quiver:version
401
402
  npm run quiver:analyze
403
+ npm run quiver:dashboard
402
404
  npm run quiver:prepare -- --dry-run
403
405
  npm run quiver:plan
404
406
  npm run quiver:graph
@@ -504,7 +506,9 @@ Remove \`--dry-run\` only after the phase output is approved and the local provi
504
506
  The generated project includes \`quiver:*\` npm scripts that call the Node CLI and are the preferred repeatable workflow:
505
507
 
506
508
  \`\`\`bash
509
+ npm run quiver:version
507
510
  npm run quiver:analyze
511
+ npm run quiver:dashboard
508
512
  npm run quiver:prepare -- --dry-run
509
513
  npm run quiver:plan
510
514
  npm run quiver:graph
@@ -538,6 +542,8 @@ npm run quiver:refresh-active-slices
538
542
  \`\`\`
539
543
 
540
544
  The \`quiver:graph\` script prints the tree view by default; use \`npx create-quiver graph --format mermaid\` for PR-ready Markdown and \`--format dot\` when you want Graphviz source.
545
+ The \`quiver:version\` script shows the Quiver-branded version report; add \`--json\` for automation while top-level \`--version\` stays semver-only.
546
+ The \`quiver:dashboard\` script shows compact read-only project, spec, slice, run, approval, and agent status by default; use \`--details\` for the full report, \`--section <name>\` for focused inspection, and \`--json\` for automation.
541
547
  The \`quiver:next\` script points to the next ready slice and can auto-start it behind a confirmation prompt.
542
548
  The \`quiver:ai:*\` scripts standardize planner/executor AI flows. Use dry-run first: onboarding and planning dry-runs do not require provider auth, \`quiver:ai:execute-plan -- --dry-run --commit --mode manual\` prints manual prompts, \`--mode delegated\` prints safe waves, \`quiver:ai:inspect\` shows lifecycle state, \`quiver:ai:export -- --format json|markdown\` emits dashboard/agent-friendly state, and \`quiver:ai:pr -- --dry-run\` validates \`gh\`, GitFlow docs, branch/worktree state, SSH inputs, and \`pr.md\` without creating a PR. Add \`--create\` only after reviewing the plan.
543
549
  Use \`quiver:spec:create\`, \`quiver:spec:start\`, \`quiver:spec:status\`, and \`quiver:spec:close\` for one spec generation and worktree per spec.
@@ -181,8 +181,10 @@ function resolveInitVisibleDirectories(profile, projectSlug) {
181
181
  function resolveInitPackageScripts(profile, options = {}) {
182
182
  const baseScripts = {
183
183
  'quiver:migrate': 'npx create-quiver migrate',
184
+ 'quiver:version': 'npx create-quiver version',
184
185
  'quiver:analyze': 'npx create-quiver analyze',
185
186
  'quiver:flow': 'npx create-quiver flow',
187
+ 'quiver:dashboard': 'npx create-quiver dashboard',
186
188
  'quiver:prepare': 'npx create-quiver prepare',
187
189
  'quiver:plan': 'npx create-quiver plan',
188
190
  'quiver:graph': 'npx create-quiver graph',
@@ -83,8 +83,28 @@ function safeBuildGraph(slices, allowGraphErrors) {
83
83
  function resolveProjectState(projectRoot, options = {}) {
84
84
  const specSlug = options.specSlug ? String(options.specSlug).trim() : '';
85
85
  const rawSlices = readResolverSlices(projectRoot, specSlug);
86
- const graph = safeBuildGraph(rawSlices, options.allowGraphErrors === true);
87
- const orderedSlices = graph.ok ? topoSort(graph).map(normalizeSliceRecord) : graph.nodes.slice().sort((left, right) => compareRefs(left.ref, right.ref));
86
+ let graph = safeBuildGraph(rawSlices, options.allowGraphErrors === true);
87
+ let orderedSlices;
88
+
89
+ try {
90
+ orderedSlices = graph.ok ? topoSort(graph).map(normalizeSliceRecord) : graph.nodes.slice().sort((left, right) => compareRefs(left.ref, right.ref));
91
+ } catch (error) {
92
+ if (!options.allowGraphErrors || !(error instanceof SliceGraphError)) {
93
+ throw error;
94
+ }
95
+
96
+ graph = {
97
+ ok: false,
98
+ nodes: inferDependencies(rawSlices).map(normalizeSliceRecord),
99
+ edges: [],
100
+ cycles: Array.isArray(graph.cycles) ? graph.cycles : [],
101
+ error: {
102
+ code: error.code,
103
+ message: error.message,
104
+ },
105
+ };
106
+ orderedSlices = graph.nodes.slice().sort((left, right) => compareRefs(left.ref, right.ref));
107
+ }
88
108
 
89
109
  return {
90
110
  graph,
@@ -0,0 +1,157 @@
1
+ const fs = require('node:fs');
2
+ const path = require('node:path');
3
+
4
+ const { resolveTheme } = require('./cli/theme');
5
+
6
+ const VERSION_SCHEMA_VERSION = 1;
7
+ const PACKAGE_ROOT = path.resolve(__dirname, '../../..');
8
+ const PACKAGE_JSON = JSON.parse(fs.readFileSync(path.join(PACKAGE_ROOT, 'package.json'), 'utf8'));
9
+
10
+ function readJsonIfExists(filePath) {
11
+ if (!fs.existsSync(filePath)) {
12
+ return null;
13
+ }
14
+
15
+ try {
16
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
17
+ } catch {
18
+ return null;
19
+ }
20
+ }
21
+
22
+ function parsePackageManagerField(value) {
23
+ const text = String(value || '').trim();
24
+ if (!text) return null;
25
+ const [name, version] = text.split('@');
26
+ return {
27
+ name: name || null,
28
+ version: version || null,
29
+ source: 'package.json',
30
+ };
31
+ }
32
+
33
+ function parseUserAgent(value) {
34
+ const text = String(value || '').trim();
35
+ if (!text) return null;
36
+ const first = text.split(/\s+/)[0] || '';
37
+ const [name, version] = first.split('/');
38
+ if (!name) return null;
39
+ return {
40
+ name,
41
+ version: version || null,
42
+ source: 'npm_config_user_agent',
43
+ };
44
+ }
45
+
46
+ function detectPackageManager(projectRoot, env = process.env) {
47
+ const packageJson = readJsonIfExists(path.join(projectRoot, 'package.json'));
48
+ const packageManagerField = parsePackageManagerField(packageJson?.packageManager);
49
+ if (packageManagerField) return packageManagerField;
50
+
51
+ const signals = [
52
+ ['bun', 'bun.lockb'],
53
+ ['bun', 'bun.lock'],
54
+ ['pnpm', 'pnpm-lock.yaml'],
55
+ ['yarn', 'yarn.lock'],
56
+ ['npm', 'package-lock.json'],
57
+ ];
58
+
59
+ for (const [name, filename] of signals) {
60
+ if (fs.existsSync(path.join(projectRoot, filename))) {
61
+ return { name, version: null, source: filename };
62
+ }
63
+ }
64
+
65
+ return parseUserAgent(env.npm_config_user_agent) || {
66
+ name: 'unknown',
67
+ version: null,
68
+ source: 'none',
69
+ };
70
+ }
71
+
72
+ function collectProjectInfo(projectRoot) {
73
+ const packageJson = readJsonIfExists(path.join(projectRoot, 'package.json'));
74
+ const state = readJsonIfExists(path.join(projectRoot, '.quiver', 'state.json'));
75
+ const hasProjectSignals = Boolean(packageJson || state);
76
+
77
+ if (!hasProjectSignals) {
78
+ return {
79
+ name: null,
80
+ path: null,
81
+ quiver_initialized: false,
82
+ quiver_version: null,
83
+ };
84
+ }
85
+
86
+ return {
87
+ name: packageJson?.name || state?.project_name || path.basename(projectRoot),
88
+ path: projectRoot,
89
+ quiver_initialized: Boolean(state?.initialized_version || state?.quiver_version),
90
+ quiver_version: state?.quiver_version || state?.initialized_version || null,
91
+ };
92
+ }
93
+
94
+ function collectVersionReport(projectRoot = process.cwd(), options = {}) {
95
+ return {
96
+ version_schema_version: VERSION_SCHEMA_VERSION,
97
+ cli: {
98
+ name: PACKAGE_JSON.name || 'create-quiver',
99
+ version: options.cliVersion || PACKAGE_JSON.version || '0.0.0',
100
+ },
101
+ runtime: {
102
+ node: process.version,
103
+ platform: process.platform,
104
+ arch: process.arch,
105
+ },
106
+ package_manager: detectPackageManager(projectRoot, options.env || process.env),
107
+ project: collectProjectInfo(projectRoot),
108
+ };
109
+ }
110
+
111
+ function formatPackageManager(packageManager) {
112
+ if (!packageManager?.name || packageManager.name === 'unknown') {
113
+ return 'unknown';
114
+ }
115
+ return packageManager.version ? `${packageManager.name}@${packageManager.version}` : packageManager.name;
116
+ }
117
+
118
+ function quiverBanner(theme) {
119
+ const lines = [
120
+ ' ___ _ ',
121
+ ' / _ \\ _ _(_)_ _____ _ __ ',
122
+ '| | | | | | | \\ \\ / / _ \\ \'__|',
123
+ '| |_| | |_| | |\\ V / __/ | ',
124
+ ' \\__\\_\\\\__,_|_| \\_/ \\___|_| ',
125
+ ];
126
+ const colors = ['sky', 'blue', 'periwinkle', 'violet', 'magenta'];
127
+ return lines.map((line, index) => theme.colorize(line, colors[index])).join('\n');
128
+ }
129
+
130
+ function formatHumanVersionReport(report, options = {}) {
131
+ const theme = resolveTheme({ noColor: options.noColor }, options.env || process.env, {
132
+ stdout: options.stdoutIsTTY ?? Boolean(process.stdout.isTTY),
133
+ });
134
+ const project = report.project?.name
135
+ ? `${report.project.name}${report.project.quiver_initialized ? ' (Quiver project)' : ''}`
136
+ : 'none';
137
+ const lines = [
138
+ quiverBanner(theme),
139
+ '',
140
+ `Quiver CLI: ${report.cli.version}`,
141
+ `Node: ${report.runtime.node}`,
142
+ `Package manager: ${formatPackageManager(report.package_manager)}`,
143
+ `OS: ${report.runtime.platform} ${report.runtime.arch}`,
144
+ `Project: ${project}`,
145
+ '',
146
+ ];
147
+
148
+ return `${lines.join('\n')}`;
149
+ }
150
+
151
+ module.exports = {
152
+ VERSION_SCHEMA_VERSION,
153
+ collectVersionReport,
154
+ detectPackageManager,
155
+ formatHumanVersionReport,
156
+ quiverBanner,
157
+ };