chore: P0 skeleton

Bootstrap the Dashward repo per arch/UBUNTU-DASHBOARD-SPACE.md:

- pnpm-workspaces monorepo (sdk, extension, container, widgets-builtin/*)
- GNOME extension stub (metadata.json, src/*.ts placeholders for warden,
  guard, supervisor, entry UX, DBus service)
- WebKit container stub (GJS main + page-side runtime + dashboard.html)
- TypeScript widget SDK (defineWidget + types)
- Builtin clock widget as the first SDK consumer example
- DBus interface XML (proto/shell.iface.xml) and shared types
- esbuild configs for extension and container; tsc for SDK
- Design doc copied in at repo root for discoverability

No functional logic yet -- all components are placeholders that compose
in extension.ts so the build chain can be exercised. P1 (workspace
warden) starts next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
h z
2026-05-22 23:00:02 +01:00
commit 3bf3aa1989
41 changed files with 1361 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js';
import { WorkspaceWarden } from './workspace-warden.js';
import { WindowGuard } from './window-guard.js';
import { ContainerSupervisor } from './container-supervisor.js';
import { EntryUX } from './entry-ux.js';
import { DBusService } from './dbus-service.js';
export default class DashwardExtension extends Extension {
private warden?: WorkspaceWarden;
private guard?: WindowGuard;
private container?: ContainerSupervisor;
private entry?: EntryUX;
private dbus?: DBusService;
enable(): void {
log('[Dashward] enable: P0 skeleton — components not wired yet');
this.warden = new WorkspaceWarden();
this.guard = new WindowGuard();
this.container = new ContainerSupervisor();
this.entry = new EntryUX();
this.dbus = new DBusService();
}
disable(): void {
log('[Dashward] disable');
this.dbus?.dispose();
this.entry?.dispose();
this.container?.dispose();
this.guard?.dispose();
this.warden?.dispose();
this.dbus = undefined;
this.entry = undefined;
this.container = undefined;
this.guard = undefined;
this.warden = undefined;
}
}
declare function log(msg: string): void;