{ "name": "xboctuk-flow", "displayName": "XBOCTuK Flow", "description": "Local-first task management for solo developers and small teams", "version": "0.1.0", "publisher": "Ku6epXBOCTuK", "license": "MIT", "engines": { "vscode": "^1.96.0" }, "categories": [ "Other" ], "keywords": [ "tasks", "todo", "issues", "kanban", "project-management" ], "activationEvents": [ "onStartupFinished" ], "main": "./out/extension.js", "contributes": { "languages": [ { "id": "xflow", "aliases": [ "XBOCTuK Flow", "xflow" ], "extensions": [ ".xflow.md" ], "configuration": "./language-configuration.json" } ], "grammars": [ { "language": "xflow", "scopeName": "text.html.markdown.xflow", "path": "./syntaxes/xflow.tmLanguage.json" } ], "commands": [ { "command": "xboctukFlow.createTask", "title": "XBOCTuK Flow: Create Task", "icon": "$(add)" }, { "command": "xboctukFlow.openTask", "title": "XBOCTuK Flow: Open Task", "icon": "$(go-to-file)" }, { "command": "xboctukFlow.deleteTask", "title": "XBOCTuK Flow: Delete Task", "icon": "$(trash)" }, { "command": "xboctukFlow.changeStatus", "title": "XBOCTuK Flow: Change Status", "icon": "$(sync)" }, { "command": "xboctukFlow.editTaskStatus", "title": "XBOCTuK Flow: Edit Status (in file)" }, { "command": "xboctukFlow.editTaskPriority", "title": "XBOCTuK Flow: Edit Priority (in file)" }, { "command": "xboctukFlow.setAssigneeMe", "title": "XBOCTuK Flow: Set Assignee to Me" }, { "command": "xboctukFlow.editTaskTags", "title": "XBOCTuK Flow: Edit Tags (in file)" }, { "command": "xboctukFlow.addTagToProject", "title": "XBOCTuK Flow: Add Tag to Project" }, { "command": "xboctukFlow.openDashboard", "title": "XBOCTuK Flow: Open Dashboard", "icon": "$(dashboard)" }, { "command": "xboctukFlow.openInDashboard", "title": "XBOCTuK Flow: Open in Dashboard", "icon": "$(edit)" }, { "command": "xboctukFlow.openKanban", "title": "XBOCTuK Flow: Open Kanban", "icon": "$(layout)" } ], "configuration": { "title": "XBOCTuK Flow", "properties": { "xboctukFlow.projectPath": { "type": "string", "default": ".xflow", "description": "Path to project-level tasks folder (relative to workspace root)" }, "xboctukFlow.globalPath": { "type": "string", "default": "", "description": "Path to global tasks folder (absolute path, shared across projects)" } } }, "viewsContainers": { "activitybar": [ { "id": "xboctukFlow", "title": "XBOCTuK Flow", "icon": "media/icon.svg" } ] }, "views": { "xboctukFlow": [ { "type": "tree", "id": "xboctukFlow.tasks", "name": "Tasks", "icon": "media/icon.svg" } ] }, "menus": { "view/title": [ { "command": "xboctukFlow.createTask", "when": "view == xboctukFlow.tasks", "group": "navigation@1" }, { "command": "xboctukFlow.openDashboard", "when": "view == xboctukFlow.tasks", "group": "navigation@2" }, { "command": "xboctukFlow.openKanban", "when": "view == xboctukFlow.tasks", "group": "navigation@3" } ], "view/item/context": [ { "command": "xboctukFlow.openTask", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "inline@1" }, { "command": "xboctukFlow.openInDashboard", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "inline@2" }, { "command": "xboctukFlow.changeStatus", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "inline@3" }, { "command": "xboctukFlow.deleteTask", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "inline@4" }, { "command": "xboctukFlow.openTask", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "1_task@1" }, { "command": "xboctukFlow.openInDashboard", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "1_task@2" }, { "command": "xboctukFlow.changeStatus", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "1_task@3" }, { "command": "xboctukFlow.deleteTask", "when": "view == xboctukFlow.tasks && viewItem == task", "group": "1_task@4" } ] } }, "scripts": { "build": "vite build", "watch": "vite build --watch", "package": "vsce package --allow-missing-repository --no-rewrite-relative-links", "vscode:prepublish": "npm run build", "lint": "eslint .", "check": "npm run check:app && npm run check:test", "check:app": "tsc --noEmit -p tsconfig.app.json", "check:test": "tsc --noEmit -p tsconfig.test.json", "format": "prettier --write .", "test": "vitest", "test:run": "vitest run" }, "devDependencies": { "@eslint/compat": "^2.0.0", "@eslint/js": "^9.39.0", "@types/node": "^22.0.0", "@types/uuid": "^10.0.0", "@types/vscode": "^1.96.0", "@vitest/eslint-plugin": "^1.5.0", "@vscode/vsce": "^3.9.2", "eslint": "^9.39.0", "eslint-config-prettier": "^10.1.0", "globals": "^16.4.0", "typescript": "^5.7.0", "typescript-eslint": "^8.46.0", "vite": "^8.1.4", "vitest": "^4.1.10" }, "dependencies": { "front-matter": "^4.0.2", "js-yaml": "^5.2.1", "neverthrow": "^8.2.0", "prettier": "^3.9.5", "uuid": "^11.0.0" }, "repository": { "type": "git", "url": "" } }