@pi-unipi/unipi 2.0.6 → 2.0.8
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/LICENSE +21 -0
- package/package.json +22 -38
- package/packages/ask-user/ask-ui.ts +3 -3
- package/packages/ask-user/commands.ts +1 -1
- package/packages/ask-user/handoff.ts +1 -1
- package/packages/ask-user/index.ts +1 -1
- package/packages/ask-user/launcher-ui.ts +2 -2
- package/packages/ask-user/package.json +58 -0
- package/packages/ask-user/settings-tui.ts +2 -2
- package/packages/ask-user/tools.ts +2 -2
- package/packages/autocomplete/package.json +45 -0
- package/packages/autocomplete/src/__tests__/provider.sorting.test.ts +1 -1
- package/packages/autocomplete/src/index.ts +1 -1
- package/packages/autocomplete/src/provider.ts +2 -2
- package/packages/autocomplete/src/sorting.ts +1 -1
- package/packages/btw/extensions/btw.ts +3 -3
- package/packages/btw/package.json +50 -0
- package/packages/cocoindex/commands.ts +1 -1
- package/packages/cocoindex/index.ts +1 -1
- package/packages/cocoindex/installer.ts +1 -1
- package/packages/cocoindex/package.json +42 -0
- package/packages/cocoindex/tools.ts +2 -2
- package/packages/compactor/package.json +61 -0
- package/packages/compactor/src/commands/index.ts +1 -1
- package/packages/compactor/src/compaction/cut.ts +2 -2
- package/packages/compactor/src/compaction/hooks.ts +4 -4
- package/packages/compactor/src/compaction/normalize.ts +1 -1
- package/packages/compactor/src/compaction/summarize.ts +1 -1
- package/packages/compactor/src/display/diff-presentation.ts +1 -1
- package/packages/compactor/src/display/diff-renderer.ts +1 -1
- package/packages/compactor/src/display/diff-width-safety.ts +1 -1
- package/packages/compactor/src/display/line-width-safety.ts +1 -1
- package/packages/compactor/src/index.ts +1 -1
- package/packages/compactor/src/session/recall-blocks.ts +2 -2
- package/packages/compactor/src/tools/register.ts +10 -10
- package/packages/compactor/src/tui/settings-overlay.ts +3 -3
- package/packages/compactor/src/types.ts +1 -1
- package/packages/core/package.json +34 -0
- package/packages/footer/package.json +53 -0
- package/packages/footer/src/commands.ts +1 -1
- package/packages/footer/src/events.ts +1 -1
- package/packages/footer/src/help.ts +2 -2
- package/packages/footer/src/index.ts +3 -3
- package/packages/footer/src/rendering/renderer.ts +2 -2
- package/packages/footer/src/rendering/theme.ts +1 -1
- package/packages/footer/src/segments/status-ext.ts +1 -1
- package/packages/footer/src/tui/settings-tui.ts +2 -2
- package/packages/footer/src/types.ts +1 -1
- package/packages/info-screen/core-groups.ts +3 -3
- package/packages/info-screen/index.ts +1 -1
- package/packages/info-screen/package.json +51 -0
- package/packages/info-screen/tui/info-overlay.ts +3 -3
- package/packages/input-shortcuts/package.json +51 -0
- package/packages/input-shortcuts/src/chord-overlay.ts +2 -2
- package/packages/input-shortcuts/src/index.ts +2 -2
- package/packages/input-shortcuts/src/settings-overlay.ts +2 -2
- package/packages/input-shortcuts/src/status.ts +1 -1
- package/packages/kanboard/commands.ts +1 -1
- package/packages/kanboard/index.ts +1 -1
- package/packages/kanboard/package.json +55 -0
- package/packages/kanboard/tui/kanboard-overlay.ts +2 -2
- package/packages/mcp/package.json +48 -0
- package/packages/mcp/src/index.ts +1 -1
- package/packages/mcp/src/tui/add-overlay.ts +2 -2
- package/packages/mcp/src/tui/settings-overlay.ts +2 -2
- package/packages/memory/commands.ts +1 -1
- package/packages/memory/embedding.ts +1 -1
- package/packages/memory/index.ts +1 -1
- package/packages/memory/package.json +63 -0
- package/packages/memory/tools.ts +2 -2
- package/packages/memory/tui/settings-tui.ts +1 -1
- package/packages/milestone/commands.ts +1 -1
- package/packages/milestone/hooks.ts +1 -1
- package/packages/milestone/index.ts +1 -1
- package/packages/milestone/package.json +51 -0
- package/packages/notify/ask-user-prompt-message.ts +75 -0
- package/packages/notify/commands.ts +1 -1
- package/packages/notify/events.ts +55 -7
- package/packages/notify/index.ts +1 -1
- package/packages/notify/package.json +61 -0
- package/packages/notify/src/__tests__/ask-user-prompt-message.test.ts +159 -0
- package/packages/notify/src/__tests__/event-bus.test.ts +118 -0
- package/packages/notify/tools.ts +2 -2
- package/packages/notify/tui/gotify-setup.ts +3 -3
- package/packages/notify/tui/ntfy-setup.ts +3 -3
- package/packages/notify/tui/recap-model-selector.ts +3 -3
- package/packages/notify/tui/settings-overlay.ts +3 -3
- package/packages/notify/tui/telegram-setup.ts +3 -3
- package/packages/ralph/SKILL.md +86 -0
- package/packages/ralph/index.ts +1 -1
- package/packages/ralph/package.json +47 -0
- package/packages/ralph/ralph-loop.ts +1 -1
- package/packages/ralph/tools.ts +2 -2
- package/packages/subagents/package.json +33 -0
- package/packages/subagents/src/agent-manager.ts +2 -2
- package/packages/subagents/src/agent-runner.ts +3 -3
- package/packages/subagents/src/conversation-viewer.ts +2 -2
- package/packages/subagents/src/custom-agents.ts +1 -1
- package/packages/subagents/src/index.ts +4 -4
- package/packages/subagents/src/model-resolver.ts +1 -1
- package/packages/subagents/src/types.ts +2 -2
- package/packages/subagents/src/widget.ts +3 -3
- package/packages/unipi/index.ts +1 -1
- package/packages/updater/package.json +54 -0
- package/packages/updater/src/commands.ts +1 -1
- package/packages/updater/src/index.ts +1 -1
- package/packages/updater/src/markdown.ts +4 -4
- package/packages/updater/src/tui/changelog-overlay.ts +4 -4
- package/packages/updater/src/tui/readme-overlay.ts +4 -4
- package/packages/updater/src/tui/settings-overlay.ts +3 -3
- package/packages/updater/src/tui/update-overlay.ts +4 -4
- package/packages/utility/package.json +56 -0
- package/packages/utility/src/commands.ts +1 -1
- package/packages/utility/src/diff/renderer.ts +1 -1
- package/packages/utility/src/diff/wrapper.ts +2 -2
- package/packages/utility/src/index.ts +2 -2
- package/packages/utility/src/info-screen.ts +1 -1
- package/packages/utility/src/tools/env.ts +1 -1
- package/packages/utility/src/tui/badge-settings-tui.ts +2 -2
- package/packages/utility/src/tui/name-badge-state.ts +1 -1
- package/packages/utility/src/tui/name-badge.ts +3 -3
- package/packages/utility/src/tui/util-settings-tui.ts +2 -2
- package/packages/web-api/package.json +59 -0
- package/packages/web-api/src/commands.ts +1 -1
- package/packages/web-api/src/index.ts +1 -1
- package/packages/web-api/src/tools.ts +2 -2
- package/packages/web-api/src/tui/settings-dialog.ts +1 -1
- package/packages/workflow/commands.ts +1 -1
- package/packages/workflow/index.ts +1 -1
- package/packages/workflow/package.json +45 -0
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* edit tool's Box nesting (approx 4-6 chars of padding).
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import { visibleWidth, truncateToWidth } from "@
|
|
21
|
+
import { visibleWidth, truncateToWidth } from "@earendil-works/pi-tui";
|
|
22
22
|
|
|
23
23
|
/** Rendering overhead from Box nesting in edit tool components */
|
|
24
24
|
const RENDER_OVERHEAD = 6;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @pi-unipi/compactor — Extension entry point
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { ExtensionAPI } from "@
|
|
5
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
6
6
|
import { MODULES, UNIPI_EVENTS, COMPACTOR_COMMANDS, COMPACTOR_TOOLS, COMPACTOR_INSTRUCTION, emitEvent } from "@pi-unipi/core";
|
|
7
7
|
import { scaffoldConfig, loadConfig } from "./config/manager.js";
|
|
8
8
|
import { registerCompactionHooks } from "./compaction/hooks.js";
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* branch directly.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { SessionEntry } from "@
|
|
11
|
-
import type { AgentMessage } from "@
|
|
10
|
+
import type { SessionEntry } from "@earendil-works/pi-coding-agent";
|
|
11
|
+
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
12
12
|
import { normalizeMessages } from "../compaction/normalize.js";
|
|
13
13
|
import { sanitize } from "../compaction/sanitize.js";
|
|
14
14
|
import { textOf } from "../compaction/content.js";
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* ctx_stats, ctx_doctor
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import { Type } from "
|
|
17
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
16
|
+
import { Type } from "typebox";
|
|
17
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
18
18
|
import { compactTool } from "./compact.js";
|
|
19
19
|
import { vccRecall, type RecallInput } from "./vcc-recall.js";
|
|
20
20
|
import { ctxExecute, type CtxExecuteInput } from "./ctx-execute.js";
|
|
@@ -140,7 +140,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
140
140
|
label: "Compact",
|
|
141
141
|
description: "Trigger manual context compaction. Reduces session history while preserving continuity. Use dryRun:true to preview without compacting.",
|
|
142
142
|
parameters: CompactParams,
|
|
143
|
-
async execute(_toolCallId: string, params: any): Promise<import("@
|
|
143
|
+
async execute(_toolCallId: string, params: any): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> {
|
|
144
144
|
if (params.dryRun) {
|
|
145
145
|
const blocks = deps.getBlocks();
|
|
146
146
|
const totalMessages = blocks.length;
|
|
@@ -160,7 +160,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
160
160
|
} as any));
|
|
161
161
|
|
|
162
162
|
// 2. session_recall (new) / vcc_recall (deprecated) — search session history
|
|
163
|
-
const recallExec = async (_toolCallId: string, params: any, _signal?: AbortSignal, _onUpdate?: unknown, ctx?: ExtensionContext): Promise<import("@
|
|
163
|
+
const recallExec = async (_toolCallId: string, params: any, _signal?: AbortSignal, _onUpdate?: unknown, ctx?: ExtensionContext): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> => {
|
|
164
164
|
const c = deps.getCounters?.();
|
|
165
165
|
if (c) { c.recallQueries++; }
|
|
166
166
|
const config = loadConfig(ctx?.cwd ?? process.cwd());
|
|
@@ -190,7 +190,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
190
190
|
pi.registerTool({ name: "vcc_recall", label: "Session Recall", description: "Search session history using BM25 or regex. (DEPRECATED: use session_recall instead)", parameters: VccRecallParams, async execute(tcId: string, p: any) { deprecationLog("vcc_recall", "session_recall"); return recallExec(tcId, p); } } as any);
|
|
191
191
|
|
|
192
192
|
// 3. sandbox (new) / ctx_execute (deprecated) — run code in sandbox
|
|
193
|
-
const sandboxExec = async (_toolCallId: string, params: any): Promise<import("@
|
|
193
|
+
const sandboxExec = async (_toolCallId: string, params: any): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> => {
|
|
194
194
|
try {
|
|
195
195
|
const c = deps.getCounters?.();
|
|
196
196
|
if (c) { c.sandboxRuns++; }
|
|
@@ -210,7 +210,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
210
210
|
pi.registerTool({ name: "ctx_execute", label: "Sandbox", description: "Run code in sandbox. (DEPRECATED: use sandbox instead)", parameters: CtxExecuteParams, async execute(tcId: string, p: any) { deprecationLog("ctx_execute", "sandbox"); return sandboxExec(tcId, p); } } as any);
|
|
211
211
|
|
|
212
212
|
// 4. sandbox_file (new) / ctx_execute_file (deprecated) — execute file
|
|
213
|
-
const sandboxFileExec = async (_toolCallId: string, params: any): Promise<import("@
|
|
213
|
+
const sandboxFileExec = async (_toolCallId: string, params: any): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> => {
|
|
214
214
|
try {
|
|
215
215
|
const c = deps.getCounters?.();
|
|
216
216
|
if (c) { c.sandboxRuns++; }
|
|
@@ -229,7 +229,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
229
229
|
pi.registerTool({ name: "ctx_execute_file", label: "Sandbox File", description: "Execute file in sandbox. (DEPRECATED: use sandbox_file instead)", parameters: CtxExecuteFileParams, async execute(tcId: string, p: any) { deprecationLog("ctx_execute_file", "sandbox_file"); return sandboxFileExec(tcId, p); } } as any);
|
|
230
230
|
|
|
231
231
|
// 5. sandbox_batch (new) / ctx_batch_execute (deprecated) — atomic batch (execute only)
|
|
232
|
-
const sandboxBatchExec = async (_toolCallId: string, params: any): Promise<import("@
|
|
232
|
+
const sandboxBatchExec = async (_toolCallId: string, params: any): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> => {
|
|
233
233
|
try {
|
|
234
234
|
const c = deps.getCounters?.();
|
|
235
235
|
if (c) { c.sandboxRuns++; }
|
|
@@ -248,7 +248,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
248
248
|
pi.registerTool({ name: "ctx_batch_execute", label: "Sandbox Batch", description: "Run batch operations. (DEPRECATED: use sandbox_batch instead)", parameters: CtxBatchExecuteParams, async execute(tcId: string, p: any) { deprecationLog("ctx_batch_execute", "sandbox_batch"); return sandboxBatchExec(tcId, p); } } as any);
|
|
249
249
|
|
|
250
250
|
// 6. compactor_stats (new) / ctx_stats (deprecated) — context savings dashboard
|
|
251
|
-
const statsExec = async (): Promise<import("@
|
|
251
|
+
const statsExec = async (): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> => {
|
|
252
252
|
try {
|
|
253
253
|
const result = await ctxStats(deps.sessionDB, deps.getSessionId(), deps.getCounters?.());
|
|
254
254
|
const lines = [
|
|
@@ -268,7 +268,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
268
268
|
pi.registerTool({ name: "ctx_stats", label: "Compactor Stats", description: "Show stats dashboard. (DEPRECATED: use compactor_stats instead)", parameters: CtxStatsParams, async execute() { deprecationLog("ctx_stats", "compactor_stats"); return statsExec(); } } as any);
|
|
269
269
|
|
|
270
270
|
// 7. compactor_doctor (new) / ctx_doctor (deprecated) — diagnostics checklist
|
|
271
|
-
const doctorExec = async (): Promise<import("@
|
|
271
|
+
const doctorExec = async (): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> => {
|
|
272
272
|
try {
|
|
273
273
|
const result = await ctxDoctor(deps.sessionDB);
|
|
274
274
|
const icon = (s: string) => (s === "pass" ? "✅" : s === "warn" ? "⚠️" : "❌");
|
|
@@ -291,7 +291,7 @@ export function registerCompactorTools(pi: ExtensionAPI, deps: CompactorToolDeps
|
|
|
291
291
|
label: "Context Budget",
|
|
292
292
|
description: "Estimate remaining context window (% full, tokens left) and get advice on whether to compact.",
|
|
293
293
|
parameters: Type.Object({}),
|
|
294
|
-
async execute(_toolCallId: string, _params: any, _signal?: AbortSignal, _onUpdate?: unknown, ctx?: ExtensionContext): Promise<import("@
|
|
294
|
+
async execute(_toolCallId: string, _params: any, _signal?: AbortSignal, _onUpdate?: unknown, ctx?: ExtensionContext): Promise<import("@earendil-works/pi-coding-agent").AgentToolResult<unknown>> {
|
|
295
295
|
const config = loadConfig(ctx?.cwd ?? process.cwd());
|
|
296
296
|
const liveUsage = ctx?.getContextUsage?.();
|
|
297
297
|
let estimatedTokens: number | undefined = liveUsage?.tokens ?? undefined;
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* preset preview, per-project override.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { Component, TUI } from "@
|
|
11
|
-
import { truncateToWidth, visibleWidth, SettingsList, type SettingItem, type SettingsListTheme } from "@
|
|
12
|
-
import type { Theme, KeybindingsManager } from "@
|
|
10
|
+
import type { Component, TUI } from "@earendil-works/pi-tui";
|
|
11
|
+
import { truncateToWidth, visibleWidth, SettingsList, type SettingItem, type SettingsListTheme } from "@earendil-works/pi-tui";
|
|
12
|
+
import type { Theme, KeybindingsManager } from "@earendil-works/pi-coding-agent";
|
|
13
13
|
import { loadConfig, saveConfig, projectConfigPath } from "../config/manager.js";
|
|
14
14
|
import { applyPreset, detectPreset } from "../config/presets.js";
|
|
15
15
|
import type { CompactorPreset } from "../types.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @pi-unipi/compactor — Shared TypeScript types
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { Message } from "@
|
|
5
|
+
import type { Message } from "@earendil-works/pi-ai";
|
|
6
6
|
|
|
7
7
|
// ─────────────────────────────────────────────────────────
|
|
8
8
|
// Normalized blocks (from pi-vcc)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-unipi/core",
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Shared utilities, event types, and constants for Unipi extension suite",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Neuron Mr White",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/Neuron-Mr-White/unipi.git",
|
|
11
|
+
"directory": "packages/core"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"pi-package",
|
|
15
|
+
"pi-extension",
|
|
16
|
+
"unipi"
|
|
17
|
+
],
|
|
18
|
+
"files": [
|
|
19
|
+
"*.ts",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@earendil-works/pi-coding-agent": "^0.75.5",
|
|
27
|
+
"typebox": "^1.1.38"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@earendil-works/pi-coding-agent": "^0.75.5",
|
|
31
|
+
"typebox": "^1.1.38",
|
|
32
|
+
"@types/node": "^22.0.0"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-unipi/footer",
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Persistent status bar for Unipi — subscribes to UNIPI_EVENTS and renders key stats from all unipi packages",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "src/index.ts",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Neuron Mr White",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Neuron-Mr-White/unipi.git",
|
|
12
|
+
"directory": "packages/footer"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"pi-package",
|
|
16
|
+
"pi-extension",
|
|
17
|
+
"pi-coding-agent",
|
|
18
|
+
"unipi",
|
|
19
|
+
"footer",
|
|
20
|
+
"status-bar"
|
|
21
|
+
],
|
|
22
|
+
"files": [
|
|
23
|
+
"index.ts",
|
|
24
|
+
"src/**/*.ts",
|
|
25
|
+
"skills/**/*",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"pi": {
|
|
29
|
+
"extensions": [
|
|
30
|
+
"src/index.ts"
|
|
31
|
+
],
|
|
32
|
+
"skills": [
|
|
33
|
+
"skills"
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"test": "node --experimental-strip-types --test tests/**/*.test.ts"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@pi-unipi/core": "*"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@earendil-works/pi-coding-agent": "^0.75.5",
|
|
47
|
+
"@earendil-works/pi-tui": "^0.75.5"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^25.6.0",
|
|
51
|
+
"typescript": "^6.0.0"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* /unipi:footer-settings.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
8
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
9
9
|
import { UNIPI_PREFIX, FOOTER_COMMANDS } from "@pi-unipi/core";
|
|
10
10
|
import { loadFooterSettings, saveFooterSettings } from "./config.js";
|
|
11
11
|
import { showFooterSettings } from "./tui/settings-tui.js";
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Note: pi.events.on() returns an unsubscribe function directly.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
11
11
|
import { UNIPI_EVENTS } from "@pi-unipi/core";
|
|
12
12
|
import type { FooterRegistry } from "./registry/index.js";
|
|
13
13
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* with icons, short labels, and descriptions.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI } from "@
|
|
8
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
9
9
|
import type { FooterSegment, SegmentZone } from "./types.js";
|
|
10
10
|
import { getIcon } from "./rendering/icons.js";
|
|
11
11
|
import { loadFooterSettings, isSegmentEnabled } from "./config.js";
|
|
@@ -101,7 +101,7 @@ export function showFooterHelp(
|
|
|
101
101
|
// Use pi's custom UI overlay
|
|
102
102
|
const ctx = (pi as any)._ctx;
|
|
103
103
|
if (ctx?.ui?.custom) {
|
|
104
|
-
ctx.ui.custom((tui: import("@
|
|
104
|
+
ctx.ui.custom((tui: import("@earendil-works/pi-tui").TUI) => {
|
|
105
105
|
let scrollOffset = 0;
|
|
106
106
|
|
|
107
107
|
return {
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* initializes renderer on session_start.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI, Theme, ExtensionContext } from "@
|
|
9
|
-
import { truncateToWidth, visibleWidth } from "@
|
|
8
|
+
import type { ExtensionAPI, Theme, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
9
|
+
import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
10
10
|
import { UNIPI_EVENTS, emitEvent, UNIPI_PREFIX, FOOTER_COMMANDS } from "@pi-unipi/core";
|
|
11
11
|
import { FooterRegistry, getFooterRegistry } from "./registry/index.js";
|
|
12
12
|
import { FooterRenderer } from "./rendering/renderer.js";
|
|
@@ -63,7 +63,7 @@ export interface FooterState {
|
|
|
63
63
|
unsubscribeEvents: (() => void) | null;
|
|
64
64
|
piContext: unknown;
|
|
65
65
|
footerData: unknown;
|
|
66
|
-
tuiRef: import("@
|
|
66
|
+
tuiRef: import("@earendil-works/pi-tui").TUI | null | undefined;
|
|
67
67
|
refreshTimer: ReturnType<typeof setInterval> | null;
|
|
68
68
|
/** Re-register footer + widgets with pi UI (for live enable) */
|
|
69
69
|
setupUI: ((pi: ExtensionAPI, ctx: ExtensionContext) => void) | null;
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* Segments fit into available width; overflow goes to secondary.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import type { Theme } from "@
|
|
9
|
+
import type { Theme } from "@earendil-works/pi-coding-agent";
|
|
10
10
|
import type { PresetDef, FooterSegmentContext, FooterSegment, ColorScheme, RenderedSegment, SegmentZone } from "../types.js";
|
|
11
11
|
import type { FooterRegistry } from "../registry/index.js";
|
|
12
|
-
import { visibleWidth as piVisibleWidth, truncateToWidth } from "@
|
|
12
|
+
import { visibleWidth as piVisibleWidth, truncateToWidth } from "@earendil-works/pi-tui";
|
|
13
13
|
import { getSeparator, separatorVisibleWidth } from "./separators.js";
|
|
14
14
|
import { getDefaultColors, setColorMode, refreshColorMode } from "./theme.js";
|
|
15
15
|
import { setIconStyle } from "./icons.js";
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* silently swallows 24-bit escapes and renders the text uncoloured).
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import type { Theme, ThemeColor } from "@
|
|
14
|
+
import type { Theme, ThemeColor } from "@earendil-works/pi-coding-agent";
|
|
15
15
|
import type { ColorScheme, ColorValue, SemanticColor, ThemeLike } from "../types.js";
|
|
16
16
|
|
|
17
17
|
// ─── Color mode detection ──────────────────────────────────────────────────
|
|
@@ -15,7 +15,7 @@ import type { FooterSegment, FooterSegmentContext, RenderedSegment } from "../ty
|
|
|
15
15
|
import { getIcon } from "../rendering/icons.js";
|
|
16
16
|
import { loadFooterSettings } from "../config.js";
|
|
17
17
|
import { getSeparator } from "../rendering/separators.js";
|
|
18
|
-
import { truncateToWidth, visibleWidth } from "@
|
|
18
|
+
import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
19
19
|
|
|
20
20
|
/** Map status keys to short display names and segment IDs for icons */
|
|
21
21
|
const STATUS_DISPLAY: Record<string, { short: string; segmentId: string }> = {
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* Uses pi-tui SettingsList for vim/arrow keybinding support.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { ExtensionAPI, ExtensionCommandContext } from "@
|
|
13
|
-
import { SettingsList, type SettingItem, type SettingsListTheme } from "@
|
|
12
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
|
|
13
|
+
import { SettingsList, type SettingItem, type SettingsListTheme } from "@earendil-works/pi-tui";
|
|
14
14
|
import { loadFooterSettings, saveFooterSettings } from "../config.js";
|
|
15
15
|
import { PRESET_NAMES } from "../presets.js";
|
|
16
16
|
import { setIconStyle } from "../rendering/icons.js";
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* presets, separators, theme.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Theme, ThemeColor } from "@
|
|
8
|
+
import type { Theme, ThemeColor } from "@earendil-works/pi-coding-agent";
|
|
9
9
|
|
|
10
10
|
// ─── Semantic Colors ────────────────────────────────────────────────────────
|
|
11
11
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
|
|
9
9
|
import { join, basename } from "node:path";
|
|
10
10
|
import { homedir } from "node:os";
|
|
11
|
-
import type { ExtensionAPI } from "@
|
|
11
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
12
12
|
import { infoRegistry } from "./registry.js";
|
|
13
13
|
import { parseUsageStats, formatTokens, formatCost } from "./usage-parser.js";
|
|
14
14
|
import type { InfoGroup } from "./types.js";
|
|
@@ -34,9 +34,9 @@ function getPiVersion(): string {
|
|
|
34
34
|
// Try to find pi's package.json in various locations
|
|
35
35
|
const possiblePaths = [
|
|
36
36
|
// Global npm install
|
|
37
|
-
join(homedir(), ".local", "share", "mise", "installs", "node", "24.14.1", "lib", "node_modules", "@
|
|
37
|
+
join(homedir(), ".local", "share", "mise", "installs", "node", "24.14.1", "lib", "node_modules", "@earendil-works", "pi-coding-agent", "package.json"),
|
|
38
38
|
// Alternative locations
|
|
39
|
-
join(homedir(), ".local", "share", "mise", "installs", "node", "lib", "node_modules", "@
|
|
39
|
+
join(homedir(), ".local", "share", "mise", "installs", "node", "lib", "node_modules", "@earendil-works", "pi-coding-agent", "package.json"),
|
|
40
40
|
];
|
|
41
41
|
|
|
42
42
|
for (const pkgPath of possiblePaths) {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* /unipi:info-settings - Configure info display
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
12
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
13
13
|
import { UNIPI_EVENTS, MODULES, UNIPI_PREFIX, emitEvent, getPackageVersion, type UnipiModuleEvent, type UnipiInfoGroupEvent } from "@pi-unipi/core";
|
|
14
14
|
import { infoRegistry } from "./registry.js";
|
|
15
15
|
import { registerCoreGroups, trackModule, trackTool, setPiApi, registerSkillDir, startLoadTracking, recordLoadTime, finishLoadTracking, recordModuleStart } from "./core-groups.js";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-unipi/info-screen",
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Dashboard and module registry for Unipi — configurable info overlay with tabbed groups",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.ts",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Neuron Mr White",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Neuron-Mr-White/unipi.git",
|
|
12
|
+
"directory": "packages/info-screen"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/Neuron-Mr-White/unipi#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Neuron-Mr-White/unipi/issues"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"pi-package",
|
|
20
|
+
"pi-extension",
|
|
21
|
+
"pi-coding-agent",
|
|
22
|
+
"unipi",
|
|
23
|
+
"info-screen",
|
|
24
|
+
"dashboard"
|
|
25
|
+
],
|
|
26
|
+
"pi": {
|
|
27
|
+
"extensions": [
|
|
28
|
+
"index.ts"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"*.ts",
|
|
33
|
+
"tui/*.ts",
|
|
34
|
+
"settings/*.ts",
|
|
35
|
+
"README.md"
|
|
36
|
+
],
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@pi-unipi/core": "*"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@earendil-works/pi-coding-agent": "^0.75.5",
|
|
45
|
+
"@earendil-works/pi-tui": "^0.75.5",
|
|
46
|
+
"typebox": "^1.1.38"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^25.6.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* Shows humanized "last updated" timestamps.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { Component } from "@
|
|
11
|
-
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "@
|
|
12
|
-
import type { Theme } from "@
|
|
10
|
+
import type { Component } from "@earendil-works/pi-tui";
|
|
11
|
+
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "@earendil-works/pi-tui";
|
|
12
|
+
import type { Theme } from "@earendil-works/pi-coding-agent";
|
|
13
13
|
import { infoRegistry } from "../registry.js";
|
|
14
14
|
import { getInfoSettings } from "../config.js";
|
|
15
15
|
import type { InfoGroup, GroupData } from "../types.js";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-unipi/input-shortcuts",
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Keyboard shortcuts for stash/restore, undo/redo, clipboard, and thinking toggle — chord-based overlay system",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "src/index.ts",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Neuron Mr White",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Neuron-Mr-White/unipi.git",
|
|
12
|
+
"directory": "packages/input-shortcuts"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"pi-package",
|
|
16
|
+
"pi-extension",
|
|
17
|
+
"pi-coding-agent",
|
|
18
|
+
"unipi",
|
|
19
|
+
"input-shortcuts",
|
|
20
|
+
"stash",
|
|
21
|
+
"undo",
|
|
22
|
+
"clipboard"
|
|
23
|
+
],
|
|
24
|
+
"files": [
|
|
25
|
+
"index.ts",
|
|
26
|
+
"src/**/*.ts",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"pi": {
|
|
30
|
+
"extensions": [
|
|
31
|
+
"src/index.ts"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"test": "node --experimental-strip-types --test tests/**/*.test.ts"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@pi-unipi/core": "*"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@earendil-works/pi-coding-agent": "^0.75.5",
|
|
45
|
+
"@earendil-works/pi-tui": "^0.75.5"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^25.6.0",
|
|
49
|
+
"typescript": "^6.0.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Closes on ESC or after selecting an action. No timeout.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import type { ExtensionContext } from "@
|
|
16
|
+
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
17
17
|
import {
|
|
18
18
|
Container,
|
|
19
19
|
Key,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
type Focusable,
|
|
23
23
|
type TUI,
|
|
24
24
|
type KeybindingsManager,
|
|
25
|
-
} from "@
|
|
25
|
+
} from "@earendil-works/pi-tui";
|
|
26
26
|
import type { ChordState } from "./types.ts";
|
|
27
27
|
import { THINKING_CYCLE } from "./types.ts";
|
|
28
28
|
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* - Cut/Copy: overlay closes immediately, then action runs (non-blocking)
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
15
|
-
import { Key } from "@
|
|
14
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
15
|
+
import { Key } from "@earendil-works/pi-tui";
|
|
16
16
|
import { MODULES, emitEvent, UNIPI_EVENTS, INPUT_SHORTCUTS_COMMANDS } from "@pi-unipi/core";
|
|
17
17
|
import { RegisterStore } from "./registers.ts";
|
|
18
18
|
import { UndoRedoBuffer } from "./undo-redo.ts";
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Persists config to .unipi/config/input-shortcuts-config.json.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type { Component } from "@
|
|
8
|
-
import { SettingsList, type SettingItem, type SettingsListTheme } from "@
|
|
7
|
+
import type { Component } from "@earendil-works/pi-tui";
|
|
8
|
+
import { SettingsList, type SettingItem, type SettingsListTheme } from "@earendil-works/pi-tui";
|
|
9
9
|
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import type { InputShortcutsConfig } from "./types.ts";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Status bar feedback helper using ctx.ui.setStatus() with auto-clear.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { ExtensionContext } from "@
|
|
5
|
+
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
6
6
|
import { STATUS_SUCCESS_MS, STATUS_ERROR_MS } from "./types.ts";
|
|
7
7
|
|
|
8
8
|
const STATUS_KEY = "input-shortcuts";
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import * as path from "node:path";
|
|
9
|
-
import type { ExtensionAPI, ExtensionCommandContext } from "@
|
|
9
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
|
|
10
10
|
import { UNIPI_PREFIX, KANBOARD_COMMANDS, KANBOARD_DIRS, UNIPI_EVENTS, emitEvent } from "@pi-unipi/core";
|
|
11
11
|
import { startServer, KanboardServer } from "./server/index.js";
|
|
12
12
|
import { renderKanboardOverlay } from "./tui/kanboard-overlay.js";
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* HTTP server with htmx + Alpine.js UI, modular parsers, TUI overlay, and kanban board.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI } from "@
|
|
8
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
9
9
|
import { MODULES, KANBOARD_COMMANDS } from "@pi-unipi/core";
|
|
10
10
|
import { registerCommands } from "./commands.js";
|
|
11
11
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-unipi/kanboard",
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Visualization layer for unipi workflow — HTTP server with htmx/Alpine.js UI, modular parsers, TUI overlay, and kanban board",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.ts",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Neuron Mr White",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Neuron-Mr-White/unipi.git",
|
|
12
|
+
"directory": "packages/kanboard"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"pi-package",
|
|
16
|
+
"pi-extension",
|
|
17
|
+
"pi-coding-agent",
|
|
18
|
+
"unipi",
|
|
19
|
+
"kanboard",
|
|
20
|
+
"kanban",
|
|
21
|
+
"visualization",
|
|
22
|
+
"milestones",
|
|
23
|
+
"workflow"
|
|
24
|
+
],
|
|
25
|
+
"files": [
|
|
26
|
+
"src/**/*.ts",
|
|
27
|
+
"ui/**/*.ts",
|
|
28
|
+
"ui/**/*.css",
|
|
29
|
+
"ui/**/*.js",
|
|
30
|
+
"skills/**/*",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"pi": {
|
|
34
|
+
"extensions": [
|
|
35
|
+
"index.ts"
|
|
36
|
+
],
|
|
37
|
+
"skills": [
|
|
38
|
+
"skills"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@pi-unipi/core": "*"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"@earendil-works/pi-coding-agent": "^0.75.5",
|
|
49
|
+
"@earendil-works/pi-tui": "^0.75.5"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/node": "^25.6.0",
|
|
53
|
+
"typescript": "^6.0.0"
|
|
54
|
+
}
|
|
55
|
+
}
|