@geohar/un-bien 0.7.0 → 0.9.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/README.md +237 -268
- package/dist/bin/launcher.js +38 -0
- package/dist/bin/launcher.js.map +1 -0
- package/dist/config.d.ts +41 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon/install.d.ts +33 -35
- package/dist/daemon/install.js +43 -73
- package/dist/daemon/install.js.map +1 -1
- package/dist/enrich_tool_args.d.ts +9 -0
- package/dist/enrich_tool_args.js +171 -0
- package/dist/enrich_tool_args.js.map +1 -0
- package/dist/image_codec.d.ts +22 -0
- package/dist/image_codec.js +149 -0
- package/dist/image_codec.js.map +1 -0
- package/dist/index.d.ts +0 -26
- package/dist/index.js +235 -1237
- package/dist/index.js.map +1 -1
- package/dist/launch.d.ts +34 -0
- package/dist/launch.js +171 -0
- package/dist/launch.js.map +1 -0
- package/dist/launcher/launcher.d.ts +6 -0
- package/dist/launcher/launcher.js +188 -0
- package/dist/launcher/launcher.js.map +1 -0
- package/dist/pairing/crypto.d.ts +4 -0
- package/dist/pairing/crypto.js +10 -0
- package/dist/pairing/crypto.js.map +1 -1
- package/dist/pairing/peer_trust.d.ts +20 -0
- package/dist/pairing/peer_trust.js +82 -0
- package/dist/pairing/peer_trust.js.map +1 -0
- package/dist/pairing/storage.d.ts +51 -26
- package/dist/pairing/storage.js +346 -136
- package/dist/pairing/storage.js.map +1 -1
- package/dist/panel_bridge.d.ts +3 -1
- package/dist/panel_bridge.js +10 -10
- package/dist/panel_bridge.js.map +1 -1
- package/dist/rooms.d.ts +16 -0
- package/dist/rooms.js +22 -0
- package/dist/rooms.js.map +1 -1
- package/dist/session/debug_log.js +2 -2
- package/dist/session/debug_log.js.map +1 -1
- package/dist/session/local_config.js +2 -0
- package/dist/session/local_config.js.map +1 -1
- package/dist/session/rpc_envelope.d.ts +18 -0
- package/dist/session/rpc_envelope.js +1 -1
- package/dist/session/rpc_envelope.js.map +1 -1
- package/dist/session/rpc_inbound.d.ts +2 -2
- package/dist/session/rpc_inbound.js +1 -1
- package/dist/session/rpc_inbound.js.map +1 -1
- package/dist/subagent_rooms.d.ts +49 -0
- package/dist/subagent_rooms.js +787 -0
- package/dist/subagent_rooms.js.map +1 -0
- package/dist/transport/peer_channel.d.ts +7 -1
- package/dist/transport/peer_channel.js +8 -1
- package/dist/transport/peer_channel.js.map +1 -1
- package/dist/transport/relay_client.d.ts +19 -0
- package/dist/transport/relay_client.js.map +1 -1
- package/docs/daemon.md +65 -64
- package/package.json +13 -11
- package/service-templates/launchd.plist.template +5 -5
- package/service-templates/systemd.service.template +2 -2
- package/service-templates/task-launcher.vbs.template +5 -5
- package/service-templates/task-scheduler.xml.template +1 -1
- package/dist/bin/supervisord.js +0 -86
- package/dist/bin/supervisord.js.map +0 -1
- package/dist/daemon/client.d.ts +0 -20
- package/dist/daemon/client.js +0 -131
- package/dist/daemon/client.js.map +0 -1
- package/dist/daemon/control_protocol.d.ts +0 -176
- package/dist/daemon/control_protocol.js +0 -63
- package/dist/daemon/control_protocol.js.map +0 -1
- package/dist/daemon/cron_log.d.ts +0 -45
- package/dist/daemon/cron_log.js +0 -71
- package/dist/daemon/cron_log.js.map +0 -1
- package/dist/daemon/cron_registry.d.ts +0 -80
- package/dist/daemon/cron_registry.js +0 -198
- package/dist/daemon/cron_registry.js.map +0 -1
- package/dist/daemon/id.d.ts +0 -24
- package/dist/daemon/id.js +0 -36
- package/dist/daemon/id.js.map +0 -1
- package/dist/daemon/registry.d.ts +0 -63
- package/dist/daemon/registry.js +0 -153
- package/dist/daemon/registry.js.map +0 -1
- package/dist/daemon/rpc_child.d.ts +0 -194
- package/dist/daemon/rpc_child.js +0 -419
- package/dist/daemon/rpc_child.js.map +0 -1
- package/dist/daemon/supervisor.d.ts +0 -93
- package/dist/daemon/supervisor.js +0 -666
- package/dist/daemon/supervisor.js.map +0 -1
- /package/dist/bin/{supervisord.d.ts → launcher.d.ts} +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
export function _enrichToolArgs(tool, args, cwd = process.cwd()) {
|
|
4
|
+
if (!args || typeof args !== "object")
|
|
5
|
+
return {};
|
|
6
|
+
const base = args;
|
|
7
|
+
switch (tool.toLowerCase()) {
|
|
8
|
+
case "edit":
|
|
9
|
+
return _enrichEditToolArgs(base, cwd);
|
|
10
|
+
default:
|
|
11
|
+
return base;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function _enrichEditToolArgs(base, cwd) {
|
|
15
|
+
const filePath = _stringArg(base, ["path", "file_path"]);
|
|
16
|
+
const rawEdits = base["edits"];
|
|
17
|
+
const edits = Array.isArray(rawEdits) ? rawEdits : [base];
|
|
18
|
+
const text = _readToolFile(filePath, cwd);
|
|
19
|
+
const hunks = [];
|
|
20
|
+
let searchFrom = 0;
|
|
21
|
+
for (const rawEdit of edits) {
|
|
22
|
+
if (!rawEdit || typeof rawEdit !== "object")
|
|
23
|
+
continue;
|
|
24
|
+
const edit = rawEdit;
|
|
25
|
+
const oldText = _stringArg(edit, [
|
|
26
|
+
"oldText",
|
|
27
|
+
"old_text",
|
|
28
|
+
"old_string",
|
|
29
|
+
"oldString",
|
|
30
|
+
]);
|
|
31
|
+
const newText = _stringArg(edit, [
|
|
32
|
+
"newText",
|
|
33
|
+
"new_text",
|
|
34
|
+
"new_string",
|
|
35
|
+
"newString",
|
|
36
|
+
]);
|
|
37
|
+
if (!oldText && !newText)
|
|
38
|
+
continue;
|
|
39
|
+
const matchAt = oldText && text !== null ? text.indexOf(oldText, searchFrom) : -1;
|
|
40
|
+
const fallbackAt = oldText && matchAt < 0 && text !== null ? text.indexOf(oldText) : matchAt;
|
|
41
|
+
const startOffset = fallbackAt >= 0 ? fallbackAt : searchFrom;
|
|
42
|
+
if (text === null)
|
|
43
|
+
continue;
|
|
44
|
+
const hunk = _buildEditHunk(text, startOffset, oldText, newText);
|
|
45
|
+
if (hunk.length > 0)
|
|
46
|
+
hunks.push({ lines: hunk });
|
|
47
|
+
searchFrom = startOffset + Math.max(oldText.length, 1);
|
|
48
|
+
}
|
|
49
|
+
return hunks.length === 0 ? base : { ...base, hunks };
|
|
50
|
+
}
|
|
51
|
+
function _readToolFile(filePath, cwd) {
|
|
52
|
+
if (!filePath)
|
|
53
|
+
return null;
|
|
54
|
+
const homePath = filePath.startsWith("~/") && process.env.HOME
|
|
55
|
+
? resolve(process.env.HOME, filePath.slice(2))
|
|
56
|
+
: null;
|
|
57
|
+
const candidates = [
|
|
58
|
+
filePath,
|
|
59
|
+
resolve(cwd, filePath),
|
|
60
|
+
resolve(process.cwd(), filePath),
|
|
61
|
+
homePath,
|
|
62
|
+
].filter((p) => typeof p === "string");
|
|
63
|
+
for (const candidate of candidates) {
|
|
64
|
+
try {
|
|
65
|
+
return readFileSync(candidate, "utf8");
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// try next candidate
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
function _buildEditHunk(fileText, startOffset, oldText, newText) {
|
|
74
|
+
const context = 4;
|
|
75
|
+
const fileLines = fileText.split("\n");
|
|
76
|
+
const oldLines = _splitPreviewLines(oldText);
|
|
77
|
+
const newLines = _splitPreviewLines(newText);
|
|
78
|
+
const oldStart = _lineNumberAt(fileText, startOffset);
|
|
79
|
+
const newStart = oldStart;
|
|
80
|
+
const startIndex = oldStart - 1;
|
|
81
|
+
const beforeStart = Math.max(0, startIndex - context);
|
|
82
|
+
const afterStart = startIndex + oldLines.length;
|
|
83
|
+
const afterEnd = Math.min(fileLines.length, afterStart + context);
|
|
84
|
+
const out = [];
|
|
85
|
+
if (beforeStart > 0)
|
|
86
|
+
out.push({ kind: "ellipsis" });
|
|
87
|
+
for (let i = beforeStart; i < startIndex; i++) {
|
|
88
|
+
out.push({
|
|
89
|
+
kind: "context",
|
|
90
|
+
oldLine: i + 1,
|
|
91
|
+
newLine: i + 1,
|
|
92
|
+
text: fileLines[i] ?? "",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
let commonPrefix = 0;
|
|
96
|
+
while (commonPrefix < oldLines.length &&
|
|
97
|
+
commonPrefix < newLines.length &&
|
|
98
|
+
oldLines[commonPrefix] === newLines[commonPrefix]) {
|
|
99
|
+
commonPrefix++;
|
|
100
|
+
}
|
|
101
|
+
let commonSuffix = 0;
|
|
102
|
+
while (commonSuffix < oldLines.length - commonPrefix &&
|
|
103
|
+
commonSuffix < newLines.length - commonPrefix &&
|
|
104
|
+
oldLines[oldLines.length - 1 - commonSuffix] ===
|
|
105
|
+
newLines[newLines.length - 1 - commonSuffix]) {
|
|
106
|
+
commonSuffix++;
|
|
107
|
+
}
|
|
108
|
+
for (let i = 0; i < commonPrefix; i++) {
|
|
109
|
+
out.push({
|
|
110
|
+
kind: "context",
|
|
111
|
+
oldLine: oldStart + i,
|
|
112
|
+
newLine: newStart + i,
|
|
113
|
+
text: oldLines[i] ?? "",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
for (let i = commonPrefix; i < oldLines.length - commonSuffix; i++) {
|
|
117
|
+
out.push({
|
|
118
|
+
kind: "remove",
|
|
119
|
+
oldLine: oldStart + i,
|
|
120
|
+
text: oldLines[i] ?? "",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
for (let i = commonPrefix; i < newLines.length - commonSuffix; i++) {
|
|
124
|
+
out.push({ kind: "add", newLine: newStart + i, text: newLines[i] ?? "" });
|
|
125
|
+
}
|
|
126
|
+
for (let i = oldLines.length - commonSuffix; i < oldLines.length; i++) {
|
|
127
|
+
const newLine = newStart + newLines.length - (oldLines.length - i);
|
|
128
|
+
out.push({
|
|
129
|
+
kind: "context",
|
|
130
|
+
oldLine: oldStart + i,
|
|
131
|
+
newLine,
|
|
132
|
+
text: oldLines[i] ?? "",
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
for (let i = afterStart; i < afterEnd; i++) {
|
|
136
|
+
const newLine = newStart + newLines.length + (i - afterStart);
|
|
137
|
+
out.push({
|
|
138
|
+
kind: "context",
|
|
139
|
+
oldLine: i + 1,
|
|
140
|
+
newLine,
|
|
141
|
+
text: fileLines[i] ?? "",
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (afterEnd < fileLines.length)
|
|
145
|
+
out.push({ kind: "ellipsis" });
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
function _lineNumberAt(text, offset) {
|
|
149
|
+
let line = 1;
|
|
150
|
+
for (let i = 0; i < Math.max(0, offset); i++)
|
|
151
|
+
if (text[i] === "\n")
|
|
152
|
+
line++;
|
|
153
|
+
return line;
|
|
154
|
+
}
|
|
155
|
+
function _splitPreviewLines(text) {
|
|
156
|
+
if (!text)
|
|
157
|
+
return [];
|
|
158
|
+
const lines = text.split("\n");
|
|
159
|
+
if (lines.length > 0 && lines[lines.length - 1] === "")
|
|
160
|
+
lines.pop();
|
|
161
|
+
return lines;
|
|
162
|
+
}
|
|
163
|
+
function _stringArg(args, keys) {
|
|
164
|
+
for (const key of keys) {
|
|
165
|
+
const value = args[key];
|
|
166
|
+
if (typeof value === "string")
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
return "";
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=enrich_tool_args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich_tool_args.js","sourceRoot":"","sources":["../src/enrich_tool_args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image codec + on-disk preview paths for received images — the pure(ish)
|
|
3
|
+
* encode/decode/validate/path layer, split from the stateful preview-DELIVERY
|
|
4
|
+
* logic (queueing/broadcast) that stays in index.ts. Owns its own temp-dir
|
|
5
|
+
* cache. `convertToPng` normalizes any supported mime to a PNG preview.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RECEIVED_IMAGE_MAX_BYTES: number;
|
|
8
|
+
export declare const IMAGE_PREVIEW_MIME = "image/png";
|
|
9
|
+
export declare function _imageCacheRootDir(): string;
|
|
10
|
+
export declare function _imageExtension(mime: string): string | undefined;
|
|
11
|
+
export declare function _safeFilenameToken(value: string): string;
|
|
12
|
+
export declare function _safePreviewPath(dir: string, messageId: string, index: number): string;
|
|
13
|
+
export declare function _cleanupPreviewFile(previewPath: string): void;
|
|
14
|
+
export declare function _renderablePngPathFromImage(imageData: string, mime: string, previewPath: string): Promise<string | undefined>;
|
|
15
|
+
export declare function _decodeImagePayload(data: string, mime: string): {
|
|
16
|
+
ok: true;
|
|
17
|
+
decoded: Buffer;
|
|
18
|
+
size: number;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
reason: string;
|
|
22
|
+
};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { convertToPng } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, mkdtempSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
/**
|
|
6
|
+
* Image codec + on-disk preview paths for received images — the pure(ish)
|
|
7
|
+
* encode/decode/validate/path layer, split from the stateful preview-DELIVERY
|
|
8
|
+
* logic (queueing/broadcast) that stays in index.ts. Owns its own temp-dir
|
|
9
|
+
* cache. `convertToPng` normalizes any supported mime to a PNG preview.
|
|
10
|
+
*/
|
|
11
|
+
export const RECEIVED_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
|
|
12
|
+
export const IMAGE_PREVIEW_MIME = "image/png";
|
|
13
|
+
const IMAGE_CACHE_PREFIX = "pi-app-";
|
|
14
|
+
let _imageCacheDir;
|
|
15
|
+
function _isBase64Char(code) {
|
|
16
|
+
return ((code >= 48 && code <= 57) || // 0-9
|
|
17
|
+
(code >= 65 && code <= 90) || // A-Z
|
|
18
|
+
(code >= 97 && code <= 122) || // a-z
|
|
19
|
+
code === 43 || // +
|
|
20
|
+
code === 47); // /
|
|
21
|
+
}
|
|
22
|
+
function _isStrictBase64(data) {
|
|
23
|
+
if (data.length === 0 || data.length % 4 !== 0)
|
|
24
|
+
return false;
|
|
25
|
+
if (data.startsWith("="))
|
|
26
|
+
return false;
|
|
27
|
+
const padding = data.endsWith("==") ? 2 : data.endsWith("=") ? 1 : 0;
|
|
28
|
+
for (let i = 0; i < data.length; i += 1) {
|
|
29
|
+
const code = data.charCodeAt(i);
|
|
30
|
+
if (i >= data.length - padding) {
|
|
31
|
+
if (code !== 61)
|
|
32
|
+
return false;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (!_isBase64Char(code))
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
export function _imageCacheRootDir() {
|
|
41
|
+
if (_imageCacheDir) {
|
|
42
|
+
try {
|
|
43
|
+
mkdirSync(_imageCacheDir, { recursive: true, mode: 0o700 });
|
|
44
|
+
}
|
|
45
|
+
catch { }
|
|
46
|
+
try {
|
|
47
|
+
chmodSync(_imageCacheDir, 0o700);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* best-effort permission hardening */
|
|
51
|
+
}
|
|
52
|
+
return _imageCacheDir;
|
|
53
|
+
}
|
|
54
|
+
const dir = mkdtempSync(join(tmpdir(), IMAGE_CACHE_PREFIX));
|
|
55
|
+
try {
|
|
56
|
+
chmodSync(dir, 0o700);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* best-effort permission hardening */
|
|
60
|
+
}
|
|
61
|
+
_imageCacheDir = dir;
|
|
62
|
+
return dir;
|
|
63
|
+
}
|
|
64
|
+
export function _imageExtension(mime) {
|
|
65
|
+
if (mime === "image/jpeg")
|
|
66
|
+
return "jpg";
|
|
67
|
+
if (mime === "image/png")
|
|
68
|
+
return "png";
|
|
69
|
+
if (mime === "image/webp")
|
|
70
|
+
return "webp";
|
|
71
|
+
if (mime === "image/gif")
|
|
72
|
+
return "gif";
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
export function _safeFilenameToken(value) {
|
|
76
|
+
return (value
|
|
77
|
+
.trim()
|
|
78
|
+
.replace(/[^A-Za-z0-9._-]+/g, "-")
|
|
79
|
+
.replace(/-+/g, "-")
|
|
80
|
+
.replace(/^-+|-+$/g, "") || "message");
|
|
81
|
+
}
|
|
82
|
+
export function _safePreviewPath(dir, messageId, index) {
|
|
83
|
+
return join(dir, `${_safeFilenameToken(messageId)}-${index}.preview.png`);
|
|
84
|
+
}
|
|
85
|
+
export function _cleanupPreviewFile(previewPath) {
|
|
86
|
+
try {
|
|
87
|
+
if (existsSync(previewPath))
|
|
88
|
+
unlinkSync(previewPath);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// best effort
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export async function _renderablePngPathFromImage(imageData, mime, previewPath) {
|
|
95
|
+
if (mime === IMAGE_PREVIEW_MIME)
|
|
96
|
+
return undefined;
|
|
97
|
+
try {
|
|
98
|
+
const converted = await convertToPng(imageData, mime);
|
|
99
|
+
if (!converted ||
|
|
100
|
+
converted.mimeType !== IMAGE_PREVIEW_MIME ||
|
|
101
|
+
!converted.data) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
const previewBytes = Buffer.from(converted.data, "base64");
|
|
105
|
+
if (previewBytes.length === 0 ||
|
|
106
|
+
previewBytes.length > RECEIVED_IMAGE_MAX_BYTES) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
writeFileSync(previewPath, previewBytes, { mode: 0o600 });
|
|
111
|
+
try {
|
|
112
|
+
chmodSync(previewPath, 0o600);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
/* best-effort permission hardening */
|
|
116
|
+
}
|
|
117
|
+
return previewPath;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
_cleanupPreviewFile(previewPath);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
_cleanupPreviewFile(previewPath);
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
export function _decodeImagePayload(data, mime) {
|
|
129
|
+
if (!_imageExtension(mime))
|
|
130
|
+
return { ok: false, reason: `unsupported mime: ${mime}` };
|
|
131
|
+
if (data.startsWith("data:"))
|
|
132
|
+
return { ok: false, reason: "data URI payloads are not supported" };
|
|
133
|
+
if (!_isStrictBase64(data))
|
|
134
|
+
return { ok: false, reason: "invalid base64 payload" };
|
|
135
|
+
const padding = data.endsWith("==") ? 2 : data.endsWith("=") ? 1 : 0;
|
|
136
|
+
const estimate = (data.length / 4) * 3 - padding;
|
|
137
|
+
if (estimate > RECEIVED_IMAGE_MAX_BYTES) {
|
|
138
|
+
return { ok: false, reason: `image too large (${estimate} bytes)` };
|
|
139
|
+
}
|
|
140
|
+
const decoded = Buffer.from(data, "base64");
|
|
141
|
+
if (decoded.length === 0 || decoded.length > RECEIVED_IMAGE_MAX_BYTES) {
|
|
142
|
+
return {
|
|
143
|
+
ok: false,
|
|
144
|
+
reason: `invalid decoded image size (${decoded.length} bytes)`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return { ok: true, decoded, size: decoded.length };
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=image_codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image_codec.js","sourceRoot":"","sources":["../src/image_codec.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -141,9 +141,6 @@ export declare function _handleControl(cmd: string): Promise<void>;
|
|
|
141
141
|
* singleton semantics.
|
|
142
142
|
*/
|
|
143
143
|
export declare function _onPeerDisconnect(appPeerId?: string): void;
|
|
144
|
-
/** Build the argv for a detached tmux launch of `pi` in `cwd`. Args are an
|
|
145
|
-
* ARRAY (never a shell string) so cwd/name can't inject. Exported for tests. */
|
|
146
|
-
export declare function _buildTmuxLaunchArgs(name: string, cwd: string): string[];
|
|
147
144
|
declare const extension: ExtensionFactory;
|
|
148
145
|
export default extension;
|
|
149
146
|
/** Test-only entry point for verifying mesh-to-agent delivery semantics. */
|
|
@@ -155,29 +152,6 @@ export declare function _routeClientMessageFrom(sender: PlainPeerChannel, msg: C
|
|
|
155
152
|
* mirroring the pre-W2D singleton behavior.
|
|
156
153
|
*/
|
|
157
154
|
export declare function routeClientMessage(msg: ClientMessage, ctx: Pick<ExtensionContext, "abort">): void;
|
|
158
|
-
type ToolArgs = Record<string, unknown>;
|
|
159
|
-
export declare function _enrichToolArgs(tool: string, args: unknown): ToolArgs;
|
|
160
|
-
/**
|
|
161
|
-
* `unbien restart-supervisor` — restarts the `pi-supervisord` PROCESS
|
|
162
|
-
* (not the daemons). The supervisor is a long-running Node process with no
|
|
163
|
-
* hot-reload, so after a `dist` rebuild the old code keeps running until the
|
|
164
|
-
* process is restarted. The Cockpit "Restart supervisor" button shells out to
|
|
165
|
-
* this; the OS-specific restart lives here so the app stays cross-platform.
|
|
166
|
-
*
|
|
167
|
-
* Restarting the supervisor re-spawns every daemon as a side effect. Exits 0
|
|
168
|
-
* on success, non-zero on failure (the Cockpit detects failure by exit code).
|
|
169
|
-
*/
|
|
170
|
-
/** One step of a restart sequence. `ignoreFailure` steps (e.g. `schtasks /End`
|
|
171
|
-
* when the task isn't running) don't abort the sequence. */
|
|
172
|
-
export interface RestartStep {
|
|
173
|
-
cmd: string;
|
|
174
|
-
args: string[];
|
|
175
|
-
ignoreFailure?: boolean;
|
|
176
|
-
}
|
|
177
|
-
/** Pure: the OS command sequence that restarts the supervisor service, or null
|
|
178
|
-
* when the platform isn't supported. Most platforms are 1 step; Windows is 2
|
|
179
|
-
* (`schtasks /End` then `/Run`). Exported for tests. */
|
|
180
|
-
export declare function _restartSupervisorCommand(platform: NodeJS.Platform, uid: number): RestartStep[] | null;
|
|
181
155
|
/**
|
|
182
156
|
* Read-only probe of the local UDS broker for the mesh roster, backing
|
|
183
157
|
* `unbien peers`. Opens a raw connection to `sockPath`, sends a single
|