@blackbelt-technology/pi-agent-dashboard 0.4.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +342 -267
- package/README.md +51 -2
- package/docs/architecture.md +266 -25
- package/package.json +14 -4
- package/packages/extension/package.json +2 -2
- package/packages/extension/src/__tests__/build-provider-catalogue.test.ts +176 -0
- package/packages/extension/src/__tests__/markdown-image-inliner.test.ts +355 -0
- package/packages/extension/src/__tests__/openspec-activity-detector.test.ts +68 -0
- package/packages/extension/src/__tests__/prompt-bus.test.ts +44 -0
- package/packages/extension/src/__tests__/prompt-expander.test.ts +45 -0
- package/packages/extension/src/__tests__/server-launcher.test.ts +24 -1
- package/packages/extension/src/__tests__/vcs-info-jj.test.ts +145 -0
- package/packages/extension/src/__tests__/{git-info.test.ts → vcs-info.test.ts} +6 -6
- package/packages/extension/src/bridge-context.ts +7 -0
- package/packages/extension/src/bridge.ts +142 -4
- package/packages/extension/src/command-handler.ts +6 -0
- package/packages/extension/src/markdown-image-inliner.ts +268 -0
- package/packages/extension/src/model-tracker.ts +35 -1
- package/packages/extension/src/prompt-bus.ts +4 -3
- package/packages/extension/src/prompt-expander.ts +50 -2
- package/packages/extension/src/provider-register.ts +117 -0
- package/packages/extension/src/server-launcher.ts +18 -1
- package/packages/extension/src/session-sync.ts +6 -1
- package/packages/extension/src/vcs-info.ts +184 -0
- package/packages/server/package.json +4 -4
- package/packages/server/src/__tests__/auto-attach-slug-defense.test.ts +104 -0
- package/packages/server/src/__tests__/bootstrap-install-from-list.test.ts +263 -0
- package/packages/server/src/__tests__/browser-gateway-snapshot-on-connect.test.ts +143 -0
- package/packages/server/src/__tests__/build-auth-status.test.ts +190 -0
- package/packages/server/src/__tests__/cold-boot-openspec-broadcast.test.ts +161 -0
- package/packages/server/src/__tests__/doctor-route.test.ts +132 -0
- package/packages/server/src/__tests__/event-wiring-providers-list.test.ts +87 -0
- package/packages/server/src/__tests__/has-openspec-dir.test.ts +64 -0
- package/packages/server/src/__tests__/health-shape.test.ts +43 -0
- package/packages/server/src/__tests__/idle-timer-respects-terminals.test.ts +115 -0
- package/packages/server/src/__tests__/is-unread-trigger.test.ts +4 -2
- package/packages/server/src/__tests__/jj-routes.test.ts +93 -0
- package/packages/server/src/__tests__/openspec-connect-snapshot.test.ts +92 -0
- package/packages/server/src/__tests__/openspec-tasks-parser.test.ts +114 -0
- package/packages/server/src/__tests__/pi-core-updater-managed-path.test.ts +177 -0
- package/packages/server/src/__tests__/process-manager-codes.test.ts +80 -0
- package/packages/server/src/__tests__/process-manager-managed-path.test.ts +73 -0
- package/packages/server/src/__tests__/provider-auth-storage.test.ts +42 -11
- package/packages/server/src/__tests__/provider-catalogue-cache.test.ts +54 -0
- package/packages/server/src/__tests__/session-action-handler-spawn-error.test.ts +17 -2
- package/packages/server/src/__tests__/session-action-handler-spawn.test.ts +150 -0
- package/packages/server/src/__tests__/session-diff-vcs.test.ts +61 -0
- package/packages/server/src/__tests__/session-discovery-skill-firstmessage.test.ts +95 -0
- package/packages/server/src/__tests__/spawn-failure-log.test.ts +118 -0
- package/packages/server/src/__tests__/spawn-preflight.test.ts +91 -0
- package/packages/server/src/__tests__/spawn-register-watchdog.test.ts +166 -0
- package/packages/server/src/__tests__/subscription-handler.test.ts +98 -6
- package/packages/server/src/__tests__/system-routes-reextract.test.ts +91 -0
- package/packages/server/src/__tests__/system-routes-restart.test.ts +4 -4
- package/packages/server/src/__tests__/system-routes-spawn-failures.test.ts +84 -0
- package/packages/server/src/__tests__/terminal-manager.test.ts +45 -0
- package/packages/server/src/bootstrap-install-from-list.ts +232 -0
- package/packages/server/src/bootstrap-state.ts +18 -0
- package/packages/server/src/browser-gateway.ts +58 -21
- package/packages/server/src/browser-handlers/directory-handler.ts +4 -0
- package/packages/server/src/browser-handlers/session-action-handler.ts +60 -2
- package/packages/server/src/browser-handlers/subscription-handler.ts +50 -3
- package/packages/server/src/cli.ts +22 -0
- package/packages/server/src/directory-service.ts +31 -0
- package/packages/server/src/event-wiring.ts +57 -2
- package/packages/server/src/home-lock.d.ts +124 -0
- package/packages/server/src/home-lock.js +330 -0
- package/packages/server/src/home-lock.js.map +1 -0
- package/packages/server/src/idle-timer.ts +15 -1
- package/packages/server/src/openspec-tasks.ts +50 -19
- package/packages/server/src/pi-core-updater.ts +65 -9
- package/packages/server/src/pi-gateway.ts +6 -0
- package/packages/server/src/process-manager.ts +62 -11
- package/packages/server/src/provider-auth-handlers.ts +9 -0
- package/packages/server/src/provider-auth-storage.ts +83 -51
- package/packages/server/src/provider-catalogue-cache.ts +41 -0
- package/packages/server/src/routes/doctor-routes.ts +140 -0
- package/packages/server/src/routes/jj-routes.ts +386 -0
- package/packages/server/src/routes/provider-auth-routes.ts +9 -0
- package/packages/server/src/routes/session-routes.ts +12 -3
- package/packages/server/src/routes/system-routes.ts +38 -1
- package/packages/server/src/server.ts +16 -9
- package/packages/server/src/session-bootstrap.ts +27 -12
- package/packages/server/src/session-diff.ts +118 -1
- package/packages/server/src/session-discovery.ts +10 -3
- package/packages/server/src/session-scanner.ts +4 -2
- package/packages/server/src/spawn-failure-log.ts +130 -0
- package/packages/server/src/spawn-preflight.ts +82 -0
- package/packages/server/src/spawn-register-watchdog.ts +236 -0
- package/packages/server/src/terminal-manager.ts +12 -1
- package/packages/shared/package.json +1 -1
- package/packages/shared/src/__tests__/bootstrap/__snapshots__/cube.test.ts.snap +1 -0
- package/packages/shared/src/__tests__/bootstrap/families/__snapshots__/g-windows-specifics.test.ts.snap +1 -0
- package/packages/shared/src/__tests__/bootstrap-install-resolve-npm.test.ts +72 -0
- package/packages/shared/src/__tests__/browser-protocol-types.test.ts +47 -1
- package/packages/shared/src/__tests__/config.test.ts +48 -0
- package/packages/shared/src/__tests__/dashboard-starter.test.ts +40 -0
- package/packages/shared/src/__tests__/detached-spawn.test.ts +24 -0
- package/packages/shared/src/__tests__/doctor-core.test.ts +134 -0
- package/packages/shared/src/__tests__/doctor-fault-tolerance.test.ts +218 -0
- package/packages/shared/src/__tests__/doctor-format.test.ts +121 -0
- package/packages/shared/src/__tests__/install-managed-node-bootstrap-order.test.ts +68 -0
- package/packages/shared/src/__tests__/install-managed-node.test.ts +192 -0
- package/packages/shared/src/__tests__/installable-list.test.ts +130 -0
- package/packages/shared/src/__tests__/managed-node-path.test.ts +122 -0
- package/packages/shared/src/__tests__/managed-runtime-strategy.test.ts +74 -0
- package/packages/shared/src/__tests__/no-installable-list-in-bridge.test.ts +52 -0
- package/packages/shared/src/__tests__/no-raw-openspec-status-in-skills.test.ts +6 -1
- package/packages/shared/src/__tests__/platform-jj.test.ts +339 -0
- package/packages/shared/src/__tests__/skill-block-parser.test.ts +153 -0
- package/packages/shared/src/__tests__/tool-registry-definitions.test.ts +18 -2
- package/packages/shared/src/bootstrap-install.ts +196 -2
- package/packages/shared/src/browser-protocol.ts +112 -1
- package/packages/shared/src/config.ts +29 -0
- package/packages/shared/src/dashboard-starter.ts +33 -0
- package/packages/shared/src/diff-types.ts +17 -0
- package/packages/shared/src/doctor-core.ts +821 -0
- package/packages/shared/src/index.ts +9 -0
- package/packages/shared/src/installable-list.ts +152 -0
- package/packages/shared/src/launch-source-flag.ts +14 -0
- package/packages/shared/src/launch-source-types.ts +18 -0
- package/packages/shared/src/openspec-activity-detector.ts +25 -7
- package/packages/shared/src/platform/detached-spawn.ts +13 -2
- package/packages/shared/src/platform/jj.ts +405 -0
- package/packages/shared/src/platform/managed-node-path.ts +77 -0
- package/packages/shared/src/protocol.ts +60 -2
- package/packages/shared/src/rest-api.ts +4 -0
- package/packages/shared/src/skill-block-parser.ts +115 -0
- package/packages/shared/src/tool-registry/__tests__/managed-runtime-strategy.test.ts +166 -0
- package/packages/shared/src/tool-registry/definitions.ts +19 -5
- package/packages/shared/src/tool-registry/strategies.ts +42 -0
- package/packages/shared/src/types.ts +91 -0
- package/packages/extension/src/git-info.ts +0 -55
|
@@ -4,6 +4,31 @@ export type SessionSource = "tui" | "zed" | "tmux" | "dashboard" | "terminal" |
|
|
|
4
4
|
/** Current status of a session */
|
|
5
5
|
export type SessionStatus = "active" | "idle" | "streaming" | "ended";
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Per-session jj (Jujutsu) probe state. Populated by the bridge when the
|
|
9
|
+
* cwd contains a `.jj/` directory and the `jj` tool resolves; otherwise
|
|
10
|
+
* left undefined.
|
|
11
|
+
* See change: add-jj-workspace-plugin.
|
|
12
|
+
*/
|
|
13
|
+
export interface JjState {
|
|
14
|
+
/** True iff cwd is inside a jj repo (`.jj/` reachable). */
|
|
15
|
+
isJjRepo: boolean;
|
|
16
|
+
/** True iff the repo is jj-colocated with git (both `.jj/` and `.git/`). */
|
|
17
|
+
isColocated: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Name of the workspace whose working copy is at this cwd.
|
|
20
|
+
* `"default"` for the original/source workspace; user-named for siblings
|
|
21
|
+
* created via `jj workspace add`.
|
|
22
|
+
*/
|
|
23
|
+
workspaceName?: string;
|
|
24
|
+
/** Absolute path of the workspace root (== cwd for the active workspace). */
|
|
25
|
+
workspaceRoot?: string;
|
|
26
|
+
/** Bookmarks present on the workspace's `@-` (used by the badge / fold-back). */
|
|
27
|
+
bookmarks?: string[];
|
|
28
|
+
/** Last probe error, surfaced for diagnostics. Empty when probe succeeded. */
|
|
29
|
+
lastError?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
7
32
|
/** A dashboard session representing a connected pi instance */
|
|
8
33
|
export interface DashboardSession {
|
|
9
34
|
id: string;
|
|
@@ -44,6 +69,15 @@ export interface DashboardSession {
|
|
|
44
69
|
gitBranchUrl?: string;
|
|
45
70
|
gitPrNumber?: number;
|
|
46
71
|
gitPrUrl?: string;
|
|
72
|
+
/**
|
|
73
|
+
* Per-session jj (Jujutsu) state. Populated by the bridge's per-session
|
|
74
|
+
* VCS probe when (a) the tool registry resolves `jj` AND (b) `.jj/` exists
|
|
75
|
+
* in the session cwd. Absent or `{ isJjRepo: false }` for sessions outside
|
|
76
|
+
* a jj repo — jj-plugin slot predicates treat both as inactive. NOT
|
|
77
|
+
* persisted to `.meta.json`; refreshed on every probe tick.
|
|
78
|
+
* See change: add-jj-workspace-plugin.
|
|
79
|
+
*/
|
|
80
|
+
jjState?: JjState;
|
|
47
81
|
openspecPhase?: OpenSpecPhase | null;
|
|
48
82
|
openspecChange?: string | null;
|
|
49
83
|
attachedProposal?: string | null;
|
|
@@ -91,6 +125,15 @@ export interface DashboardSession {
|
|
|
91
125
|
* the entry. See change: add-extension-ui-decorations.
|
|
92
126
|
*/
|
|
93
127
|
uiDecorators?: Record<string, DecoratorDescriptor>;
|
|
128
|
+
/**
|
|
129
|
+
* Per-session image asset registry, keyed by content hash. Populated by
|
|
130
|
+
* `asset_register` events emitted by the bridge for local-file images
|
|
131
|
+
* referenced as `` in assistant markdown. Survives event-buffer
|
|
132
|
+
* eviction (lives on Session, not in the rolling event buffer) so
|
|
133
|
+
* `pi-asset:<hash>` references in older messages still resolve.
|
|
134
|
+
* See change: chat-markdown-local-images-and-math.
|
|
135
|
+
*/
|
|
136
|
+
assets?: Record<string, { data: string; mimeType: string }>;
|
|
94
137
|
}
|
|
95
138
|
|
|
96
139
|
// ── Extension UI System (Phase 1: management-modal slot) ───────────
|
|
@@ -299,6 +342,41 @@ export interface ModelInfo {
|
|
|
299
342
|
id: string;
|
|
300
343
|
}
|
|
301
344
|
|
|
345
|
+
/**
|
|
346
|
+
* Provider catalogue entry pushed by the bridge to the server.
|
|
347
|
+
* Derived from pi's live `ModelRegistry` (see provider-register.ts in
|
|
348
|
+
* the bridge). The server caches the most recently received catalogue
|
|
349
|
+
* and uses it as the source for `GET /api/provider-auth/status`.
|
|
350
|
+
* See change: replace-hardcoded-provider-lists.
|
|
351
|
+
*/
|
|
352
|
+
export interface ProviderInfo {
|
|
353
|
+
/** pi-ai provider id (e.g. "anthropic", "deepseek", "google-vertex"). */
|
|
354
|
+
id: string;
|
|
355
|
+
/** From `modelRegistry.getProviderDisplayName(id)`; falls back to id. */
|
|
356
|
+
displayName: string;
|
|
357
|
+
/** True iff `authStorage.getOAuthProviders()` includes this id. */
|
|
358
|
+
hasOAuth: boolean;
|
|
359
|
+
/** True iff a credential is stored in auth.json. */
|
|
360
|
+
configured: boolean;
|
|
361
|
+
/** Where the credential is sourced from, when configured. */
|
|
362
|
+
source?: "stored" | "environment" | "fallback" | "runtime";
|
|
363
|
+
/** First env var name pi-ai consults for this provider, when applicable. */
|
|
364
|
+
envVar?: string;
|
|
365
|
+
/** True when configured via ambient credential chain (AWS profile / GCP ADC). */
|
|
366
|
+
ambient?: boolean;
|
|
367
|
+
/** Expiry timestamp for OAuth credentials. */
|
|
368
|
+
expires?: number;
|
|
369
|
+
/**
|
|
370
|
+
* True when this provider was registered by the dashboard itself via
|
|
371
|
+
* `pi.registerProvider()` from `~/.pi/agent/providers.json` (a "custom"
|
|
372
|
+
* provider managed by the LLM Providers settings section). Consumers
|
|
373
|
+
* use this to suppress API-key auth rows for custom providers — their
|
|
374
|
+
* keys are managed elsewhere. OAuth rows are still emitted because a
|
|
375
|
+
* custom OAuth provider needs its login button.
|
|
376
|
+
*/
|
|
377
|
+
custom?: boolean;
|
|
378
|
+
}
|
|
379
|
+
|
|
302
380
|
/** Role assignment info (from pi-flows role-manager) */
|
|
303
381
|
export interface RoleInfo {
|
|
304
382
|
roles: Record<string, string>;
|
|
@@ -349,6 +427,19 @@ export function deriveChangeState(change: OpenSpecChange): ChangeState {
|
|
|
349
427
|
export interface OpenSpecData {
|
|
350
428
|
initialized: boolean;
|
|
351
429
|
changes: OpenSpecChange[];
|
|
430
|
+
/**
|
|
431
|
+
* Cold-boot signaling: server has detected `openspec/changes/` for this
|
|
432
|
+
* cwd but the slow poll has not yet produced authoritative data.
|
|
433
|
+
*
|
|
434
|
+
* Optional for backwards compatibility — absence means `false`. Composes
|
|
435
|
+
* with `initialized` to encode three states:
|
|
436
|
+
* - { initialized: false, pending: false } → no openspec dir
|
|
437
|
+
* - { initialized: false, pending: true } → dir exists, polling
|
|
438
|
+
* - { initialized: true, pending: ? } → poll complete
|
|
439
|
+
*
|
|
440
|
+
* See change: fix-cold-boot-openspec-protocol.
|
|
441
|
+
*/
|
|
442
|
+
pending?: boolean;
|
|
352
443
|
}
|
|
353
444
|
|
|
354
445
|
/** OpenSpec workflow phase detected from tool calls */
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git info gathering — detects branch, remote URL, and PR number.
|
|
3
|
-
* Delegates to the shared git tool module so there's no inline execSync
|
|
4
|
-
* and every call benefits from the runner's safety defaults (windowsHide,
|
|
5
|
-
* timeout, tolerated exit codes).
|
|
6
|
-
* See change: platform-command-executor.
|
|
7
|
-
*/
|
|
8
|
-
import * as git from "@blackbelt-technology/pi-dashboard-shared/platform/git.js";
|
|
9
|
-
import { buildGitLinks, type GitLinks } from "./git-link-builder.js";
|
|
10
|
-
|
|
11
|
-
export interface GitInfo {
|
|
12
|
-
gitBranch: string;
|
|
13
|
-
gitBranchUrl?: string;
|
|
14
|
-
gitPrNumber?: number;
|
|
15
|
-
gitPrUrl?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/** Detect the current git branch. Returns short SHA for detached HEAD. */
|
|
19
|
-
export function detectBranch(cwd: string): string | undefined {
|
|
20
|
-
const ref = git.currentBranchOr({ cwd });
|
|
21
|
-
if (!ref) return undefined;
|
|
22
|
-
if (ref === "HEAD") {
|
|
23
|
-
// Detached HEAD — return short commit SHA
|
|
24
|
-
return git.headShaOr({ cwd, short: true }) ?? "HEAD";
|
|
25
|
-
}
|
|
26
|
-
return ref;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Detect the remote origin URL. */
|
|
30
|
-
export function detectRemoteUrl(cwd: string): string | undefined {
|
|
31
|
-
return git.remoteUrlOr({ cwd });
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Detect the PR number via gh CLI (best effort). */
|
|
35
|
-
export function detectPrNumber(cwd: string): number | undefined {
|
|
36
|
-
return git.prNumberOr({ cwd });
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** Gather all git info for a directory. Returns undefined if not a git repo. */
|
|
40
|
-
export function gatherGitInfo(cwd: string): GitInfo | undefined {
|
|
41
|
-
const branch = detectBranch(cwd);
|
|
42
|
-
if (!branch) return undefined;
|
|
43
|
-
|
|
44
|
-
const remoteUrl = detectRemoteUrl(cwd);
|
|
45
|
-
const prNumber = detectPrNumber(cwd);
|
|
46
|
-
|
|
47
|
-
const links: GitLinks = remoteUrl ? buildGitLinks(remoteUrl, branch, prNumber) : {};
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
gitBranch: branch,
|
|
51
|
-
gitBranchUrl: links.branchUrl,
|
|
52
|
-
gitPrNumber: prNumber,
|
|
53
|
-
gitPrUrl: links.prUrl,
|
|
54
|
-
};
|
|
55
|
-
}
|