@nowline/mcp 0.7.0 → 0.8.0

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 (44) hide show
  1. package/dist/branding.d.ts +20 -0
  2. package/dist/branding.d.ts.map +1 -0
  3. package/dist/branding.js +27 -0
  4. package/dist/branding.js.map +1 -0
  5. package/dist/diagnostics.d.ts +59 -0
  6. package/dist/diagnostics.d.ts.map +1 -0
  7. package/dist/diagnostics.js +117 -0
  8. package/dist/diagnostics.js.map +1 -0
  9. package/dist/generated/ui-bundle.d.ts +2 -0
  10. package/dist/generated/ui-bundle.d.ts.map +1 -1
  11. package/dist/generated/ui-bundle.js +4 -3
  12. package/dist/generated/ui-bundle.js.map +1 -1
  13. package/dist/reference-cheatsheet.d.ts +2 -0
  14. package/dist/reference-cheatsheet.d.ts.map +1 -0
  15. package/dist/reference-cheatsheet.js +47 -0
  16. package/dist/reference-cheatsheet.js.map +1 -0
  17. package/dist/schema-vocab.d.ts +6 -0
  18. package/dist/schema-vocab.d.ts.map +1 -0
  19. package/dist/schema-vocab.js +55 -0
  20. package/dist/schema-vocab.js.map +1 -0
  21. package/dist/schemas.d.ts +52 -0
  22. package/dist/schemas.d.ts.map +1 -1
  23. package/dist/schemas.js +24 -1
  24. package/dist/schemas.js.map +1 -1
  25. package/dist/server.d.ts +2 -0
  26. package/dist/server.d.ts.map +1 -1
  27. package/dist/server.js +312 -165
  28. package/dist/server.js.map +1 -1
  29. package/dist/ui/entry.js +148 -110
  30. package/dist/ui/entry.js.map +1 -1
  31. package/dist/ui/payload.d.ts +30 -0
  32. package/dist/ui/payload.d.ts.map +1 -0
  33. package/dist/ui/payload.js +49 -0
  34. package/dist/ui/payload.js.map +1 -0
  35. package/package.json +11 -7
  36. package/src/branding.ts +26 -0
  37. package/src/diagnostics.ts +185 -0
  38. package/src/generated/ui-bundle.ts +5 -3
  39. package/src/reference-cheatsheet.ts +47 -0
  40. package/src/schema-vocab.ts +55 -0
  41. package/src/schemas.ts +28 -1
  42. package/src/server.ts +419 -200
  43. package/src/ui/entry.ts +167 -122
  44. package/src/ui/payload.ts +63 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Nowline MCP branding icons (MCP spec icons on Implementation / Tool / Prompt).
3
+ *
4
+ * Source assets:
5
+ * - PNG: branding/marketplace-publisher-icon.png (128x128)
6
+ * - SVG: branding/favicon.svg
7
+ *
8
+ * Regenerate data URIs after asset changes:
9
+ * base64 -i branding/marketplace-publisher-icon.png | tr -d '\n'
10
+ *
11
+ * Per-tool / per-prompt icons: add icons: NOWLINE_MCP_ICONS to each registerTool /
12
+ * registerPrompt config once @modelcontextprotocol/sdk exposes icons on those config types
13
+ * (SDK 1.29.0 registerTool config does not include icons yet).
14
+ */
15
+ export declare const NOWLINE_MCP_ICONS: {
16
+ src: string;
17
+ mimeType: string;
18
+ sizes: string[];
19
+ }[];
20
+ //# sourceMappingURL=branding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB;;;;GAW7B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Nowline MCP branding icons (MCP spec icons on Implementation / Tool / Prompt).
3
+ *
4
+ * Source assets:
5
+ * - PNG: branding/marketplace-publisher-icon.png (128x128)
6
+ * - SVG: branding/favicon.svg
7
+ *
8
+ * Regenerate data URIs after asset changes:
9
+ * base64 -i branding/marketplace-publisher-icon.png | tr -d '\n'
10
+ *
11
+ * Per-tool / per-prompt icons: add icons: NOWLINE_MCP_ICONS to each registerTool /
12
+ * registerPrompt config once @modelcontextprotocol/sdk exposes icons on those config types
13
+ * (SDK 1.29.0 registerTool config does not include icons yet).
14
+ */
15
+ export const NOWLINE_MCP_ICONS = [
16
+ {
17
+ src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAADkklEQVR4nO3cS0ojQBSF4bJpESEZBKHdQLKALCBz3UFm6i4UM8zAYTYg6iw7cAFxF3EDTtqGhLZB0K4bKBqq0EbNo+4555/k1vh8PkbZeo0FRZsAkCcA5AkAeQJAngCQJwDkCQB5AkCeAJAnAOQJAHkCQJ4AkCcA5AkAeQJAngCQJwDkUQJ4nk7D7OZm8WltdzqheXS0+GSLDsDTZBIeB4N4lbWGw7Db68WLJyoAL7NZeOj3w+t8Hl9lW41G2B+Pw7dmM744ogLw3k9/am80Cjvdbrw4ogIwu7oKs+vr8F7N4+PQPDmJF0cCkCUAwAlAmQBkCQBwAlAmAFkCAJwAlAlAlgAAJwBlApAlAMAJQJkAZAkAcAJQJgBZAgCcAJQJQJYAACcAZQKQJQDA/Tw/D3/u7uL1dt/b7fDj8jJeHNEA+H17G35dXMTr/+0eHobW6Wm88KMA8JHxUywI4AF8ZvwUAwJoAF8ZP4WOABbAMsZPISOABLDM8VOoCOAArGL8FCICKACrHD+FhgAGwDrGTyEhgACwzvFTKAjcA9jE+CkEBK4BbHL8lHcEbgHUMH7KMwKXAGoaP+UVgTsANY6f8ojAFYCax095Q+AGgIfxU54QuADgafyUFwTVA/A4fsoDgqoBeB4/VTuCagEgjJ+qGUGVAJDGT9WKQADW1O7BQWidncWrrqoEYCEhqHV8q1oAFgKCmse3qgZgeUZQ+/hW9QAsjwg8jG+5AGB5QuBlfMsNAMsDAk/jW64AWDUj8Da+5Q6AVSMCj+NbLgFYNSHwOr7lFoBVAwLP41uuAVibROB9fMs9AGsTCBDGtyAAWOtEgDK+BQPAWgcCpPEtKADWKhGgjW/BAbBWgQBxfAsSgLVMBKjjW7AArGUgQB7fggZgfQUB+vgWPADrMwgYxrcoAFgfQcAyvkUDwNKXRZdRAdDXxZcJQJYAACcAZQKQJQDACUCZAGQJAHACUCYAWQIAnACUCUCWAAAnAGUCkCUAwAlAmQBkCQBwAlAmAFkCAJwAlAlAlgAA9zSZhMfBIF5vtzcahZ1uN14cUQF4mc3CQ78fXufz+CrbajTC/ngcvjWb8cURFQDrvd8CreEw7PZ68eKJDoD1PJ0u/hd4vr+PrxC22+3F3/7tTie+uKIEoP4lAOQJAHkCQJ4AkCcA5AkAeQJAngCQJwDkCQB5AkCeAJAnAOQJAHkCQJ4AkCcA5AkAeX8BD/cmvdMOoX4AAAAASUVORK5CYII=',
18
+ mimeType: 'image/png',
19
+ sizes: ['128x128'],
20
+ },
21
+ {
22
+ src: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIj4KICA8IS0tIE5vd2xpbmUgc3RhbmRhbG9uZSBtYXJrOiByZWQgbm93LWxpbmUgKyBkaWFtb25kIC0tPgogIDxyZWN0IHg9IjE0LjUiIHk9IjEiIHdpZHRoPSIzIiBoZWlnaHQ9IjMwIiByeD0iMS41IiBmaWxsPSIjZTUzZTNlIi8+CiAgPHBvbHlnb24gcG9pbnRzPSIxNiw3IDI1LDE2IDE2LDI1IDcsMTYiIGZpbGw9IiNlNTNlM2UiLz4KPC9zdmc+Cg==',
23
+ mimeType: 'image/svg+xml',
24
+ sizes: ['any'],
25
+ },
26
+ ];
27
+ //# sourceMappingURL=branding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branding.js","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B;QACI,GAAG,EAAE,wyCAAwyC;QAC7yC,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,CAAC,SAAS,CAAC;KACrB;IACD;QACI,GAAG,EAAE,oZAAoZ;QACzZ,QAAQ,EAAE,eAAe;QACzB,KAAK,EAAE,CAAC,KAAK,CAAC;KACjB;CACJ,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { type NowlineFile } from '@nowline/core';
2
+ import { type LayoutInsight } from '@nowline/layout';
3
+ export interface McpDiagnostic {
4
+ file: string;
5
+ line: number;
6
+ column: number;
7
+ severity: 'error' | 'warning' | 'info';
8
+ code: string;
9
+ message: string;
10
+ suggestion?: string;
11
+ }
12
+ export interface McpInsight {
13
+ severity: 'info' | 'warning';
14
+ code: string;
15
+ message: string;
16
+ entityId?: string;
17
+ }
18
+ export declare function layoutInsightToMcp(insight: LayoutInsight): McpInsight;
19
+ export declare function getMcpServices(): {
20
+ shared: import("langium").LangiumSharedCoreServices;
21
+ Nowline: import("@nowline/core").NowlineServices;
22
+ };
23
+ export declare function buildDocument(source: string): Promise<import("langium").LangiumDocument<NowlineFile>>;
24
+ export declare function collectMcpDiagnostics(doc: Awaited<ReturnType<typeof buildDocument>>, filePath: string): McpDiagnostic[];
25
+ export declare function diagnosticsErrorResponse(filePath: string, diagnostics: McpDiagnostic[]): {
26
+ content: {
27
+ type: "text";
28
+ text: string;
29
+ }[];
30
+ isError: true;
31
+ };
32
+ export declare function diagnosticsErrorBlock(source: string, filePath: string): Promise<{
33
+ ok: true;
34
+ doc: Awaited<ReturnType<typeof buildDocument>>;
35
+ } | {
36
+ ok: false;
37
+ response: ReturnType<typeof diagnosticsErrorResponse>;
38
+ }>;
39
+ export interface LayoutInsightInputs {
40
+ source: string;
41
+ filePath: string;
42
+ today?: Date;
43
+ theme?: 'light' | 'dark' | 'grayscale';
44
+ width?: number;
45
+ locale?: string;
46
+ readFile?: (absPath: string) => Promise<string>;
47
+ /** Pre-built document to reuse instead of re-parsing `source`. The
48
+ * caller is responsible for passing a doc parsed from the same
49
+ * `source` (e.g. the one from `diagnosticsErrorBlock`). */
50
+ doc?: Awaited<ReturnType<typeof buildDocument>>;
51
+ }
52
+ export declare function collectMcpLayoutInsights(inputs: LayoutInsightInputs): Promise<McpInsight[]>;
53
+ export declare const LAYOUT_INSIGHT_HINT: string;
54
+ export declare const REVIEW_MAX_WIDTH = 1024;
55
+ export declare const DEFAULT_RENDER_WIDTH = 1280;
56
+ export declare const DSL_SYNTAX_POINTER = "Source is `.nowline` DSL (not JSON/YAML); call the `reference`/`examples` tools for full syntax.";
57
+ export declare const DSL_SYNTAX_EXAMPLE = "nowline v1\n\nroadmap r \"Title\" start:2026-01-05 scale:2w\n\nswimlane eng \"Engineering\"\n item build \"Build\" duration:3w";
58
+ export declare function toolDescriptionWithSyntax(base: string): string;
59
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAEA,OAAO,EAIH,KAAK,WAAW,EAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAyB,KAAK,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAG3F,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAOrE;AAKD,wBAAgB,cAAc;;;EAG7B;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,2DASjD;AAED,wBAAgB,qBAAqB,CACjC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,EAC9C,QAAQ,EAAE,MAAM,GACjB,aAAa,EAAE,CA8BjB;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;;;;;;EAUtF;AAED,wBAAsB,qBAAqB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACjB,OAAO,CACJ;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;CAAE,CACzE,CAOA;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD;;gEAE4D;IAC5D,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;CACnD;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA4BjG;AAED,eAAO,MAAM,mBAAmB,QAEiC,CAAC;AAElE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,eAAO,MAAM,kBAAkB,qGACuE,CAAC;AAEvG,eAAO,MAAM,kBAAkB,oIAKE,CAAC;AAElC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,117 @@
1
+ // MCP diagnostic helpers — maps Langium/core diagnostics to the MCP tool shape.
2
+ import { collectDocumentDiagnostics, createNowlineServices, extractSuggestion, resolveDiagnosticCode, resolveIncludes, } from '@nowline/core';
3
+ import { collectLayoutInsights, layoutRoadmap } from '@nowline/layout';
4
+ import { URI } from 'langium';
5
+ export function layoutInsightToMcp(insight) {
6
+ return {
7
+ severity: insight.severity,
8
+ code: insight.code,
9
+ message: insight.message,
10
+ entityId: insight.entityId,
11
+ };
12
+ }
13
+ let cachedServices;
14
+ let docCounter = 0;
15
+ export function getMcpServices() {
16
+ if (!cachedServices)
17
+ cachedServices = createNowlineServices();
18
+ return cachedServices;
19
+ }
20
+ export async function buildDocument(source) {
21
+ const services = getMcpServices();
22
+ const uri = URI.parse(`memory:///mcp-${++docCounter}.nowline`);
23
+ const doc = services.shared.workspace.LangiumDocumentFactory.fromString(source, uri);
24
+ await services.shared.workspace.DocumentBuilder.build([doc], { validation: true });
25
+ return doc;
26
+ }
27
+ export function collectMcpDiagnostics(doc, filePath) {
28
+ const raw = collectDocumentDiagnostics(doc);
29
+ const out = [];
30
+ for (const d of raw) {
31
+ if (d.origin === 'lexer' || d.origin === 'parser') {
32
+ out.push({
33
+ file: filePath,
34
+ line: 1,
35
+ column: 1,
36
+ severity: 'error',
37
+ code: d.origin === 'lexer' ? 'lexing-error' : 'parsing-error',
38
+ message: d.error.message,
39
+ });
40
+ }
41
+ else {
42
+ const diag = d.diagnostic;
43
+ const range = diag.range;
44
+ const severity = diag.severity === 2 ? 'warning' : diag.severity === 3 ? 'info' : 'error';
45
+ out.push({
46
+ file: filePath,
47
+ line: (range?.start.line ?? 0) + 1,
48
+ column: (range?.start.character ?? 0) + 1,
49
+ severity,
50
+ code: resolveDiagnosticCode(diag),
51
+ message: diag.message,
52
+ suggestion: extractSuggestion(diag.message),
53
+ });
54
+ }
55
+ }
56
+ return out;
57
+ }
58
+ export function diagnosticsErrorResponse(filePath, diagnostics) {
59
+ return {
60
+ content: [
61
+ {
62
+ type: 'text',
63
+ text: JSON.stringify({ ok: false, path: filePath, diagnostics }, null, 2),
64
+ },
65
+ ],
66
+ isError: true,
67
+ };
68
+ }
69
+ export async function diagnosticsErrorBlock(source, filePath) {
70
+ const doc = await buildDocument(source);
71
+ const diagnostics = collectMcpDiagnostics(doc, filePath);
72
+ if (diagnostics.some((d) => d.severity === 'error')) {
73
+ return { ok: false, response: diagnosticsErrorResponse(filePath, diagnostics) };
74
+ }
75
+ return { ok: true, doc };
76
+ }
77
+ export async function collectMcpLayoutInsights(inputs) {
78
+ const doc = inputs.doc ?? (await buildDocument(inputs.source));
79
+ const diagnostics = collectMcpDiagnostics(doc, inputs.filePath);
80
+ if (diagnostics.some((d) => d.severity === 'error')) {
81
+ return [];
82
+ }
83
+ const services = getMcpServices();
84
+ const file = doc.parseResult.value;
85
+ const resolved = await resolveIncludes(file, inputs.filePath, {
86
+ services: services.Nowline,
87
+ readFile: inputs.readFile,
88
+ });
89
+ if (resolved.diagnostics.some((d) => d.severity === 'error')) {
90
+ return [];
91
+ }
92
+ const layout = layoutRoadmap(file, resolved, {
93
+ today: inputs.today,
94
+ theme: inputs.theme ?? 'light',
95
+ width: inputs.width,
96
+ locale: inputs.locale ?? 'en-US',
97
+ });
98
+ return collectLayoutInsights(layout, {
99
+ today: inputs.today,
100
+ locale: inputs.locale ?? 'en-US',
101
+ }).map(layoutInsightToMcp);
102
+ }
103
+ export const LAYOUT_INSIGHT_HINT = 'These are layout consequences, not errors — the roadmap rendered. ' +
104
+ 'To see the visual result, call `render` with `review:true`.';
105
+ export const REVIEW_MAX_WIDTH = 1024;
106
+ export const DEFAULT_RENDER_WIDTH = 1280;
107
+ export const DSL_SYNTAX_POINTER = 'Source is `.nowline` DSL (not JSON/YAML); call the `reference`/`examples` tools for full syntax.';
108
+ export const DSL_SYNTAX_EXAMPLE = `nowline v1
109
+
110
+ roadmap r "Title" start:2026-01-05 scale:2w
111
+
112
+ swimlane eng "Engineering"
113
+ item build "Build" duration:3w`;
114
+ export function toolDescriptionWithSyntax(base) {
115
+ return `${base}\n\nExample:\n${DSL_SYNTAX_EXAMPLE}\n\n${DSL_SYNTAX_POINTER}`;
116
+ }
117
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  /** Self-contained browser IIFE for the MCP Apps in-chat live preview. */
2
2
  export declare const UI_BUNDLE: string;
3
+ /** Static text/html;profile=mcp-app document for the ui:// preview resource. */
4
+ export declare const PREVIEW_HTML: string;
3
5
  //# sourceMappingURL=ui-bundle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-bundle.d.ts","sourceRoot":"","sources":["../../src/generated/ui-bundle.ts"],"names":[],"mappings":"AAQA,yEAAyE;AACzE,eAAO,MAAM,SAAS,EAAE,MAAo+5rB,CAAC"}
1
+ {"version":3,"file":"ui-bundle.d.ts","sourceRoot":"","sources":["../../src/generated/ui-bundle.ts"],"names":[],"mappings":"AAOA,yEAAyE;AACzE,eAAO,MAAM,SAAS,EAAE,MAA664lC,CAAC;AAEt84lC,gFAAgF;AAChF,eAAO,MAAM,YAAY,EAAE,MAAmy5lC,CAAC"}