All checks were successful
CI / Build & test (Node 22) (push) Successful in 10m17s
CI / Build & test (Node 24) (push) Successful in 10m13s
CI / No em/en dashes (push) Successful in 4s
Deploy site (production) / build-and-deploy (push) Successful in 24s
Release / Publish to Gitea npm registry (push) Successful in 10m17s
VSCode Release / Package VSIX (push) Successful in 9m39s
Desktop Release / Build Linux (AppImage + deb) (push) Successful in 15m41s
CI / Pack & boot smoke (Node 22) (push) Successful in 10m3s
« Démarrer le projet » : un repo définit une fois ses commandes de démarrage (serveur de dev, API, base de données), un clic ouvre un terminal PTY par commande dans le dock IDE. Serveur (additif, PROTOCOL_VERSION inchangé) : - LaunchCommand[] persistées sur repos.launch_commands (migration 13) ; champ additif SessionSummary.launchRunId. - POST /repos/:id/launch : résolution du worktree côté serveur, cwd de commande borné (anti-traversal), commandIds outrepasse enabled. - GET /repos/:id/launch/detect : détection package.json / Procfile / docker-compose. - Shell de login interactif ($SHELL -l -i, charge le PATH nvm/asdf) + auto-type de la commande ; le shell survit à la commande (échec visible). Web : LaunchProjectModal + actions (ProjectTreeNode, SessionsPanel, CommandPalette), stores sessions/worktrees, i18n EN/FR. Alignement du reste du projet : - Extension VS Code 0.4.0 : commande Start Project (repo/worktree), Stop Launch, badge « launch » dans l'arbre, méthode REST startLaunch. - Site vitrine : 16e feature card (Rocket) + section showcase « Start the project » (mockup fidèle au modal), i18n EN/FR. - Documentation : README (EN + FR), help-content (EN + FR), CHANGELOGs server + vscode. Vérifié : 430 tests, typecheck, build (web + site + vscode), acceptance-p13 ALL GREEN, VSIX packagé, garde anti-tirets, vérif visuelle du site (thèmes clair et sombre).
470 lines
13 KiB
JSON
470 lines
13 KiB
JSON
{
|
|
"name": "git-arboretum",
|
|
"displayName": "Arboretum",
|
|
"description": "Pilot your git worktrees and Claude Code sessions from VS Code: native terminals, live tree, waiting alerts.",
|
|
"version": "0.4.0",
|
|
"private": true,
|
|
"publisher": "johanleroy",
|
|
"license": "MIT",
|
|
"engines": {
|
|
"vscode": "^1.85.0"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://git.lidge.fr/johanleroy/arboretum"
|
|
},
|
|
"categories": [
|
|
"SCM Providers",
|
|
"Other"
|
|
],
|
|
"keywords": [
|
|
"git",
|
|
"worktree",
|
|
"claude",
|
|
"terminal",
|
|
"arboretum"
|
|
],
|
|
"main": "./dist/extension.js",
|
|
"activationEvents": [
|
|
"onStartupFinished"
|
|
],
|
|
"contributes": {
|
|
"configuration": {
|
|
"title": "Arboretum",
|
|
"properties": {
|
|
"arboretum.url": {
|
|
"type": "string",
|
|
"default": "http://127.0.0.1:7317",
|
|
"markdownDescription": "Base URL of the Arboretum daemon (REST + WebSocket). Defaults to the loopback bind."
|
|
},
|
|
"arboretum.showExternalSessions": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"markdownDescription": "Show Claude sessions discovered outside Arboretum (started from the CLI) in the trees. Off by default to avoid clutter."
|
|
},
|
|
"arboretum.showArchivedSessions": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"markdownDescription": "Show finished sessions that Arboretum auto-archived after their retention window. Off by default to keep the trees focused on live work."
|
|
},
|
|
"arboretum.notifyOnWaiting": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"markdownDescription": "Show a native notification when a Claude session starts waiting for input."
|
|
}
|
|
}
|
|
},
|
|
"viewsContainers": {
|
|
"activitybar": [
|
|
{
|
|
"id": "arboretum",
|
|
"title": "Arboretum",
|
|
"icon": "media/arboretum.svg"
|
|
}
|
|
]
|
|
},
|
|
"views": {
|
|
"arboretum": [
|
|
{
|
|
"id": "arboretum.repos",
|
|
"name": "Repositories",
|
|
"icon": "media/arboretum.svg"
|
|
},
|
|
{
|
|
"id": "arboretum.groups",
|
|
"name": "Groups",
|
|
"icon": "media/arboretum.svg"
|
|
}
|
|
]
|
|
},
|
|
"viewsWelcome": [
|
|
{
|
|
"view": "arboretum.repos",
|
|
"contents": "Not connected to an Arboretum daemon.\n[Sign in](command:arboretum.signIn)\n\nMake sure the daemon is running (`npx @johanleroy/git-arboretum`) and paste a token.",
|
|
"when": "!arboretum.connected"
|
|
}
|
|
],
|
|
"commands": [
|
|
{
|
|
"command": "arboretum.signIn",
|
|
"title": "Sign In",
|
|
"category": "Arboretum"
|
|
},
|
|
{
|
|
"command": "arboretum.signOut",
|
|
"title": "Sign Out",
|
|
"category": "Arboretum"
|
|
},
|
|
{
|
|
"command": "arboretum.refresh",
|
|
"title": "Refresh",
|
|
"category": "Arboretum",
|
|
"icon": "$(refresh)"
|
|
},
|
|
{
|
|
"command": "arboretum.openDashboard",
|
|
"title": "Open Dashboard in Browser",
|
|
"category": "Arboretum",
|
|
"icon": "$(globe)"
|
|
},
|
|
{
|
|
"command": "arboretum.attachSession",
|
|
"title": "Attach Terminal",
|
|
"category": "Arboretum",
|
|
"icon": "$(terminal)"
|
|
},
|
|
{
|
|
"command": "arboretum.observeSession",
|
|
"title": "Observe Terminal (read-only)",
|
|
"category": "Arboretum",
|
|
"icon": "$(eye)"
|
|
},
|
|
{
|
|
"command": "arboretum.answerSession",
|
|
"title": "Answer Prompt…",
|
|
"category": "Arboretum",
|
|
"icon": "$(comment-discussion)"
|
|
},
|
|
{
|
|
"command": "arboretum.killSession",
|
|
"title": "Kill Session",
|
|
"category": "Arboretum",
|
|
"icon": "$(trash)"
|
|
},
|
|
{
|
|
"command": "arboretum.hideSession",
|
|
"title": "Hide Session",
|
|
"category": "Arboretum",
|
|
"icon": "$(eye-closed)"
|
|
},
|
|
{
|
|
"command": "arboretum.resumeSession",
|
|
"title": "Resume Session",
|
|
"category": "Arboretum",
|
|
"icon": "$(debug-restart)"
|
|
},
|
|
{
|
|
"command": "arboretum.forkSession",
|
|
"title": "Fork Session",
|
|
"category": "Arboretum",
|
|
"icon": "$(git-branch)"
|
|
},
|
|
{
|
|
"command": "arboretum.createWorktree",
|
|
"title": "Create Worktree…",
|
|
"category": "Arboretum",
|
|
"icon": "$(add)"
|
|
},
|
|
{
|
|
"command": "arboretum.commitWorktree",
|
|
"title": "Commit…",
|
|
"category": "Arboretum",
|
|
"icon": "$(git-commit)"
|
|
},
|
|
{
|
|
"command": "arboretum.pushWorktree",
|
|
"title": "Push",
|
|
"category": "Arboretum",
|
|
"icon": "$(repo-push)"
|
|
},
|
|
{
|
|
"command": "arboretum.fetchWorktree",
|
|
"title": "Fetch",
|
|
"category": "Arboretum",
|
|
"icon": "$(cloud-download)"
|
|
},
|
|
{
|
|
"command": "arboretum.pullWorktree",
|
|
"title": "Pull…",
|
|
"category": "Arboretum",
|
|
"icon": "$(arrow-down)"
|
|
},
|
|
{
|
|
"command": "arboretum.promoteWorktree",
|
|
"title": "Promote to Main",
|
|
"category": "Arboretum",
|
|
"icon": "$(arrow-up)"
|
|
},
|
|
{
|
|
"command": "arboretum.openWorktreeIde",
|
|
"title": "Open Worktree IDE",
|
|
"category": "Arboretum",
|
|
"icon": "$(link-external)"
|
|
},
|
|
{
|
|
"command": "arboretum.startSession",
|
|
"title": "Start Claude Session",
|
|
"category": "Arboretum",
|
|
"icon": "$(play)"
|
|
},
|
|
{
|
|
"command": "arboretum.startGroupSession",
|
|
"title": "Start Group Session…",
|
|
"category": "Arboretum",
|
|
"icon": "$(play)"
|
|
},
|
|
{
|
|
"command": "arboretum.startProject",
|
|
"title": "Start Project",
|
|
"category": "Arboretum",
|
|
"icon": "$(rocket)"
|
|
},
|
|
{
|
|
"command": "arboretum.stopLaunch",
|
|
"title": "Stop Launch",
|
|
"category": "Arboretum",
|
|
"icon": "$(stop-circle)"
|
|
},
|
|
{
|
|
"command": "arboretum.startSessionHere",
|
|
"title": "Start Session in Current Folder",
|
|
"category": "Arboretum"
|
|
},
|
|
{
|
|
"command": "arboretum.createWorktreeHere",
|
|
"title": "Create Worktree for Current Folder…",
|
|
"category": "Arboretum"
|
|
},
|
|
{
|
|
"command": "arboretum.revealWorktree",
|
|
"title": "Reveal Worktree for Current Folder",
|
|
"category": "Arboretum"
|
|
}
|
|
],
|
|
"menus": {
|
|
"view/title": [
|
|
{
|
|
"command": "arboretum.refresh",
|
|
"when": "view == arboretum.repos || view == arboretum.groups",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "arboretum.openDashboard",
|
|
"when": "view == arboretum.repos",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "arboretum.signOut",
|
|
"when": "view == arboretum.repos && arboretum.connected",
|
|
"group": "1_auth"
|
|
},
|
|
{
|
|
"command": "arboretum.signIn",
|
|
"when": "view == arboretum.repos && !arboretum.connected",
|
|
"group": "1_auth"
|
|
}
|
|
],
|
|
"view/item/context": [
|
|
{
|
|
"command": "arboretum.createWorktree",
|
|
"when": "viewItem == arboretum:repo",
|
|
"group": "inline"
|
|
},
|
|
{
|
|
"command": "arboretum.startSession",
|
|
"when": "viewItem == arboretum:repo",
|
|
"group": "1_session"
|
|
},
|
|
{
|
|
"command": "arboretum.startProject",
|
|
"when": "viewItem == arboretum:repo",
|
|
"group": "1_session"
|
|
},
|
|
{
|
|
"command": "arboretum.openWorktreeIde",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "inline"
|
|
},
|
|
{
|
|
"command": "arboretum.commitWorktree",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "1_git"
|
|
},
|
|
{
|
|
"command": "arboretum.pushWorktree",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "1_git"
|
|
},
|
|
{
|
|
"command": "arboretum.fetchWorktree",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "1_git"
|
|
},
|
|
{
|
|
"command": "arboretum.pullWorktree",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "1_git"
|
|
},
|
|
{
|
|
"command": "arboretum.promoteWorktree",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "2_git"
|
|
},
|
|
{
|
|
"command": "arboretum.openWorktreeIde",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "2_git"
|
|
},
|
|
{
|
|
"command": "arboretum.startSession",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "3_session"
|
|
},
|
|
{
|
|
"command": "arboretum.startProject",
|
|
"when": "viewItem == arboretum:worktree",
|
|
"group": "3_session"
|
|
},
|
|
{
|
|
"command": "arboretum.attachSession",
|
|
"when": "viewItem =~ /arboretum:session:live/",
|
|
"group": "inline"
|
|
},
|
|
{
|
|
"command": "arboretum.observeSession",
|
|
"when": "viewItem =~ /arboretum:session:live/",
|
|
"group": "1_term"
|
|
},
|
|
{
|
|
"command": "arboretum.answerSession",
|
|
"when": "viewItem =~ /arboretum:session:live:.*waiting/",
|
|
"group": "1_term"
|
|
},
|
|
{
|
|
"command": "arboretum.killSession",
|
|
"when": "viewItem =~ /arboretum:session:live/",
|
|
"group": "9_danger"
|
|
},
|
|
{
|
|
"command": "arboretum.stopLaunch",
|
|
"when": "viewItem =~ /arboretum:session:live.*:launch/",
|
|
"group": "9_danger"
|
|
},
|
|
{
|
|
"command": "arboretum.resumeSession",
|
|
"when": "viewItem =~ /arboretum:session:dead/",
|
|
"group": "inline"
|
|
},
|
|
{
|
|
"command": "arboretum.forkSession",
|
|
"when": "viewItem =~ /arboretum:session/",
|
|
"group": "2_term"
|
|
},
|
|
{
|
|
"command": "arboretum.hideSession",
|
|
"when": "viewItem =~ /arboretum:session:.*discovered/",
|
|
"group": "9_danger"
|
|
},
|
|
{
|
|
"command": "arboretum.startGroupSession",
|
|
"when": "viewItem == arboretum:group",
|
|
"group": "inline"
|
|
}
|
|
],
|
|
"commandPalette": [
|
|
{
|
|
"command": "arboretum.refresh",
|
|
"when": "arboretum.connected"
|
|
},
|
|
{
|
|
"command": "arboretum.signOut",
|
|
"when": "arboretum.connected"
|
|
},
|
|
{
|
|
"command": "arboretum.attachSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.observeSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.answerSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.killSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.hideSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.resumeSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.forkSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.createWorktree",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.commitWorktree",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.pushWorktree",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.fetchWorktree",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.pullWorktree",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.promoteWorktree",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.openWorktreeIde",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.startSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.startGroupSession",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.startProject",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.stopLaunch",
|
|
"when": "false"
|
|
},
|
|
{
|
|
"command": "arboretum.revealWorktree",
|
|
"when": "false"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"scripts": {
|
|
"typecheck": "tsc -p . --noEmit",
|
|
"build": "npm run typecheck && node esbuild.mjs",
|
|
"dev": "node esbuild.mjs --watch",
|
|
"vscode:prepublish": "node esbuild.mjs",
|
|
"package": "vsce package --no-dependencies"
|
|
},
|
|
"devDependencies": {
|
|
"@arboretum/shared": "0.1.0",
|
|
"@types/node": "^22.10.0",
|
|
"@types/vscode": "^1.85.0",
|
|
"@types/ws": "^8.5.0",
|
|
"@vscode/vsce": "^3.2.0",
|
|
"esbuild": "^0.21.0",
|
|
"typescript": "^5.7.0",
|
|
"ws": "^8.18.0"
|
|
}
|
|
}
|