Files
archify-vscode-ext/package.json
root-at-skic de1a57e4c6 Model page: Registry panel lists registry files, elements inside each
- one collapsible header per .archify-registry file with its element
  count and an Open button that opens the registry view; files start
  collapsed, the Registry panel open
- view types moved to views/viewTypes.ts so the diagram page can open a
  registry without a circular import
- 0.7.1
2026-10-19 20:39:24 +03:00

429 lines
13 KiB
JSON

{
"name": "archify-vscode-ext",
"displayName": "Archify Diagram Viewer",
"description": "Archify diagrams in VS Code. Write diagrams as .archify files in YAML: they open as the interactive diagram, with live updates, validation, templates and completion. Also previews Archify's own JSON files (*.architecture.json, \u2026) and opens rendered Archify HTML.",
"version": "0.7.1",
"publisher": "root-at-skic",
"license": "MIT",
"sponsor": {
"url": "https://buymeacoffee.com/root.at.skic"
},
"icon": "media/icon.png",
"galleryBanner": {
"color": "#0f172a",
"theme": "dark"
},
"repository": {
"type": "git",
"url": "https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext.git"
},
"engines": {
"vscode": "^1.100.0"
},
"categories": [
"Visualization",
"Programming Languages"
],
"keywords": [
"archify",
"architecture",
"c4",
"diagram",
"model",
"registry",
"sequence",
"workflow",
"yaml"
],
"main": "./dist/extension.js",
"activationEvents": [
"onLanguage:json",
"onLanguage:jsonc",
"onLanguage:html",
"workspaceContains:**/*.{archify,architecture.json,workflow.json,sequence.json,dataflow.json,lifecycle.json}",
"onWebviewPanel:archify.preview",
"workspaceContains:**/*.archify-registry"
],
"contributes": {
"commands": [
{
"command": "archify.newDiagram",
"title": "Archify | New Diagram\u2026",
"icon": "$(new-file)"
},
{
"command": "archify.newModel",
"title": "Archify | New Model\u2026",
"icon": "$(new-folder)"
},
{
"command": "archify.showPreview",
"title": "Archify | Open Preview",
"icon": "$(open-preview)"
},
{
"command": "archify.showPreviewToSide",
"title": "Archify | Open Preview to the Side",
"icon": "$(open-preview)"
},
{
"command": "archify.openHtmlViewer",
"title": "Archify | Open in HTML Viewer",
"icon": "$(open-preview)"
},
{
"command": "archify.renderToHtml",
"title": "Archify | Render to HTML File\u2026",
"icon": "$(file-code)"
},
{
"command": "archify.openInBrowser",
"title": "Archify | Open in Browser",
"icon": "$(globe)"
},
{
"command": "archify.refreshPreview",
"title": "Archify | Refresh Preview",
"icon": "$(refresh)"
},
{
"command": "archify.showSource",
"title": "Archify | Show Source",
"icon": "$(go-to-file)"
},
{
"command": "archify.openModel",
"title": "Archify | Open Model",
"icon": "$(symbol-structure)"
}
],
"menus": {
"commandPalette": [
{
"command": "archify.showPreview",
"when": "archify.isDiagramSource || archify.isArchifyHtml"
},
{
"command": "archify.showPreviewToSide",
"when": "archify.isDiagramSource"
},
{
"command": "archify.openHtmlViewer",
"when": "resourceExtname == .html"
},
{
"command": "archify.renderToHtml",
"when": "archify.isDiagramSource || archifyPreviewFocus || activeCustomEditorId == 'archify.diagram'"
},
{
"command": "archify.openInBrowser",
"when": "archify.isDiagramSource || archify.isArchifyHtml || archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer' || activeCustomEditorId == 'archify.diagram'"
},
{
"command": "archify.refreshPreview",
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.diagram'"
},
{
"command": "archify.showSource",
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer' || activeCustomEditorId == 'archify.diagram' || activeCustomEditorId == 'archify.registry'"
},
{
"command": "archify.openModel",
"when": "archify.isDiagramSource || archifyPreviewFocus || activeCustomEditorId == 'archify.diagram' || activeCustomEditorId == 'archify.registry'"
}
],
"editor/title": [
{
"command": "archify.showPreviewToSide",
"when": "archify.isDiagramSource && !notebookEditorFocused",
"group": "navigation"
},
{
"command": "archify.openHtmlViewer",
"when": "archify.isArchifyHtml && activeCustomEditorId != 'archify.htmlViewer'",
"group": "navigation"
},
{
"command": "archify.refreshPreview",
"when": "archifyPreviewFocus",
"group": "navigation"
},
{
"command": "archify.showSource",
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer' || activeCustomEditorId == 'archify.diagram' || activeCustomEditorId == 'archify.registry'",
"group": "navigation"
},
{
"command": "archify.openInBrowser",
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer'",
"group": "1_archify"
},
{
"command": "archify.renderToHtml",
"when": "archify.isDiagramSource || archifyPreviewFocus",
"group": "1_archify"
},
{
"command": "archify.openModel",
"when": "archify.inModel && (archify.isDiagramSource || activeCustomEditorId == 'archify.diagram' || activeCustomEditorId == 'archify.registry') && !notebookEditorFocused",
"group": "navigation@60"
}
],
"explorer/context": [
{
"command": "archify.newDiagram",
"when": "explorerResourceIsFolder",
"group": "zzz_archify@1"
},
{
"command": "archify.newModel",
"when": "explorerResourceIsFolder",
"group": "zzz_archify@2"
},
{
"command": "archify.showPreview",
"when": "resourceFilename =~ /(\\.archify|\\.archify-registry|\\.(architecture|workflow|sequence|dataflow|lifecycle)\\.json)$/",
"group": "zzz_archify@3"
},
{
"command": "archify.renderToHtml",
"when": "resourceFilename =~ /(\\.archify|\\.(architecture|workflow|sequence|dataflow|lifecycle)\\.json)$/",
"group": "zzz_archify@4"
},
{
"command": "archify.openHtmlViewer",
"when": "resourceExtname == .html",
"group": "zzz_archify@3"
},
{
"command": "archify.openModel",
"when": "resourceFilename =~ /\\.archify(-registry)?$/",
"group": "zzz_archify@5"
}
],
"editor/title/context": [
{
"command": "archify.showPreview",
"when": "resourceFilename =~ /(\\.archify|\\.(architecture|workflow|sequence|dataflow|lifecycle)\\.json)$/",
"group": "zzz_archify@1"
}
],
"file/newFile": [
{
"command": "archify.newDiagram",
"group": "file"
},
{
"command": "archify.newModel",
"group": "file"
}
]
},
"keybindings": [
{
"command": "archify.showPreviewToSide",
"key": "ctrl+k v",
"mac": "cmd+k v",
"when": "editorTextFocus && archify.isDiagramSource"
},
{
"command": "archify.showPreview",
"key": "ctrl+shift+v",
"mac": "cmd+shift+v",
"when": "editorTextFocus && archify.isDiagramSource"
}
],
"customEditors": [
{
"viewType": "archify.diagram",
"displayName": "Archify Diagram",
"selector": [
{
"filenamePattern": "*.archify"
}
],
"priority": "default"
},
{
"viewType": "archify.registry",
"displayName": "Archify Registry",
"selector": [
{
"filenamePattern": "*.archify-registry"
}
],
"priority": "default"
},
{
"viewType": "archify.htmlViewer",
"displayName": "Archify HTML Viewer",
"selector": [
{
"filenamePattern": "*.html"
}
],
"priority": "option"
}
],
"jsonValidation": [
{
"fileMatch": "*.architecture.json",
"url": "./schemas/architecture.schema.json"
},
{
"fileMatch": "*.workflow.json",
"url": "./schemas/workflow.schema.json"
},
{
"fileMatch": "*.sequence.json",
"url": "./schemas/sequence.schema.json"
},
{
"fileMatch": "*.dataflow.json",
"url": "./schemas/dataflow.schema.json"
},
{
"fileMatch": "*.lifecycle.json",
"url": "./schemas/lifecycle.schema.json"
}
],
"configuration": {
"title": "Archify",
"properties": {
"archify.theme": {
"type": "string",
"enum": [
"vscode",
"dark",
"light",
"diagram"
],
"enumDescriptions": [
"Follow the VS Code color theme.",
"Always use the dark diagram theme.",
"Always use the light diagram theme.",
"Keep whatever the diagram or its toolbar chooses."
],
"default": "vscode",
"description": "Theme used when showing Archify diagrams."
},
"archify.defaultView": {
"type": "string",
"enum": [
"2d",
"3d"
],
"enumDescriptions": [
"Open diagrams as Archify draws them.",
"Open diagrams in the 3D view. The 3D button in the diagram toolbar switches back."
],
"default": "2d",
"description": "How diagrams open. Each open diagram remembers its own choice."
},
"archify.preview.liveUpdate": {
"type": "boolean",
"default": true,
"description": "Re-render the preview while you type. When off, the preview updates on save."
},
"archify.preview.debounceMs": {
"type": "number",
"default": 400,
"minimum": 50,
"description": "Delay in milliseconds before re-rendering after an edit."
},
"archify.validation.enabled": {
"type": "boolean",
"default": true,
"description": "Report Archify validation results (schema, layout and source evidence) in the Problems panel."
},
"archify.quality": {
"type": "string",
"enum": [
"",
"standard",
"showcase"
],
"enumDescriptions": [
"Use the quality profile declared in the diagram.",
"Force the standard quality gate.",
"Force the showcase quality gate."
],
"default": "",
"description": "Quality profile passed to the Archify renderer."
},
"archify.sourceEvidence": {
"type": "string",
"enum": [
"fallback",
"strict"
],
"enumDescriptions": [
"If source evidence cannot be verified, still show the diagram without source links and explain why.",
"Treat unverifiable source evidence as a render error, exactly like the Archify CLI."
],
"default": "fallback",
"description": "How to handle diagrams whose repository source evidence cannot be verified locally."
},
"archify.repoRoot": {
"type": "string",
"default": "",
"description": "Git checkout used to verify source evidence. Empty means the Git top-level directory of the diagram file."
},
"archify.nodePath": {
"type": "string",
"default": "",
"description": "Node.js executable (18 or newer) used to run the renderer. Empty means the runtime bundled with VS Code."
}
}
},
"languages": [
{
"id": "yaml",
"extensions": [
".archify",
".archify-registry"
]
}
],
"yamlValidation": [
{
"fileMatch": "*.archify",
"url": "./schemas/archify.schema.json"
},
{
"fileMatch": "*.archify-registry",
"url": "./schemas/archify-registry.schema.json"
}
]
},
"scripts": {
"sync:archify": "node scripts/sync-archify.mjs",
"build": "node esbuild.mjs",
"watch": "node esbuild.mjs --watch",
"typecheck": "tsc --noEmit",
"test": "node esbuild.mjs --tests && node --test \"out/test/*.test.js\"",
"vscode:prepublish": "node esbuild.mjs --production",
"package": "vsce package --no-dependencies --baseContentUrl https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext/src/branch/main --baseImagesUrl https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext/raw/branch/main",
"test:integration": "node esbuild.mjs && node esbuild.mjs --tests && node test/integration/run.mjs"
},
"devDependencies": {
"@types/node": "^22.0.0",
"@types/three": "^0.186.0",
"@types/vscode": "~1.100.0",
"@vscode/test-electron": "^3.1.0",
"@vscode/vsce": "^3.0.0",
"ajv": "^8.20.0",
"esbuild": "^0.25.0",
"jsonc-parser": "^3.3.1",
"typescript": "^5.8.0"
},
"bugs": {
"url": "https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext/issues"
},
"homepage": "https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext#readme",
"dependencies": {
"three": "^0.186.1",
"yaml": "^2.9.1"
}
}