Skip to content

Commit e22e124

Browse files
pablodeluccaPablo De Luccaclaude
authored
feat: v1.2.0 release — changelog modal, version indicator, and release notes (#186)
Add in-app changelog modal with version indicator that highlights new updates. Bump version to 1.2.0 and add comprehensive release notes covering external asset packs, bypass permissions, improved seating, diagnostics, and more. Co-authored-by: Pablo De Lucca <pablo@Pablos-Mac-mini.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent b717efb commit e22e124

12 files changed

Lines changed: 554 additions & 4 deletions

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,41 @@
11
# Changelog
22

3+
## v1.2.0
4+
5+
### Features
6+
7+
- **External asset packs** ([#169](https://github.com/pablodelucca/pixel-agents/pull/169)) — Load furniture assets from user-defined directories outside the extension, enabling third-party asset packs alongside built-in furniture. Add/remove directories via Settings modal with live palette refresh.
8+
- **Bypass permissions mode** ([#170](https://github.com/pablodelucca/pixel-agents/pull/170)) — Right-click the "+ Agent" button to launch with `--dangerously-skip-permissions`, skipping all tool-call approval prompts.
9+
- **Improved seating, sub-agent spawning, and background agents** ([#180](https://github.com/pablodelucca/pixel-agents/pull/180)) — Agents prefer seats facing electronics (PCs, monitors). Sub-agents spawn on the closest walkable tile to their parent instead of claiming seats. Background agents stay alive until their queue-operation completes.
10+
- **Agent connection diagnostics and JSONL parser resilience** ([#183](https://github.com/pablodelucca/pixel-agents/pull/183)) — Debug View shows agent connection state with diagnostic info. JSONL parser handles malformed/partial records gracefully. Simplified file watching to single poll for reliability.
11+
- **Browser preview mode** ([#143](https://github.com/pablodelucca/pixel-agents/pull/143)) — Preview the Pixel Agents webview in a browser for development and review.
12+
- **Always show overlay setting** — Option to keep agent overlay labels visible at all times, with reduced opacity for non-focused agents.
13+
14+
### Fixes
15+
16+
- **Agents not appearing on Linux Mint and macOS without a folder open** ([#70](https://github.com/pablodelucca/pixel-agents/pull/70)) — Falls back to `os.homedir()` when no workspace folder is open, matching Claude Code's own behavior.
17+
18+
### Testing
19+
20+
- **Playwright e2e tests** ([#161](https://github.com/pablodelucca/pixel-agents/pull/161)) — End-to-end test infrastructure using Playwright's Electron API with a mock Claude CLI, validating agent spawn flow in a real VS Code instance.
21+
22+
### Maintenance
23+
24+
- Add feature request template and update community docs ([#164](https://github.com/pablodelucca/pixel-agents/pull/164))
25+
- Bump Vite 8.0, ESLint 10, and various dependency updates
26+
- CI improvements: skip PR title check for Dependabot, restrict badge updates to main repo ([#181](https://github.com/pablodelucca/pixel-agents/pull/181))
27+
28+
### Contributors
29+
30+
Thank you to the contributors who made this release possible:
31+
32+
- [@marctebo](https://github.com/marctebo) — External asset packs support
33+
- [@dankadr](https://github.com/dankadr) — Bypass permissions mode
34+
- [@d4rkd0s](https://github.com/d4rkd0s) — Linux/macOS fix for no-folder workspaces
35+
- [@daniel-dallimore](https://github.com/daniel-dallimore) — Always show overlay setting
36+
- [@NNTin](https://github.com/NNTin) — Playwright e2e tests, browser preview mode
37+
- [@florintimbuc](https://github.com/florintimbuc) — Agent diagnostics, JSONL resilience, CI improvements, code review
38+
339
## v1.1.1
440

541
### Fixes

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "pixel-agents",
33
"displayName": "Pixel Agents",
44
"description": "Pixel art office where your Claude Code agents come to life as animated characters",
5-
"version": "1.1.1",
5+
"version": "1.2.0",
66
"publisher": "pablodelucca",
77
"repository": {
88
"type": "git",

src/PixelAgentsViewProvider.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
} from './assetLoader.js';
2828
import { readConfig, writeConfig } from './configPersistence.js';
2929
import {
30+
GLOBAL_KEY_LAST_SEEN_VERSION,
3031
GLOBAL_KEY_SOUND_ENABLED,
3132
LAYOUT_REVISION_KEY,
3233
WORKSPACE_KEY_AGENT_SEATS,
@@ -120,6 +121,8 @@ export class PixelAgentsViewProvider implements vscode.WebviewViewProvider {
120121
writeLayoutToFile(message.layout as Record<string, unknown>);
121122
} else if (message.type === 'setSoundEnabled') {
122123
this.context.globalState.update(GLOBAL_KEY_SOUND_ENABLED, message.enabled);
124+
} else if (message.type === 'setLastSeenVersion') {
125+
this.context.globalState.update(GLOBAL_KEY_LAST_SEEN_VERSION, message.version as string);
123126
} else if (message.type === 'webviewReady') {
124127
restoreAgents(
125128
this.context,
@@ -139,10 +142,18 @@ export class PixelAgentsViewProvider implements vscode.WebviewViewProvider {
139142
);
140143
// Send persisted settings to webview
141144
const soundEnabled = this.context.globalState.get<boolean>(GLOBAL_KEY_SOUND_ENABLED, true);
145+
const lastSeenVersion = this.context.globalState.get<string>(
146+
GLOBAL_KEY_LAST_SEEN_VERSION,
147+
'',
148+
);
149+
const extensionVersion =
150+
(this.context.extension.packageJSON as { version?: string }).version ?? '';
142151
const config = readConfig();
143152
this.webview?.postMessage({
144153
type: 'settingsLoaded',
145154
soundEnabled,
155+
lastSeenVersion,
156+
extensionVersion,
146157
externalAssetDirectories: config.externalAssetDirectories,
147158
});
148159

src/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const LAYOUT_REVISION_KEY = 'layoutRevision';
1919

2020
// ── Settings Persistence ────────────────────────────────────
2121
export const GLOBAL_KEY_SOUND_ENABLED = 'pixel-agents.soundEnabled';
22+
export const GLOBAL_KEY_LAST_SEEN_VERSION = 'pixel-agents.lastSeenVersion';
2223

2324
// ── VS Code Identifiers ─────────────────────────────────────
2425
export const VIEW_ID = 'pixel-agents.panelView';

webview-ui/src/App.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { useCallback, useEffect, useRef, useState } from 'react';
22

3+
import { toMajorMinor } from './changelogData.js';
34
import { BottomToolbar } from './components/BottomToolbar.js';
5+
import { ChangelogModal } from './components/ChangelogModal.js';
46
import { DebugView } from './components/DebugView.js';
7+
import { VersionIndicator } from './components/VersionIndicator.js';
58
import { ZoomControls } from './components/ZoomControls.js';
69
import { PULSE_ANIMATION_DURATION_SEC } from './constants.js';
710
import { useEditorActions } from './hooks/useEditorActions.js';
@@ -148,15 +151,29 @@ function App() {
148151
loadedAssets,
149152
workspaceFolders,
150153
externalAssetDirectories,
154+
lastSeenVersion,
155+
extensionVersion,
151156
} = useExtensionMessages(getOfficeState, editor.setLastSavedLayout, isEditDirty);
152157

153158
// Show migration notice once layout reset is detected
154159
const [migrationNoticeDismissed, setMigrationNoticeDismissed] = useState(false);
155160
const showMigrationNotice = layoutWasReset && !migrationNoticeDismissed;
156161

162+
const [isChangelogOpen, setIsChangelogOpen] = useState(false);
157163
const [isDebugMode, setIsDebugMode] = useState(false);
158164
const [alwaysShowOverlay, setAlwaysShowOverlay] = useState(false);
159165

166+
const currentMajorMinor = toMajorMinor(extensionVersion);
167+
168+
const handleWhatsNewDismiss = useCallback(() => {
169+
vscode.postMessage({ type: 'setLastSeenVersion', version: currentMajorMinor });
170+
}, [currentMajorMinor]);
171+
172+
const handleOpenChangelog = useCallback(() => {
173+
setIsChangelogOpen(true);
174+
vscode.postMessage({ type: 'setLastSeenVersion', version: currentMajorMinor });
175+
}, [currentMajorMinor]);
176+
160177
const handleToggleDebugMode = useCallback(() => setIsDebugMode((prev) => !prev), []);
161178
const handleToggleAlwaysShowOverlay = useCallback(
162179
() => setAlwaysShowOverlay((prev) => !prev),
@@ -291,6 +308,19 @@ function App() {
291308
externalAssetDirectories={externalAssetDirectories}
292309
/>
293310

311+
<VersionIndicator
312+
currentVersion={extensionVersion}
313+
lastSeenVersion={lastSeenVersion}
314+
onDismiss={handleWhatsNewDismiss}
315+
onOpenChangelog={handleOpenChangelog}
316+
/>
317+
318+
<ChangelogModal
319+
isOpen={isChangelogOpen}
320+
onClose={() => setIsChangelogOpen(false)}
321+
currentVersion={extensionVersion}
322+
/>
323+
294324
{editor.isEditMode && editor.isDirty && (
295325
<EditActionBar editor={editor} editorState={editorState} />
296326
)}

webview-ui/src/browserMock.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,12 @@ export function dispatchMockMessages(): void {
264264
dispatch({ type: 'wallTilesLoaded', sets: wallSets });
265265
dispatch({ type: 'furnitureAssetsLoaded', catalog: furnitureCatalog, sprites: furnitureSprites });
266266
dispatch({ type: 'layoutLoaded', layout });
267-
dispatch({ type: 'settingsLoaded', soundEnabled: false });
267+
dispatch({
268+
type: 'settingsLoaded',
269+
soundEnabled: false,
270+
extensionVersion: '1.2.0',
271+
lastSeenVersion: '1.1',
272+
});
268273

269274
console.log('[BrowserMock] Messages dispatched');
270275
}

webview-ui/src/changelogData.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
export interface ChangelogSection {
2+
title: string;
3+
items: string[];
4+
}
5+
6+
export interface ChangelogContributor {
7+
name: string;
8+
url: string;
9+
description: string;
10+
}
11+
12+
export interface ChangelogEntry {
13+
version: string;
14+
sections: ChangelogSection[];
15+
contributors: ChangelogContributor[];
16+
}
17+
18+
/** Extract "major.minor" from a semver string (e.g. "1.1.1" → "1.1") */
19+
export function toMajorMinor(version: string): string {
20+
const parts = version.split('.');
21+
return parts.length >= 2 ? `${parts[0]}.${parts[1]}` : version;
22+
}
23+
24+
export const CHANGELOG_REPO_URL = 'https://github.com/pablodelucca/pixel-agents';
25+
26+
export const changelogEntries: ChangelogEntry[] = [
27+
{
28+
version: '1.2',
29+
sections: [
30+
{
31+
title: 'Features',
32+
items: [
33+
'Bypass permissions mode — right-click "+ Agent" to skip tool approvals',
34+
'External asset packs — load furniture from user-defined directories',
35+
'Improved seating, sub-agent spawning, and background agent support',
36+
'Always show overlay setting for agent labels',
37+
'Agent connection diagnostics and JSONL parser resilience',
38+
'Browser preview mode for development and review',
39+
],
40+
},
41+
{
42+
title: 'Fixes',
43+
items: ['Agents not appearing on Linux Mint/macOS when no folder is open'],
44+
},
45+
{
46+
title: 'Testing',
47+
items: ['Playwright e2e tests with mock Claude CLI'],
48+
},
49+
{
50+
title: 'Maintenance',
51+
items: [
52+
'Bump Vite 8.0, ESLint 10, and various dependency updates',
53+
'CI improvements for Dependabot and badge updates',
54+
],
55+
},
56+
],
57+
contributors: [
58+
{
59+
name: '@marctebo',
60+
url: 'https://github.com/marctebo',
61+
description: 'External asset packs support',
62+
},
63+
{
64+
name: '@dankadr',
65+
url: 'https://github.com/dankadr',
66+
description: 'Bypass permissions mode',
67+
},
68+
{
69+
name: '@d4rkd0s',
70+
url: 'https://github.com/d4rkd0s',
71+
description: 'Linux/macOS fix for no-folder workspaces',
72+
},
73+
{
74+
name: '@daniel-dallimore',
75+
url: 'https://github.com/daniel-dallimore',
76+
description: 'Always show overlay setting',
77+
},
78+
{
79+
name: '@NNTin',
80+
url: 'https://github.com/NNTin',
81+
description: 'Playwright e2e tests, browser preview mode',
82+
},
83+
{
84+
name: '@florintimbuc',
85+
url: 'https://github.com/florintimbuc',
86+
description: 'Agent diagnostics, JSONL resilience, CI improvements',
87+
},
88+
],
89+
},
90+
];

0 commit comments

Comments
 (0)