noteconnection 1.7.0 → 1.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 (211) hide show
  1. package/LICENSE +674 -21
  2. package/README.md +242 -62
  3. package/dist/src/agent_workspace.contract.parity.test.js +475 -0
  4. package/dist/src/agent_workspace.frontend.test.js +9989 -0
  5. package/dist/src/agent_workspace.locale.contract.test.js +95 -0
  6. package/dist/src/agent_workspace.runtime.behavior.test.js +5072 -0
  7. package/dist/src/copy.assets.contract.test.js +130 -0
  8. package/dist/src/core/PathBridge.js +28 -3
  9. package/dist/src/export/WorkspaceExportBundle.js +1130 -0
  10. package/dist/src/export/WorkspaceExportBundle.test.js +1480 -0
  11. package/dist/src/export/index.js +18 -0
  12. package/dist/src/export/types.js +2 -0
  13. package/dist/src/fixrisk.issue.verifier.contract.test.js +3 -1
  14. package/dist/src/foundation.ann.runtime.contract.test.js +81 -0
  15. package/dist/src/foundation.release.evidence.contract.test.js +406 -0
  16. package/dist/src/foundation.sqlite.runtime.contract.test.js +82 -0
  17. package/dist/src/frontend/README.md +242 -62
  18. package/dist/src/frontend/agent_workspace.js +5353 -0
  19. package/dist/src/frontend/agent_workspace_runtime.js +4434 -0
  20. package/dist/src/frontend/analysis.js +31 -4
  21. package/dist/src/frontend/app.js +2178 -62
  22. package/dist/src/frontend/focus_mode_interactions.js +33 -0
  23. package/dist/src/frontend/godot_future_path_renderer.js +540 -0
  24. package/dist/src/frontend/godot_tree_interactions.js +178 -0
  25. package/dist/src/frontend/graph_state.mjs +105 -0
  26. package/dist/src/frontend/hosted_future_path_runtime.js +157 -0
  27. package/dist/src/frontend/i18n.mjs +186 -0
  28. package/dist/src/frontend/index.html +641 -266
  29. package/dist/src/frontend/layout_gpu.js +12 -4
  30. package/dist/src/frontend/locales/en.json +721 -5
  31. package/dist/src/frontend/locales/zh.json +721 -5
  32. package/dist/src/frontend/main.mjs +60 -0
  33. package/dist/src/frontend/markdown_runtime.js +827 -0
  34. package/dist/src/frontend/notemd.css +49 -0
  35. package/dist/src/frontend/notemd.html +7 -1
  36. package/dist/src/frontend/notemd.js +64 -0
  37. package/dist/src/frontend/path.html +107 -0
  38. package/dist/src/frontend/path_app.js +2108 -130
  39. package/dist/src/frontend/path_layout.mjs +143 -0
  40. package/dist/src/frontend/path_mermaid_utils.mjs +108 -0
  41. package/dist/src/frontend/path_modules_bridge.js +486 -0
  42. package/dist/src/frontend/path_state.mjs +118 -0
  43. package/dist/src/frontend/path_styles.css +146 -0
  44. package/dist/src/frontend/path_worker_bridge.mjs +85 -0
  45. package/dist/src/frontend/reader.js +393 -33
  46. package/dist/src/frontend/runtime_bridge.js +67 -54
  47. package/dist/src/frontend/runtime_bridge.mjs +279 -0
  48. package/dist/src/frontend/settings.js +130 -12
  49. package/dist/src/frontend/source_manager.js +190 -21
  50. package/dist/src/frontend/styles.css +2720 -72
  51. package/dist/src/frontend/workbench_state.mjs +101 -0
  52. package/dist/src/frontend/workspace_panes.js +10168 -0
  53. package/dist/src/frontend.locale.contract.test.js +62 -0
  54. package/dist/src/godot.sidecar.bootstrap.contract.test.js +244 -0
  55. package/dist/src/indexing/IndexLifecycle.js +195 -0
  56. package/dist/src/indexing/IndexLifecycle.test.js +49 -0
  57. package/dist/src/indexing/SegmentBuilder.js +64 -0
  58. package/dist/src/indexing/UnitBuilder.js +48 -0
  59. package/dist/src/indexing/types.js +2 -0
  60. package/dist/src/knowledge.api.contract.test.js +170 -0
  61. package/dist/src/learning/KnowledgeLearningPlatform.js +10386 -0
  62. package/dist/src/learning/KnowledgeLearningPlatform.persistence.test.js +327 -0
  63. package/dist/src/learning/KnowledgeLearningPlatform.program-f.test.js +99 -0
  64. package/dist/src/learning/KnowledgeLearningPlatform.test.js +2971 -0
  65. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.js +2974 -0
  66. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.test.js +3928 -0
  67. package/dist/src/learning/answerReleaseReview.js +4319 -0
  68. package/dist/src/learning/answerReleaseReview.test.js +2888 -0
  69. package/dist/src/learning/api.js +2 -0
  70. package/dist/src/learning/conversationComposer.js +1480 -0
  71. package/dist/src/learning/conversationComposer.test.js +1817 -0
  72. package/dist/src/learning/domains/ConversationManager.js +53 -0
  73. package/dist/src/learning/domains/KnowledgeIngestor.js +238 -0
  74. package/dist/src/learning/domains/KnowledgeQuerier.js +187 -0
  75. package/dist/src/learning/domains/MasteryEngine.js +387 -0
  76. package/dist/src/learning/domains/MemoryPolicyManager.js +408 -0
  77. package/dist/src/learning/domains/QualityEvaluator.js +307 -0
  78. package/dist/src/learning/domains/TutorRouter.js +313 -0
  79. package/dist/src/learning/domains/index.js +33 -0
  80. package/dist/src/learning/domains/types.js +7 -0
  81. package/dist/src/learning/errors.js +29 -0
  82. package/dist/src/learning/evidenceContextAssembler.js +1176 -0
  83. package/dist/src/learning/evidenceContextAssembler.test.js +6332 -0
  84. package/dist/src/learning/graphContextAssembler.js +870 -0
  85. package/dist/src/learning/graphContextAssembler.test.js +1033 -0
  86. package/dist/src/learning/index.js +28 -0
  87. package/dist/src/learning/queryBackend.js +1898 -0
  88. package/dist/src/learning/queryBackend.test.js +955 -0
  89. package/dist/src/learning/ragContextPack.js +257 -0
  90. package/dist/src/learning/ragContextPack.test.js +160 -0
  91. package/dist/src/learning/ragPublicText.js +38 -0
  92. package/dist/src/learning/ragSufficiencyJudge.js +161 -0
  93. package/dist/src/learning/ragSufficiencyJudge.test.js +177 -0
  94. package/dist/src/learning/ragSufficiencyProviderJudge.js +227 -0
  95. package/dist/src/learning/ragSufficiencyProviderJudge.test.js +156 -0
  96. package/dist/src/learning/requestNormalization.js +198 -0
  97. package/dist/src/learning/runtimeCapability.js +4677 -0
  98. package/dist/src/learning/runtimeCapability.test.js +3635 -0
  99. package/dist/src/learning/store.js +1240 -0
  100. package/dist/src/learning/store.test.js +1126 -0
  101. package/dist/src/learning/tutorAdapter.js +2 -0
  102. package/dist/src/learning/types.js +2 -0
  103. package/dist/src/learning/vectorAccelerationAdapter.js +942 -0
  104. package/dist/src/learning/vectorAccelerationAdapter.test.js +382 -0
  105. package/dist/src/lfs.asset.policy.contract.test.js +153 -0
  106. package/dist/src/license.policy.contract.test.js +66 -0
  107. package/dist/src/memory/MemoryGovernance.js +74 -0
  108. package/dist/src/memory/MemoryGovernance.test.js +46 -0
  109. package/dist/src/memory/types.js +2 -0
  110. package/dist/src/mermaid.frontend.guard.contract.test.js +77 -0
  111. package/dist/src/middleware/auth.js +17 -0
  112. package/dist/src/middleware/body-parser.js +45 -0
  113. package/dist/src/middleware/cors.js +44 -0
  114. package/dist/src/middleware/index.js +21 -0
  115. package/dist/src/middleware/request-trace.js +96 -0
  116. package/dist/src/notemd/AppConfigToml.js +6 -4
  117. package/dist/src/notemd/MermaidProcessor.js +400 -50
  118. package/dist/src/notemd/NotemdService.js +498 -13
  119. package/dist/src/notemd/PromptManager.js +15 -0
  120. package/dist/src/notemd/cli/commands.js +357 -0
  121. package/dist/src/notemd/cli/dispatcher.js +225 -0
  122. package/dist/src/notemd/cli/index.js +169 -0
  123. package/dist/src/notemd/cli/parser.js +68 -0
  124. package/dist/src/notemd/cli/types.js +2 -0
  125. package/dist/src/notemd/constants.js +43 -0
  126. package/dist/src/notemd/diagram/diagramGenerationService.js +78 -0
  127. package/dist/src/notemd/diagram/diagramSpec.js +79 -0
  128. package/dist/src/notemd/diagram/diagramSpecResponseParser.js +131 -0
  129. package/dist/src/notemd/diagram/intent.js +95 -0
  130. package/dist/src/notemd/diagram/planner.js +71 -0
  131. package/dist/src/notemd/diagram/prompts/diagramSpecPrompt.js +42 -0
  132. package/dist/src/notemd/diagram/types.js +18 -0
  133. package/dist/src/notemd/index.js +26 -0
  134. package/dist/src/notemd/operations/capabilityManifest.js +23 -0
  135. package/dist/src/notemd/operations/cliContracts.js +17 -0
  136. package/dist/src/notemd/operations/configProfileCommands.js +85 -0
  137. package/dist/src/notemd/operations/registry.contract.test.js +95 -0
  138. package/dist/src/notemd/operations/registry.js +991 -0
  139. package/dist/src/notemd/operations/types.js +2 -0
  140. package/dist/src/notemd/providerDiagnostics.js +220 -0
  141. package/dist/src/notemd/providerProfiles.js +42 -0
  142. package/dist/src/notemd/providerTemplates.js +231 -0
  143. package/dist/src/notemd/search/DuckDuckGoProvider.js +39 -0
  144. package/dist/src/notemd/search/SearchManager.js +13 -0
  145. package/dist/src/notemd/search/SearchProvider.js +2 -0
  146. package/dist/src/notemd/search/TavilyProvider.js +44 -0
  147. package/dist/src/notemd.agent.manifest.test.js +85 -0
  148. package/dist/src/notemd.api.contract.test.js +14 -1
  149. package/dist/src/notemd.app_config_toml.test.js +2 -1
  150. package/dist/src/notemd.batch.workflow.test.js +117 -0
  151. package/dist/src/notemd.cli.e2e.test.js +136 -0
  152. package/dist/src/notemd.core.test.js +51 -0
  153. package/dist/src/notemd.diagram.pipeline.test.js +233 -0
  154. package/dist/src/notemd.providerTemplates.test.js +34 -0
  155. package/dist/src/notemd.server.integration.test.js +143 -35
  156. package/dist/src/notemd.workflow.pipeline.test.js +162 -0
  157. package/dist/src/pathbridge.handshake.contract.test.js +16 -2
  158. package/dist/src/pathmode.background.contract.test.js +69 -0
  159. package/dist/src/pathmode.settings.api.contract.test.js +9 -0
  160. package/dist/src/pkg.sidecar.contract.test.js +9 -3
  161. package/dist/src/platform/ExportProfile.js +58 -0
  162. package/dist/src/platform/PlatformCapabilities.js +45 -0
  163. package/dist/src/platform/PlatformCapabilities.test.js +30 -0
  164. package/dist/src/platform/RenderMaterializer.js +33 -0
  165. package/dist/src/platform/RenderMaterializer.test.js +32 -0
  166. package/dist/src/query_backend.external_http.integration.test.js +410 -0
  167. package/dist/src/reader_renderer.js +404 -3
  168. package/dist/src/reader_renderer.test.js +87 -0
  169. package/dist/src/release.godot.mirror.contract.test.js +73 -0
  170. package/dist/src/resources/ResourceRegistry.js +223 -0
  171. package/dist/src/resources/ResourceRegistry.test.js +61 -0
  172. package/dist/src/resources/types.js +2 -0
  173. package/dist/src/routes/agentWorkspaceDiagnostics.js +173 -0
  174. package/dist/src/routes/data.js +267 -0
  175. package/dist/src/routes/diagnostics.js +51 -0
  176. package/dist/src/routes/index.js +23 -0
  177. package/dist/src/routes/knowledge.js +968 -0
  178. package/dist/src/routes/markdown.js +287 -0
  179. package/dist/src/routes/notemd.js +565 -0
  180. package/dist/src/routes/registry.contract.test.js +130 -0
  181. package/dist/src/routes/render.js +285 -0
  182. package/dist/src/routes/runtimeRunbookRouteOps.js +149 -0
  183. package/dist/src/routes/runtimeRunbookRouteOps.test.js +194 -0
  184. package/dist/src/routes/settings.js +6 -0
  185. package/dist/src/routes/staticFiles.js +94 -0
  186. package/dist/src/routes/types.js +2 -0
  187. package/dist/src/runtime.transport.adapter.contract.test.js +81 -0
  188. package/dist/src/server.js +11090 -1549
  189. package/dist/src/server.migration.test.js +193 -21
  190. package/dist/src/server.port.fallback.contract.test.js +63 -0
  191. package/dist/src/session/SessionStateStore.js +81 -0
  192. package/dist/src/session/SessionStateStore.test.js +58 -0
  193. package/dist/src/session/types.js +2 -0
  194. package/dist/src/settings.runtime.contract.test.js +50 -0
  195. package/dist/src/shared/types.contract.test.js +107 -0
  196. package/dist/src/shared/types.js +22 -0
  197. package/dist/src/sidecar.replacement.boundary.contract.test.js +128 -0
  198. package/dist/src/sidecar.supply.readiness.contract.test.js +144 -0
  199. package/dist/src/source_manager.loadflow.test.js +46 -0
  200. package/dist/src/startup.layout.snapshot.contract.test.js +57 -0
  201. package/dist/src/tauri.frontend.build.contract.test.js +60 -0
  202. package/dist/src/tauri.sidecar.cleanup.contract.test.js +21 -0
  203. package/dist/src/utils/RuntimePaths.js +4 -13
  204. package/dist/src/utils/platform.js +153 -0
  205. package/dist/src/workflows/WorkflowArtifactStore.js +96 -0
  206. package/dist/src/workflows/WorkflowArtifactStore.test.js +80 -0
  207. package/dist/src/workflows/types.js +2 -0
  208. package/dist/src/workspace/WorkspaceRegistry.js +122 -0
  209. package/dist/src/workspace/WorkspaceRegistry.test.js +29 -0
  210. package/dist/src/workspace/types.js +2 -0
  211. package/package.json +53 -10
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildDiagramPlan = buildDiagramPlan;
4
+ const intent_1 = require("./intent");
5
+ function resolvePreferredRenderTarget(intent) {
6
+ switch (intent) {
7
+ case 'canvasMap': return 'json-canvas';
8
+ case 'dataChart': return 'vega-lite';
9
+ default: return 'mermaid';
10
+ }
11
+ }
12
+ function resolveMermaidDiagramType(intent) {
13
+ switch (intent) {
14
+ case 'mindmap': return 'mindmap';
15
+ case 'flowchart': return 'flowchart';
16
+ case 'sequence': return 'sequenceDiagram';
17
+ case 'classDiagram': return 'classDiagram';
18
+ case 'erDiagram': return 'erDiagram';
19
+ case 'stateDiagram': return 'stateDiagram-v2';
20
+ default: return null;
21
+ }
22
+ }
23
+ function resolveFallbackTargets(compatibilityMode, preferredTarget, preferredMermaidType) {
24
+ if (compatibilityMode === 'legacy-mermaid')
25
+ return [];
26
+ const fallbackTargets = [];
27
+ if (preferredTarget !== 'mermaid' && preferredMermaidType)
28
+ fallbackTargets.push('mermaid');
29
+ if (preferredTarget !== 'html')
30
+ fallbackTargets.push('html');
31
+ return fallbackTargets;
32
+ }
33
+ function inferPreferredChartType(markdown, intent) {
34
+ if (intent !== 'dataChart')
35
+ return undefined;
36
+ const normalized = markdown.toLowerCase();
37
+ if (/\bvs\.?\b|\bversus\b|\bcorrelation\b|\bscatter\b|\bthroughput\b|\blatency\b/.test(normalized))
38
+ return 'scatter';
39
+ if (/%/.test(normalized) || /\bshare\b|\bmix\b|\bbreakdown\b|\bcomposition\b|\bportion\b|\bdistribution\b/.test(normalized))
40
+ return 'pie';
41
+ if (/\btop\b|\brank(?:ed|ing)?\b|\bleaderboard\b|\bissue(?:s)?\b/.test(normalized))
42
+ return 'table';
43
+ if (/\bday\b|\bdaily\b|\bweek\b|\bweekly\b|\bmonth\b|\bmonthly\b|\bquarter\b|\bquarterly\b|\byear\b|\byearly\b|\btrend\b|\bover time\b/.test(normalized))
44
+ return 'line';
45
+ return 'bar';
46
+ }
47
+ function buildIntentResult(markdown, requestedIntent) {
48
+ if (!requestedIntent)
49
+ return (0, intent_1.inferDiagramIntent)(markdown);
50
+ return { intent: requestedIntent, confidence: 0.95, reasons: ['explicit intent requested'] };
51
+ }
52
+ function buildDiagramPlan(markdown, options = {}) {
53
+ const compatibilityMode = options.compatibilityMode ?? 'best-fit';
54
+ const inferred = buildIntentResult(markdown, options.requestedIntent);
55
+ const preferredTarget = resolvePreferredRenderTarget(inferred.intent);
56
+ const preferredMermaidType = resolveMermaidDiagramType(inferred.intent);
57
+ const preferredChartType = inferPreferredChartType(markdown, inferred.intent);
58
+ const fallbackTargets = resolveFallbackTargets(compatibilityMode, preferredTarget, preferredMermaidType);
59
+ if (compatibilityMode === 'legacy-mermaid') {
60
+ return {
61
+ intent: inferred.intent, confidence: inferred.confidence, reasons: inferred.reasons,
62
+ renderTarget: 'mermaid', fallbackTargets, preferredChartType,
63
+ mermaidDiagramType: preferredMermaidType ?? 'mindmap', legacyCompatibilityMode: true
64
+ };
65
+ }
66
+ return {
67
+ intent: inferred.intent, confidence: inferred.confidence, reasons: inferred.reasons,
68
+ renderTarget: preferredTarget, fallbackTargets, preferredChartType,
69
+ mermaidDiagramType: preferredMermaidType, legacyCompatibilityMode: false
70
+ };
71
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildDiagramSpecPrompt = buildDiagramSpecPrompt;
4
+ function buildDiagramSpecPrompt(options = {}) {
5
+ const supportedChartTypes = 'bar, line, pie, scatter, table';
6
+ const preferredIntentLine = options.requiredIntent
7
+ ? `REQUIRED diagram intent: ${options.requiredIntent}. You MUST use this exact intent. Do not choose any other intent under any circumstances.`
8
+ : options.preferredIntent
9
+ ? `Preferred diagram intent: ${options.preferredIntent}. Follow it when the source content supports it.`
10
+ : 'Preferred diagram intent: choose the most suitable intent from the supported list.';
11
+ const preferredChartTypeLine = options.preferredIntent === 'dataChart' && options.preferredChartType
12
+ ? `Preferred chart template: ${options.preferredChartType}. Use it when the extracted data supports it.`
13
+ : '';
14
+ const targetLanguageLine = options.targetLanguage
15
+ ? `Write all human-readable labels in ${options.targetLanguage}.`
16
+ : 'Write all human-readable labels in the same language as the source unless the caller specifies a target language.';
17
+ return `You are a diagram planning assistant. Analyze the source note and return a structured DiagramSpec JSON object.
18
+
19
+ Output rules:
20
+ - Return JSON only. Do not wrap the JSON in markdown code fences.
21
+ - Do not output Mermaid, Canvas, Vega-Lite, PlantUML, or any other renderer syntax.
22
+ - Do not output explanations outside the DiagramSpec JSON payload.
23
+ - Do not invent numeric data. If the source lacks reliable numeric values, choose a non-dataChart intent and leave dataSeries empty.
24
+
25
+ Supported intents: mindmap, flowchart, sequence, classDiagram, erDiagram, stateDiagram, canvasMap, dataChart
26
+
27
+ ${preferredIntentLine}
28
+ ${preferredChartTypeLine}
29
+ ${targetLanguageLine}
30
+
31
+ Required DiagramSpec fields:
32
+ - intent: one of the supported intents
33
+ - title: a concise descriptive title
34
+ - summary: a short description of the diagram
35
+ - nodes: array of {id, label, kind?, children?}
36
+ - edges: array of {from, to, label?, relation?}
37
+ - sections: array of {id, label, summary?}
38
+ - callouts: array of {label, detail}
39
+ - dataSeries: array of {id, label, points: [{x, y, series?}]}
40
+ - layoutHints: optional {chartType?}
41
+ - sourceLanguage, outputLanguage: optional language codes`;
42
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_DIAGRAM_INTENTS = void 0;
4
+ exports.isSupportedDiagramIntent = isSupportedDiagramIntent;
5
+ exports.SUPPORTED_DIAGRAM_INTENTS = [
6
+ 'mindmap',
7
+ 'flowchart',
8
+ 'sequence',
9
+ 'classDiagram',
10
+ 'erDiagram',
11
+ 'stateDiagram',
12
+ 'canvasMap',
13
+ 'dataChart'
14
+ ];
15
+ function isSupportedDiagramIntent(value) {
16
+ return typeof value === 'string'
17
+ && exports.SUPPORTED_DIAGRAM_INTENTS.includes(value);
18
+ }
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.isSupportedDiagramIntent = exports.SUPPORTED_DIAGRAM_INTENTS = exports.TavilyProvider = exports.DuckDuckGoProvider = void 0;
17
18
  __exportStar(require("./types"), exports);
18
19
  __exportStar(require("./constants"), exports);
19
20
  __exportStar(require("./LlmProviderDefinitions"), exports);
@@ -27,3 +28,28 @@ __exportStar(require("./MermaidProcessor"), exports);
27
28
  __exportStar(require("./FormulaFixer"), exports);
28
29
  __exportStar(require("./DuplicateDetector"), exports);
29
30
  __exportStar(require("./NotemdService"), exports);
31
+ __exportStar(require("./operations/types"), exports);
32
+ __exportStar(require("./operations/registry"), exports);
33
+ __exportStar(require("./operations/capabilityManifest"), exports);
34
+ __exportStar(require("./operations/cliContracts"), exports);
35
+ __exportStar(require("./operations/configProfileCommands"), exports);
36
+ __exportStar(require("./providerProfiles"), exports);
37
+ __exportStar(require("./providerDiagnostics"), exports);
38
+ __exportStar(require("./search/SearchManager"), exports);
39
+ var DuckDuckGoProvider_1 = require("./search/DuckDuckGoProvider");
40
+ Object.defineProperty(exports, "DuckDuckGoProvider", { enumerable: true, get: function () { return DuckDuckGoProvider_1.DuckDuckGoProvider; } });
41
+ var TavilyProvider_1 = require("./search/TavilyProvider");
42
+ Object.defineProperty(exports, "TavilyProvider", { enumerable: true, get: function () { return TavilyProvider_1.TavilyProvider; } });
43
+ var types_1 = require("./diagram/types");
44
+ Object.defineProperty(exports, "SUPPORTED_DIAGRAM_INTENTS", { enumerable: true, get: function () { return types_1.SUPPORTED_DIAGRAM_INTENTS; } });
45
+ Object.defineProperty(exports, "isSupportedDiagramIntent", { enumerable: true, get: function () { return types_1.isSupportedDiagramIntent; } });
46
+ __exportStar(require("./diagram/intent"), exports);
47
+ __exportStar(require("./diagram/planner"), exports);
48
+ __exportStar(require("./diagram/diagramSpec"), exports);
49
+ __exportStar(require("./diagram/diagramSpecResponseParser"), exports);
50
+ __exportStar(require("./diagram/diagramGenerationService"), exports);
51
+ __exportStar(require("./diagram/prompts/diagramSpecPrompt"), exports);
52
+ __exportStar(require("./cli/parser"), exports);
53
+ __exportStar(require("./cli/types"), exports);
54
+ __exportStar(require("./cli/commands"), exports);
55
+ __exportStar(require("./cli/dispatcher"), exports);
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCliCapabilityManifest = buildCliCapabilityManifest;
4
+ const registry_1 = require("./registry");
5
+ function buildCliCapabilityManifest(pluginId = 'notemd') {
6
+ return {
7
+ version: 1,
8
+ commands: (0, registry_1.listOperationDefinitions)().flatMap(definition => definition.commandBindings
9
+ .filter(binding => binding.includeInCapabilityManifest !== false)
10
+ .map(binding => ({
11
+ id: `${pluginId}:${binding.commandId}`,
12
+ localCommandId: binding.commandId,
13
+ operationId: definition.id,
14
+ operationVersion: definition.version,
15
+ automationLevel: binding.automationLevel,
16
+ requiredContext: binding.requiredContext,
17
+ sideEffectClass: binding.sideEffectClass,
18
+ surfaces: [...binding.surfaces],
19
+ mappingKind: binding.mappingKind,
20
+ defaultInput: binding.defaultInput ? { ...binding.defaultInput } : undefined
21
+ })))
22
+ };
23
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCliInvocationContract = buildCliInvocationContract;
4
+ const registry_1 = require("./registry");
5
+ function buildCliInvocationContract() {
6
+ return {
7
+ version: 1,
8
+ operations: (0, registry_1.listOperationDefinitions)()
9
+ .filter(definition => definition.inputSchema && definition.resultSchema)
10
+ .map(definition => ({
11
+ operationId: definition.id,
12
+ operationVersion: definition.version,
13
+ inputSchema: definition.inputSchema,
14
+ resultSchema: definition.resultSchema
15
+ }))
16
+ };
17
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingProviderProfileImportFileError = exports.CLI_INVOCATION_CONTRACT_FILE_NAME = exports.CLI_CAPABILITY_MANIFEST_FILE_NAME = exports.PROVIDER_PROFILE_FILE_NAME = void 0;
4
+ exports.buildPluginConfigDir = buildPluginConfigDir;
5
+ exports.buildPluginConfigFilePath = buildPluginConfigFilePath;
6
+ exports.executeExportProviderProfilesCommand = executeExportProviderProfilesCommand;
7
+ exports.executeImportProviderProfilesCommand = executeImportProviderProfilesCommand;
8
+ exports.executeExportCliCapabilityManifestCommand = executeExportCliCapabilityManifestCommand;
9
+ exports.executeExportCliInvocationContractCommand = executeExportCliInvocationContractCommand;
10
+ const cliContracts_1 = require("./cliContracts");
11
+ const capabilityManifest_1 = require("./capabilityManifest");
12
+ const providerProfiles_1 = require("../providerProfiles");
13
+ exports.PROVIDER_PROFILE_FILE_NAME = 'notemd-providers.json';
14
+ exports.CLI_CAPABILITY_MANIFEST_FILE_NAME = 'notemd-cli-capabilities.json';
15
+ exports.CLI_INVOCATION_CONTRACT_FILE_NAME = 'notemd-cli-contract.json';
16
+ class MissingProviderProfileImportFileError extends Error {
17
+ constructor(inputPath) {
18
+ super(`Provider profile import file not found: ${inputPath}`);
19
+ this.inputPath = inputPath;
20
+ this.name = 'MissingProviderProfileImportFileError';
21
+ }
22
+ }
23
+ exports.MissingProviderProfileImportFileError = MissingProviderProfileImportFileError;
24
+ function buildPluginConfigDir(configDir, pluginId) {
25
+ return `${configDir}/plugins/${pluginId}`;
26
+ }
27
+ function buildPluginConfigFilePath(configDir, pluginId, fileName) {
28
+ return `${buildPluginConfigDir(configDir, pluginId)}/${fileName}`;
29
+ }
30
+ async function ensurePluginConfigDir(host, pluginId) {
31
+ const pluginConfigDir = buildPluginConfigDir(host.configDir, pluginId);
32
+ if (!(await host.exists(pluginConfigDir))) {
33
+ await host.mkdir(pluginConfigDir);
34
+ }
35
+ return pluginConfigDir;
36
+ }
37
+ async function writePluginConfigJsonFile(host, pluginId, fileName, payload) {
38
+ await ensurePluginConfigDir(host, pluginId);
39
+ const outputPath = buildPluginConfigFilePath(host.configDir, pluginId, fileName);
40
+ await host.write(outputPath, JSON.stringify(payload, null, 2));
41
+ return outputPath;
42
+ }
43
+ function resolveImportedActiveProvider(importedProviders, activeProvider, defaultActiveProvider) {
44
+ const providerNames = new Set(importedProviders.map(provider => provider.name));
45
+ if (providerNames.has(activeProvider)) {
46
+ return { activeProvider, activeProviderReset: false };
47
+ }
48
+ if (providerNames.has(defaultActiveProvider)) {
49
+ return { activeProvider: defaultActiveProvider, activeProviderReset: true };
50
+ }
51
+ if (importedProviders.length > 0) {
52
+ return { activeProvider: importedProviders[0].name, activeProviderReset: true };
53
+ }
54
+ return { activeProvider: defaultActiveProvider, activeProviderReset: true };
55
+ }
56
+ async function executeExportProviderProfilesCommand(params) {
57
+ const profile = (0, providerProfiles_1.buildProviderProfileExport)(params.providers, params.now ?? new Date());
58
+ const outputPath = await writePluginConfigJsonFile(params.host, params.pluginId, exports.PROVIDER_PROFILE_FILE_NAME, profile);
59
+ return { outputPath, profile };
60
+ }
61
+ async function executeImportProviderProfilesCommand(params) {
62
+ const inputPath = buildPluginConfigFilePath(params.host.configDir, params.pluginId, exports.PROVIDER_PROFILE_FILE_NAME);
63
+ if (!(await params.host.exists(inputPath))) {
64
+ throw new MissingProviderProfileImportFileError(inputPath);
65
+ }
66
+ const jsonData = await params.host.read(inputPath);
67
+ const importSummary = (0, providerProfiles_1.parseProviderProfileImport)(jsonData, params.existingProviders);
68
+ const activeProviderState = resolveImportedActiveProvider(importSummary.importedProviders, params.activeProvider, params.defaultActiveProvider);
69
+ return {
70
+ ...importSummary,
71
+ inputPath,
72
+ activeProvider: activeProviderState.activeProvider,
73
+ activeProviderReset: activeProviderState.activeProviderReset
74
+ };
75
+ }
76
+ async function executeExportCliCapabilityManifestCommand(params) {
77
+ const manifest = (0, capabilityManifest_1.buildCliCapabilityManifest)(params.pluginId);
78
+ const outputPath = await writePluginConfigJsonFile(params.host, params.pluginId, exports.CLI_CAPABILITY_MANIFEST_FILE_NAME, manifest);
79
+ return { outputPath, manifest };
80
+ }
81
+ async function executeExportCliInvocationContractCommand(params) {
82
+ const contract = (0, cliContracts_1.buildCliInvocationContract)();
83
+ const outputPath = await writePluginConfigJsonFile(params.host, params.pluginId, exports.CLI_INVOCATION_CONTRACT_FILE_NAME, contract);
84
+ return { outputPath, contract };
85
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Operations Registry contract test (cline co-located pattern).
5
+ * Validates all 27 operation definitions for structural integrity,
6
+ * schema correctness, automation level consistency, and required fields.
7
+ */
8
+ const registry_1 = require("./registry");
9
+ const VALID_AUTOMATION_LEVELS = ['safe', 'requires-active-file', 'requires-selection', 'interactive-ui'];
10
+ const VALID_SIDE_EFFECTS = ['read-only', 'write-file', 'batch-write', 'preview-ui', 'destructive'];
11
+ const VALID_CONTEXTS = ['none', 'active-file', 'editor-selection', 'folder-selection', 'preview-ui'];
12
+ describe('Operations Registry', () => {
13
+ let ops;
14
+ beforeAll(() => { ops = (0, registry_1.listOperationDefinitions)(); });
15
+ test('returns 27 operation definitions', () => {
16
+ expect(ops.length).toBe(27);
17
+ });
18
+ test('every operation has a unique id', () => {
19
+ const ids = ops.map(o => o.id);
20
+ expect(new Set(ids).size).toBe(ids.length);
21
+ });
22
+ test('every operation has version 1', () => {
23
+ ops.forEach(o => expect(o.version).toBe(1));
24
+ });
25
+ test('every operation has valid automationLevel', () => {
26
+ ops.forEach(o => expect(VALID_AUTOMATION_LEVELS).toContain(o.automationLevel));
27
+ });
28
+ test('every operation has valid sideEffectClass', () => {
29
+ ops.forEach(o => expect(VALID_SIDE_EFFECTS).toContain(o.sideEffectClass));
30
+ });
31
+ test('every operation has valid requiredContext', () => {
32
+ ops.forEach(o => expect(VALID_CONTEXTS).toContain(o.requiredContext));
33
+ });
34
+ test('every operation has at least one command binding', () => {
35
+ ops.forEach(o => expect(o.commandBindings.length).toBeGreaterThanOrEqual(1));
36
+ });
37
+ test('every command binding has a non-empty commandId', () => {
38
+ ops.forEach(o => o.commandBindings.forEach(b => {
39
+ expect(b.commandId.length).toBeGreaterThan(0);
40
+ }));
41
+ });
42
+ test('safe operations have read-only or write-file side effects', () => {
43
+ const safeOps = ops.filter(o => o.automationLevel === 'safe');
44
+ safeOps.forEach(o => {
45
+ expect(['read-only', 'write-file']).toContain(o.sideEffectClass);
46
+ });
47
+ });
48
+ test('destructive operations require interactive-ui', () => {
49
+ const destructiveOps = ops.filter(o => o.sideEffectClass === 'destructive');
50
+ destructiveOps.forEach(o => {
51
+ expect(o.automationLevel).toBe('interactive-ui');
52
+ });
53
+ });
54
+ test('batch-write operations require at least active-file context', () => {
55
+ const batchOps = ops.filter(o => o.sideEffectClass === 'batch-write');
56
+ batchOps.forEach(o => {
57
+ expect(o.automationLevel).not.toBe('safe');
58
+ });
59
+ });
60
+ test('getOperationDefinition returns correct op by id', () => {
61
+ const op = (0, registry_1.getOperationDefinition)('diagram.generate');
62
+ expect(op).toBeDefined();
63
+ expect(op.id).toBe('diagram.generate');
64
+ expect(op.automationLevel).toBe('safe');
65
+ });
66
+ test('getOperationDefinition returns undefined for unknown id', () => {
67
+ expect((0, registry_1.getOperationDefinition)('nonexistent.op')).toBeUndefined();
68
+ });
69
+ test('every operation with inputSchema has a valid JSON schema', () => {
70
+ ops.filter(o => o.inputSchema).forEach(o => {
71
+ expect(o.inputSchema).toBeDefined();
72
+ expect(typeof o.inputSchema.type).toBe('string');
73
+ });
74
+ });
75
+ test('critical operations exist', () => {
76
+ const ids = ops.map(o => o.id);
77
+ expect(ids).toContain('file.process-add-links');
78
+ expect(ids).toContain('diagram.generate');
79
+ expect(ids).toContain('translate.file');
80
+ expect(ids).toContain('provider.diagnostic.run');
81
+ expect(ids).toContain('workflow.extract-and-generate');
82
+ expect(ids).toContain('workflow.batch');
83
+ expect(ids).toContain('mermaid.batch-fix');
84
+ expect(ids).toContain('content.generate-from-title');
85
+ expect(ids).toContain('cli.capability-manifest.export');
86
+ expect(ids).toContain('cli.invocation-contract.export');
87
+ });
88
+ test('capability-manifest ops are safe and read-only', () => {
89
+ const cliOps = ops.filter(o => o.id.startsWith('cli.'));
90
+ cliOps.forEach(o => {
91
+ expect(o.automationLevel).toBe('safe');
92
+ expect(o.sideEffectClass).toBe('write-file');
93
+ });
94
+ });
95
+ });