{
  "name": "xyz-strata",
  "displayName": "Strata",
  "description": "Strata infrastructure workspace integration — validate YAML, explore workspace, build and deploy.",
  "version": "1.4.0",
  "publisher": "huybrechts-xyz",
  "icon": "resources/icon.png",
  "license": "AGPL-3.0-or-later",
  "repository": {
    "type": "git",
    "url": "https://github.com/huybrechtsxyz/strata"
  },
  "engines": {
    "vscode": "^1.90.0"
  },
  "categories": [
    "Other",
    "Linters"
  ],
  "keywords": [
    "strata",
    "infrastructure",
    "deployment",
    "yaml",
    "platform"
  ],
  "activationEvents": [
    "workspaceContains:.strata/solution.json"
  ],
  "main": "./out/extension.js",
  "contributes": {
    "chatParticipants": [
      {
        "id": "strata.chat",
        "fullName": "Strata",
        "name": "strata",
        "description": "Ask questions about your strata infrastructure workspace.",
        "isSticky": true,
        "commands": [
          {
            "name": "status",
            "description": "Show workspace health, profile, and readiness"
          },
          {
            "name": "validate",
            "description": "Validate the current file or a named file"
          },
          {
            "name": "guide",
            "description": "Show the 8-phase readiness checklist"
          },
          {
            "name": "build",
            "description": "Run or dry-run a build on the current deployment"
          },
          {
            "name": "deploy",
            "description": "Run or dry-run a deploy on the current deployment"
          },
          {
            "name": "stage",
            "description": "Deploy a specific stage: /stage [file] <stage-name>"
          },
          {
            "name": "values",
            "description": "Inspect resolved values for the current deployment"
          },
          {
            "name": "drift",
            "description": "Run drift detection on the current deployment"
          },
          {
            "name": "repos",
            "description": "Show repository status with latest release and quality-gate tags"
          },
          {
            "name": "promote",
            "description": "Show promotion status, matrix, or trigger a promotion"
          },
          {
            "name": "versions",
            "description": "Show version pins and lock status for a ring"
          }
        ]
      }
    ],
    "commands": [
      {
        "command": "strata.initWorkspace",
        "title": "Strata: Initialize Workspace",
        "icon": "$(cloud)"
      },
      {
        "command": "strata.validateCurrentFile",
        "title": "Strata: Validate Current File",
        "icon": "$(check)"
      },
      {
        "command": "strata.validateAll",
        "title": "Strata: Validate All Files",
        "icon": "$(checklist)"
      },
      {
        "command": "strata.buildDryRun",
        "title": "Strata: Build (Dry Run)",
        "icon": "$(play)"
      },
      {
        "command": "strata.buildRun",
        "title": "Strata: Build",
        "icon": "$(play-circle)"
      },
      {
        "command": "strata.deployDryRun",
        "title": "Strata: Deploy (Dry Run)",
        "icon": "$(rocket)"
      },
      {
        "command": "strata.deployRun",
        "title": "Strata: Deploy",
        "icon": "$(cloud-upload)"
      },
      {
        "command": "strata.envStatus",
        "title": "Strata: Show Environment Status",
        "icon": "$(pulse)"
      },
      {
        "command": "strata.envDrift",
        "title": "Strata: Detect Drift",
        "icon": "$(diff)"
      },
      {
        "command": "strata.envDoctor",
        "title": "Strata: Run Doctor",
        "icon": "$(heart)"
      },
      {
        "command": "strata.auditChanges",
        "title": "Strata: Show Audit Trail",
        "icon": "$(history)"
      },
      {
        "command": "strata.auditResend",
        "title": "Strata: Resend to Audit Sinks",
        "icon": "$(broadcast)"
      },
      {
        "command": "strata.auditExport",
        "title": "Strata: Export Audit Trail",
        "icon": "$(export)"
      },
      {
        "command": "strata.showGuide",
        "title": "Strata: Show Guide",
        "icon": "$(list-ordered)"
      },
      {
        "command": "strata.showIntegrationHelp",
        "title": "Strata: Show Integration Help",
        "icon": "$(book)"
      },
      {
        "command": "strata.switchProfile",
        "title": "Strata: Switch Profile",
        "icon": "$(account)"
      },
      {
        "command": "strata.exportSchemas",
        "title": "Strata: Export & Wire Schemas",
        "icon": "$(file-code)"
      },
      {
        "command": "strata.openConsole",
        "title": "Strata: Open Console",
        "icon": "$(terminal)"
      },
      {
        "command": "strata.showDependencyGraph",
        "title": "Strata: Show Dependency Graph",
        "icon": "$(type-hierarchy)"
      },
      {
        "command": "strata.refreshTreeView",
        "title": "Refresh",
        "icon": "$(refresh)"
      },
      {
        "command": "strata.openFile",
        "title": "Open File",
        "icon": "$(go-to-file)"
      },
      {
        "command": "strata.deployStage",
        "title": "Strata: Deploy Stage",
        "icon": "$(rocket)"
      },
      {
        "command": "strata.lockStatus",
        "title": "Strata: Show Lock Status",
        "icon": "$(lock)"
      },
      {
        "command": "strata.releaseLock",
        "title": "Strata: Force Release Lock",
        "icon": "$(unlock)"
      },
      {
        "command": "strata.showValues",
        "title": "Strata: Inspect Values",
        "icon": "$(symbol-variable)"
      },
      {
        "command": "strata.copyValueKey",
        "title": "Copy Key",
        "icon": "$(copy)"
      },
      {
        "command": "strata.buildSbom",
        "title": "Strata: Generate SBOM",
        "icon": "$(package)"
      },
      {
        "command": "strata.syncRepo",
        "title": "Strata: Sync Repository",
        "icon": "$(sync)"
      },
      {
        "command": "strata.addRepo",
        "title": "Strata: Add Repository",
        "icon": "$(add)"
      },
      {
        "command": "strata.removeRepo",
        "title": "Strata: Remove Repository",
        "icon": "$(trash)"
      },
      {
        "command": "strata.auditFilter",
        "title": "Strata: Filter Audit Trail",
        "icon": "$(filter)"
      },
      {
        "command": "strata.auditSetLimit",
        "title": "Strata: Set Audit Entry Limit",
        "icon": "$(list-ordered)"
      },
      {
        "command": "strata.buildPlan",
        "title": "Strata: Build Plan",
        "icon": "$(diff)"
      },
      {
        "command": "strata.checkPolicy",
        "title": "Strata: Check Policies",
        "icon": "$(shield)"
      },
      {
        "command": "strata.copyOutputValue",
        "title": "Copy Output Value",
        "icon": "$(copy)"
      },
      {
        "command": "strata.manageRefs",
        "title": "Strata: Manage Profile References",
        "icon": "$(references)"
      },
      {
        "command": "strata.promoteStatus",
        "title": "Strata: Show Promotion Status",
        "icon": "$(rocket)"
      },
      {
        "command": "strata.promoteMatrix",
        "title": "Strata: Show Version Matrix",
        "icon": "$(table)"
      },
      {
        "command": "strata.promoteHistory",
        "title": "Strata: Show Promotion History",
        "icon": "$(history)"
      },
      {
        "command": "strata.promoteStart",
        "title": "Strata: Promote to Ring",
        "icon": "$(arrow-up)"
      },
      {
        "command": "strata.promoteRollback",
        "title": "Strata: Rollback Promotion",
        "icon": "$(arrow-down)"
      },
      {
        "command": "strata.refreshPromotions",
        "title": "Refresh",
        "icon": "$(refresh)"
      },
      {
        "command": "strata.selectDeployment",
        "title": "Strata: Select Active Deployment",
        "icon": "$(search)"
      },
      {
        "command": "strata.setActiveDeployment",
        "title": "Strata: Set as Active Deployment",
        "icon": "$(target)"
      },
      {
        "command": "strata.newFile",
        "title": "Strata: New File",
        "icon": "$(add)"
      },
      {
        "command": "strata.activateProfile",
        "title": "Strata: Activate Profile",
        "icon": "$(account)"
      },
      {
        "command": "strata.showCostHistory",
        "title": "Strata: Show Cost History",
        "icon": "$(dashboard)"
      }
    ],
    "viewsContainers": {
      "activitybar": [
        {
          "id": "strata-explorer",
          "title": "Strata",
          "icon": "resources/strata.svg"
        }
      ]
    },
    "views": {
      "strata-explorer": [
        {
          "id": "strataWorkspace",
          "name": "Workspace",
          "contextualTitle": "Strata Workspace"
        },
        {
          "id": "strataDeployments",
          "name": "Deployments",
          "contextualTitle": "Strata Deployments"
        },
        {
          "id": "strataOperations",
          "name": "Operations",
          "contextualTitle": "Strata Operations"
        },
        {
          "id": "strataAudit",
          "name": "Audit Trail",
          "contextualTitle": "Strata Audit Trail"
        },
        {
          "id": "strataValues",
          "name": "Values",
          "contextualTitle": "Strata Values"
        },
        {
          "id": "strataPromotions",
          "name": "Promotions",
          "contextualTitle": "Strata Promotions"
        }
      ]
    },
    "menus": {
      "view/title": [
        {
          "command": "strata.refreshTreeView",
          "when": "view == strataWorkspace || view == strataDeployments || view == strataOperations || view == strataAudit || view == strataValues || view == strataPromotions",
          "group": "navigation"
        },
        {
          "command": "strata.selectDeployment",
          "when": "view == strataDeployments",
          "group": "navigation"
        },
        {
          "command": "strata.newFile",
          "when": "view == strataDeployments",
          "group": "navigation"
        },
        {
          "command": "strata.envDoctor",
          "when": "view == strataOperations",
          "group": "navigation"
        },
        {
          "command": "strata.auditExport",
          "when": "view == strataAudit",
          "group": "navigation"
        },
        {
          "command": "strata.auditFilter",
          "when": "view == strataAudit",
          "group": "navigation"
        },
        {
          "command": "strata.auditSetLimit",
          "when": "view == strataAudit",
          "group": "navigation"
        },
        {
          "command": "strata.showGuide",
          "when": "view == strataWorkspace",
          "group": "navigation"
        },
        {
          "command": "strata.addRepo",
          "when": "view == strataWorkspace",
          "group": "navigation"
        }
      ],
      "view/item/context": [
        {
          "command": "strata.showIntegrationHelp",
          "when": "view == strataWorkspace && (viewItem == tool || viewItem == tool-unavailable)",
          "group": "inline"
        },
        {
          "command": "strata.showIntegrationHelp",
          "when": "view == strataWorkspace && (viewItem == tool || viewItem == tool-unavailable)",
          "group": "strata@1"
        },
        {
          "command": "strata.activateProfile",
          "when": "view == strataWorkspace && viewItem == profile",
          "group": "strata@1"
        },
        {
          "command": "strata.syncRepo",
          "when": "view == strataWorkspace && viewItem == repository",
          "group": "strata@1"
        },
        {
          "command": "strata.removeRepo",
          "when": "view == strataWorkspace && viewItem == repository",
          "group": "strata@2"
        },
        {
          "command": "strata.openFile",
          "when": "view == strataDeployments && (viewItem == provider-item || viewItem == environment-item || viewItem == configuration-item)",
          "group": "strata@1"
        },
        {
          "command": "strata.setActiveDeployment",
          "when": "view == strataDeployments && viewItem == deployment-other",
          "group": "strata@1"
        },
        {
          "command": "strata.buildPlan",
          "when": "view == strataDeployments && viewItem == deployment-active",
          "group": "strata@1"
        },
        {
          "command": "strata.buildDryRun",
          "when": "view == strataDeployments && viewItem == deployment-active",
          "group": "strata@2"
        },
        {
          "command": "strata.deployDryRun",
          "when": "view == strataDeployments && viewItem == deployment-active",
          "group": "strata@3"
        },
        {
          "command": "strata.checkPolicy",
          "when": "view == strataDeployments && viewItem == deployment-active",
          "group": "strata@4"
        },
        {
          "command": "strata.copyOutputValue",
          "when": "view == strataOperations && viewItem == output-entry",
          "group": "strata@1"
        },
        {
          "command": "strata.auditResend",
          "when": "view == strataAudit && viewItem == entry",
          "group": "strata@1"
        },
        {
          "command": "strata.copyValueKey",
          "when": "view == strataValues && viewItem == value",
          "group": "strata@1"
        },
        {
          "command": "strata.promoteStart",
          "when": "view == strataPromotions && viewItem == ring",
          "group": "strata@1"
        },
        {
          "command": "strata.promoteRollback",
          "when": "view == strataPromotions && viewItem == ring",
          "group": "strata@2"
        }
      ],
      "editor/title": [
        {
          "command": "strata.validateCurrentFile",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata"
        }
      ],
      "editor/context": [
        {
          "command": "strata.envStatus",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@1"
        },
        {
          "command": "strata.envDrift",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@2"
        },
        {
          "command": "strata.validateCurrentFile",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@3"
        },
        {
          "command": "strata.auditChanges",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@4"
        },
        {
          "command": "strata.showValues",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@5"
        },
        {
          "command": "strata.buildSbom",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@6"
        },
        {
          "command": "strata.buildPlan",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@7"
        },
        {
          "command": "strata.checkPolicy",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@8"
        },
        {
          "command": "strata.lockStatus",
          "when": "resourceExtname == .yaml && strata.workspaceActive",
          "group": "strata@9"
        }
      ]
    },
    "configuration": {
      "title": "Strata",
      "properties": {
        "strata.cliPath": {
          "type": "string",
          "default": "strata",
          "description": "Path to the strata CLI. Use 'uv run strata' for uv-managed projects."
        },
        "strata.validateOnSave": {
          "type": "boolean",
          "default": true,
          "description": "Validate strata YAML files automatically when saved."
        },
        "strata.validateOnType": {
          "type": "boolean",
          "default": false,
          "description": "Validate strata YAML files as you type (debounced, 1.5 s delay). More responsive but heavier on CPU."
        },
        "strata.showCodeLens": {
          "type": "boolean",
          "default": true,
          "description": "Show Validate / Build / Deploy actions above strata YAML documents."
        },
        "strata.showStatusBar": {
          "type": "boolean",
          "default": true,
          "description": "Show workspace readiness and active profile in the status bar."
        },
        "strata.autoExportSchemas": {
          "type": "boolean",
          "default": false,
          "description": "Auto-export and wire JSON schemas when a workspace is opened."
        },
        "strata.showFileDecorations": {
          "type": "boolean",
          "default": true,
          "description": "Show validation status badges (✓/⚠️/❌) on strata files in the Explorer."
        },
        "strata.defaultProfile": {
          "type": "string",
          "default": "",
          "description": "Profile to activate automatically when the workspace opens. Leave empty to use the last active profile."
        }
      }
    },
    "taskDefinitions": [
      {
        "type": "strata",
        "required": [
          "command"
        ],
        "properties": {
          "command": {
            "type": "string",
            "enum": [
              "validate",
              "build",
              "deploy",
              "sbom"
            ],
            "description": "Strata operation to run."
          },
          "file": {
            "type": "string",
            "description": "YAML file path relative to the workspace root."
          },
          "dryRun": {
            "type": "boolean",
            "default": false,
            "description": "Run in dry-run mode (no changes applied)."
          },
          "stage": {
            "type": "string",
            "description": "Target a specific deployment stage."
          }
        }
      }
    ],
    "walkthroughs": [
      {
        "id": "strata.gettingStarted",
        "title": "Get started with Strata",
        "description": "Set up your infrastructure workspace in a few steps.",
        "steps": [
          {
            "id": "strata.gettingStarted.init",
            "title": "Initialize your workspace",
            "description": "Create the `.strata/` directory and solution registry.\n[Run strata sln init](command:strata.initWorkspace)",
            "media": {
              "markdown": "resources/walkthrough/init.md"
            }
          },
          {
            "id": "strata.gettingStarted.schemas",
            "title": "Wire YAML schemas",
            "description": "Enable autocomplete and inline validation for all strata YAML files.\n[Export & Wire Schemas](command:strata.exportSchemas)",
            "media": {
              "markdown": "resources/walkthrough/schemas.md"
            }
          },
          {
            "id": "strata.gettingStarted.guide",
            "title": "Check workspace readiness",
            "description": "See the 8-phase checklist and what to do next.\n[Show Guide](command:strata.showGuide)",
            "media": {
              "markdown": "resources/walkthrough/guide.md"
            }
          }
        ]
      }
    ]
  },
  "scripts": {
    "vscode:prepublish": "npm run compile",
    "compile": "tsc -p ./",
    "watch": "tsc -watch -p ./",
    "lint": "eslint src --ext ts",
    "test": "vscode-test"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",
    "@types/vscode": "^1.90.0",
    "@typescript-eslint/eslint-plugin": "^7.0.0",
    "@typescript-eslint/parser": "^7.0.0",
    "@vscode/test-cli": "^0.0.9",
    "@vscode/test-electron": "^2.4.0",
    "typescript": "^5.4.0"
  }
}