@polymorphism-tech/morph-spec 4.8.17 → 4.8.18

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  > Spec-driven development framework for multi-stack projects. Turns feature requests into implementation-ready code through structured, AI-orchestrated phases.
4
4
 
5
5
  **Package:** `@polymorphism-tech/morph-spec`
6
- **Version:** 4.8.17
6
+ **Version:** 4.8.18
7
7
  **Requires:** Node.js 18+, Claude Code
8
8
 
9
9
  ---
@@ -376,4 +376,4 @@ Code generated by morph-spec (contracts, templates, implementation output) belon
376
376
 
377
377
  ---
378
378
 
379
- *morph-spec v4.8.17 by [Polymorphism Tech](https://polymorphism.tech)*
379
+ *morph-spec v4.8.18 by [Polymorphism Tech](https://polymorphism.tech)*
package/bin/morph-spec.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import { program } from 'commander';
4
4
  import chalk from 'chalk';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "morph-spec",
3
- "version": "4.8.17",
3
+ "version": "4.8.18",
4
4
  "displayName": "MORPH-SPEC Framework",
5
5
  "description": "Spec-driven development with 38 agents and 8-phase workflow for .NET/Blazor/Next.js/Azure",
6
6
  "publisher": "polymorphism-tech",
@@ -200,4 +200,4 @@ These files are never edited directly. Use CLI commands or `morph-spec update` i
200
200
 
201
201
  ---
202
202
 
203
- *morph-spec v4.8.17 by Polymorphism Tech*
203
+ *morph-spec v4.8.18 by Polymorphism Tech*
@@ -203,4 +203,4 @@ morph-spec doctor
203
203
 
204
204
  ---
205
205
 
206
- *morph-spec v4.8.17 by Polymorphism Tech*
206
+ *morph-spec v4.8.18 by Polymorphism Tech*
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 3 (Clarify). Reviews spec.md for ambiguities, gene
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.17"
7
+ cliVersion: "4.8.18"
8
8
  ---
9
9
 
10
10
  # MORPH Clarify - FASE 3
@@ -3,7 +3,7 @@ name: phase-codebase-analysis
3
3
  description: MORPH-SPEC Design sub-phase that analyzes existing codebase and database schema, producing schema-analysis.md with real column names, types, relationships, and field mismatches. Use at the start of Design phase before generating contracts.cs to prevent incorrect field names or types.
4
4
  user-invocable: false
5
5
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
- cliVersion: "4.8.17"
6
+ cliVersion: "4.8.18"
7
7
  ---
8
8
 
9
9
  # MORPH Codebase Analysis - Sub-fase de DESIGN
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 2 (Design). Analyzes codebase/schema, then produce
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.17"
7
+ cliVersion: "4.8.18"
8
8
  ---
9
9
 
10
10
  # MORPH Design - FASE 2
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  context: fork
7
7
  agent: general-purpose
8
8
  user-invocable: false
9
- cliVersion: "4.8.17"
9
+ cliVersion: "4.8.18"
10
10
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
11
11
  ---
12
12
 
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 1 (Setup). Reads project context, detects tech sta
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.17"
7
+ cliVersion: "4.8.18"
8
8
  ---
9
9
 
10
10
  # MORPH Setup - FASE 1
@@ -5,7 +5,7 @@ argument-hint: "[feature-name]"
5
5
  disable-model-invocation: true
6
6
  user-invocable: false
7
7
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
8
- cliVersion: "4.8.17"
8
+ cliVersion: "4.8.18"
9
9
  ---
10
10
 
11
11
  # MORPH Tasks - FASE 4
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 1.5 (UI/UX). Creates design-system.md, mockups.md,
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.17"
7
+ cliVersion: "4.8.18"
8
8
  ---
9
9
 
10
10
  # MORPH UI/UX Design - FASE 1.5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polymorphism-tech/morph-spec",
3
- "version": "4.8.17",
3
+ "version": "4.8.18",
4
4
  "description": "MORPH-SPEC: AI-First development framework with validation pipeline and multi-stack support",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -30,17 +30,29 @@ export async function installGlobalSkill(claudeDir = join(homedir(), '.claude'))
30
30
  // Run as postinstall script
31
31
  if (process.argv[1] === fileURLToPath(import.meta.url)) {
32
32
  const HOOKS_SRC = join(FRAMEWORK_DIR, 'hooks', 'claude-code');
33
+ const { readFileSync } = await import('fs');
34
+ const pkg = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
33
35
 
34
- await Promise.allSettled([
35
- installGlobalSkill()
36
- .then(() => console.log('✓ morph-init skill installed to ~/.claude/skills/')),
37
- installGlobalStatusline(HOOKS_SRC)
38
- .then(() => console.log('✓ statusline installed to ~/.claude/')),
39
- ]).then(results => {
40
- for (const r of results) {
41
- if (r.status === 'rejected') {
42
- console.warn(' postinstall warning:', r.reason?.message || r.reason);
43
- }
44
- }
45
- });
36
+ const [skillResult, statuslineResult] = await Promise.allSettled([
37
+ installGlobalSkill(),
38
+ installGlobalStatusline(HOOKS_SRC),
39
+ ]);
40
+
41
+ const results = [
42
+ {
43
+ ok: skillResult.status === 'fulfilled',
44
+ label: 'morph-init skill',
45
+ path: '~/.claude/skills/',
46
+ error: skillResult.reason?.message,
47
+ },
48
+ {
49
+ ok: statuslineResult.status === 'fulfilled',
50
+ label: 'statusline',
51
+ path: '~/.claude/',
52
+ error: statuslineResult.reason?.message,
53
+ },
54
+ ];
55
+
56
+ const { printInstallBanner } = await import('../utils/banner.js');
57
+ printInstallBanner({ version: pkg.version, nodeVersion: process.version, results });
46
58
  }
@@ -0,0 +1,51 @@
1
+ // src/utils/banner.js
2
+ import chalk from 'chalk';
3
+ import { type as osType, release as osRelease } from 'os';
4
+
5
+ const BRAND = chalk.hex('#7C3AED');
6
+ const DIM = chalk.dim;
7
+
8
+ function platformLabel() {
9
+ const t = osType();
10
+ const r = osRelease().split('.').slice(0, 2).join('.');
11
+ if (t === 'Windows_NT') return `Windows ${r}`;
12
+ if (t === 'Darwin') return `macOS ${r}`;
13
+ return `Linux ${r}`;
14
+ }
15
+
16
+ export function printInstallBanner({ version, nodeVersion, results = [] }) {
17
+ const TITLE = '◆ M O R P H - S P E C';
18
+ const pad = ` ${TITLE} `;
19
+ const line = '─'.repeat(pad.length);
20
+
21
+ const box = [
22
+ BRAND(`┌${line}┐`),
23
+ BRAND('│') + chalk.bold.white(pad) + BRAND('│'),
24
+ BRAND(`└${line}┘`),
25
+ ].join('\n');
26
+
27
+ const sep = (label) => DIM(` ── ${label} ${'─'.repeat(Math.max(0, 30 - label.length))}`);
28
+
29
+ const itemLines = results.map(r =>
30
+ r.ok
31
+ ? ` ${chalk.green('✔')} ${r.label.padEnd(20)} ${DIM(r.path)}`
32
+ : ` ${chalk.red('✖')} ${r.label.padEnd(20)} ${chalk.red(r.error ?? 'failed')}`
33
+ );
34
+
35
+ console.log([
36
+ '',
37
+ box,
38
+ '',
39
+ ` Version ${chalk.white(version)}`,
40
+ ` Platform ${chalk.white(platformLabel())}`,
41
+ ` Node ${chalk.white(nodeVersion)}`,
42
+ '',
43
+ sep('Installed'),
44
+ ...itemLines,
45
+ '',
46
+ sep('Next'),
47
+ ` ${chalk.cyan('1.')} Open your project in Claude Code`,
48
+ ` ${chalk.cyan('2.')} Run ${chalk.bold.white('/morph-init')}`,
49
+ '',
50
+ ].join('\n'));
51
+ }