@seat-mesh/core 0.1.2
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/dist/chatfile/chatfile.test.d.ts +2 -0
- package/dist/chatfile/chatfile.test.d.ts.map +1 -0
- package/dist/chatfile/chatfile.test.js +86 -0
- package/dist/chatfile/chatfile.test.js.map +1 -0
- package/dist/chatfile/index.d.ts +5 -0
- package/dist/chatfile/index.d.ts.map +1 -0
- package/dist/chatfile/index.js +5 -0
- package/dist/chatfile/index.js.map +1 -0
- package/dist/chatfile/record.d.ts +12 -0
- package/dist/chatfile/record.d.ts.map +1 -0
- package/dist/chatfile/record.js +38 -0
- package/dist/chatfile/record.js.map +1 -0
- package/dist/chatfile/slot.d.ts +4 -0
- package/dist/chatfile/slot.d.ts.map +1 -0
- package/dist/chatfile/slot.js +14 -0
- package/dist/chatfile/slot.js.map +1 -0
- package/dist/chatfile/store.d.ts +23 -0
- package/dist/chatfile/store.d.ts.map +1 -0
- package/dist/chatfile/store.js +92 -0
- package/dist/chatfile/store.js.map +1 -0
- package/dist/chatfile/types.d.ts +47 -0
- package/dist/chatfile/types.d.ts.map +1 -0
- package/dist/chatfile/types.js +16 -0
- package/dist/chatfile/types.js.map +1 -0
- package/dist/chatroom/agent-id.d.ts +7 -0
- package/dist/chatroom/agent-id.d.ts.map +1 -0
- package/dist/chatroom/agent-id.js +18 -0
- package/dist/chatroom/agent-id.js.map +1 -0
- package/dist/chatroom/calls.d.ts +30 -0
- package/dist/chatroom/calls.d.ts.map +1 -0
- package/dist/chatroom/calls.js +75 -0
- package/dist/chatroom/calls.js.map +1 -0
- package/dist/chatroom/calls.test.d.ts +2 -0
- package/dist/chatroom/calls.test.d.ts.map +1 -0
- package/dist/chatroom/calls.test.js +54 -0
- package/dist/chatroom/calls.test.js.map +1 -0
- package/dist/chatroom/checkback-hint.d.ts +51 -0
- package/dist/chatroom/checkback-hint.d.ts.map +1 -0
- package/dist/chatroom/checkback-hint.js +140 -0
- package/dist/chatroom/checkback-hint.js.map +1 -0
- package/dist/chatroom/checkback-hint.test.d.ts +2 -0
- package/dist/chatroom/checkback-hint.test.d.ts.map +1 -0
- package/dist/chatroom/checkback-hint.test.js +9 -0
- package/dist/chatroom/checkback-hint.test.js.map +1 -0
- package/dist/chatroom/checkback.d.ts +21 -0
- package/dist/chatroom/checkback.d.ts.map +1 -0
- package/dist/chatroom/checkback.js +58 -0
- package/dist/chatroom/checkback.js.map +1 -0
- package/dist/chatroom/comms-checkback.d.ts +25 -0
- package/dist/chatroom/comms-checkback.d.ts.map +1 -0
- package/dist/chatroom/comms-checkback.js +41 -0
- package/dist/chatroom/comms-checkback.js.map +1 -0
- package/dist/chatroom/duration.d.ts +4 -0
- package/dist/chatroom/duration.d.ts.map +1 -0
- package/dist/chatroom/duration.js +18 -0
- package/dist/chatroom/duration.js.map +1 -0
- package/dist/chatroom/fanout-routing.d.ts +27 -0
- package/dist/chatroom/fanout-routing.d.ts.map +1 -0
- package/dist/chatroom/fanout-routing.js +131 -0
- package/dist/chatroom/fanout-routing.js.map +1 -0
- package/dist/chatroom/fanout-routing.test.d.ts +2 -0
- package/dist/chatroom/fanout-routing.test.d.ts.map +1 -0
- package/dist/chatroom/fanout-routing.test.js +125 -0
- package/dist/chatroom/fanout-routing.test.js.map +1 -0
- package/dist/chatroom/global.d.ts +6 -0
- package/dist/chatroom/global.d.ts.map +1 -0
- package/dist/chatroom/global.js +13 -0
- package/dist/chatroom/global.js.map +1 -0
- package/dist/chatroom/inbox-client.d.ts +49 -0
- package/dist/chatroom/inbox-client.d.ts.map +1 -0
- package/dist/chatroom/inbox-client.js +73 -0
- package/dist/chatroom/inbox-client.js.map +1 -0
- package/dist/chatroom/index.d.ts +13 -0
- package/dist/chatroom/index.d.ts.map +1 -0
- package/dist/chatroom/index.js +13 -0
- package/dist/chatroom/index.js.map +1 -0
- package/dist/chatroom/mentions.d.ts +4 -0
- package/dist/chatroom/mentions.d.ts.map +1 -0
- package/dist/chatroom/mentions.js +20 -0
- package/dist/chatroom/mentions.js.map +1 -0
- package/dist/chatroom/mentions.test.d.ts +2 -0
- package/dist/chatroom/mentions.test.d.ts.map +1 -0
- package/dist/chatroom/mentions.test.js +12 -0
- package/dist/chatroom/mentions.test.js.map +1 -0
- package/dist/chatroom/read-state.d.ts +17 -0
- package/dist/chatroom/read-state.d.ts.map +1 -0
- package/dist/chatroom/read-state.js +84 -0
- package/dist/chatroom/read-state.js.map +1 -0
- package/dist/chatroom/room.d.ts +66 -0
- package/dist/chatroom/room.d.ts.map +1 -0
- package/dist/chatroom/room.js +249 -0
- package/dist/chatroom/room.js.map +1 -0
- package/dist/chatroom/room.test.d.ts +2 -0
- package/dist/chatroom/room.test.d.ts.map +1 -0
- package/dist/chatroom/room.test.js +169 -0
- package/dist/chatroom/room.test.js.map +1 -0
- package/dist/chatroom/types.d.ts +71 -0
- package/dist/chatroom/types.d.ts.map +1 -0
- package/dist/chatroom/types.js +37 -0
- package/dist/chatroom/types.js.map +1 -0
- package/dist/comms/envelope.d.ts +134 -0
- package/dist/comms/envelope.d.ts.map +1 -0
- package/dist/comms/envelope.js +33 -0
- package/dist/comms/envelope.js.map +1 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/supervise-contract.test.d.ts +2 -0
- package/dist/contracts/supervise-contract.test.d.ts.map +1 -0
- package/dist/contracts/supervise-contract.test.js +49 -0
- package/dist/contracts/supervise-contract.test.js.map +1 -0
- package/dist/contracts/supervise.d.ts +54 -0
- package/dist/contracts/supervise.d.ts.map +1 -0
- package/dist/contracts/supervise.js +86 -0
- package/dist/contracts/supervise.js.map +1 -0
- package/dist/dotdir.d.ts +11 -0
- package/dist/dotdir.d.ts.map +1 -0
- package/dist/dotdir.js +30 -0
- package/dist/dotdir.js.map +1 -0
- package/dist/dotdir.test.d.ts +2 -0
- package/dist/dotdir.test.d.ts.map +1 -0
- package/dist/dotdir.test.js +26 -0
- package/dist/dotdir.test.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonl/index.d.ts +2 -0
- package/dist/jsonl/index.d.ts.map +1 -0
- package/dist/jsonl/index.js +2 -0
- package/dist/jsonl/index.js.map +1 -0
- package/dist/jsonl/store.d.ts +7 -0
- package/dist/jsonl/store.d.ts.map +1 -0
- package/dist/jsonl/store.js +61 -0
- package/dist/jsonl/store.js.map +1 -0
- package/dist/layout/enabled.d.ts +6 -0
- package/dist/layout/enabled.d.ts.map +1 -0
- package/dist/layout/enabled.js +10 -0
- package/dist/layout/enabled.js.map +1 -0
- package/dist/layout/enabled.test.d.ts +2 -0
- package/dist/layout/enabled.test.d.ts.map +1 -0
- package/dist/layout/enabled.test.js +30 -0
- package/dist/layout/enabled.test.js.map +1 -0
- package/dist/layout/minis.d.ts +17 -0
- package/dist/layout/minis.d.ts.map +1 -0
- package/dist/layout/minis.js +55 -0
- package/dist/layout/minis.js.map +1 -0
- package/dist/layout/stack.d.ts +5 -0
- package/dist/layout/stack.d.ts.map +1 -0
- package/dist/layout/stack.js +8 -0
- package/dist/layout/stack.js.map +1 -0
- package/dist/layout/stack.test.d.ts +2 -0
- package/dist/layout/stack.test.d.ts.map +1 -0
- package/dist/layout/stack.test.js +20 -0
- package/dist/layout/stack.test.js.map +1 -0
- package/dist/mesh-state-merge.d.ts +7 -0
- package/dist/mesh-state-merge.d.ts.map +1 -0
- package/dist/mesh-state-merge.js +48 -0
- package/dist/mesh-state-merge.js.map +1 -0
- package/dist/mesh-state-merge.test.d.ts +2 -0
- package/dist/mesh-state-merge.test.d.ts.map +1 -0
- package/dist/mesh-state-merge.test.js +36 -0
- package/dist/mesh-state-merge.test.js.map +1 -0
- package/dist/pane-ops/types.d.ts +14 -0
- package/dist/pane-ops/types.d.ts.map +1 -0
- package/dist/pane-ops/types.js +2 -0
- package/dist/pane-ops/types.js.map +1 -0
- package/dist/paths-manifest.d.ts +34 -0
- package/dist/paths-manifest.d.ts.map +1 -0
- package/dist/paths-manifest.js +79 -0
- package/dist/paths-manifest.js.map +1 -0
- package/dist/paths-manifest.test.d.ts +2 -0
- package/dist/paths-manifest.test.d.ts.map +1 -0
- package/dist/paths-manifest.test.js +57 -0
- package/dist/paths-manifest.test.js.map +1 -0
- package/dist/paths.d.ts +5 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +17 -0
- package/dist/paths.js.map +1 -0
- package/dist/profile.d.ts +54 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +93 -0
- package/dist/profile.js.map +1 -0
- package/dist/profile.test.d.ts +2 -0
- package/dist/profile.test.d.ts.map +1 -0
- package/dist/profile.test.js +25 -0
- package/dist/profile.test.js.map +1 -0
- package/dist/providers/registry.d.ts +3 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +24 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +82 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +5 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/queue/types.d.ts +38 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +5 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/role-index.d.ts +30 -0
- package/dist/role-index.d.ts.map +1 -0
- package/dist/role-index.js +97 -0
- package/dist/role-index.js.map +1 -0
- package/dist/runtime-paths.d.ts +43 -0
- package/dist/runtime-paths.d.ts.map +1 -0
- package/dist/runtime-paths.js +94 -0
- package/dist/runtime-paths.js.map +1 -0
- package/dist/runtime-paths.test.d.ts +2 -0
- package/dist/runtime-paths.test.d.ts.map +1 -0
- package/dist/runtime-paths.test.js +86 -0
- package/dist/runtime-paths.test.js.map +1 -0
- package/dist/schema/agents.d.ts +809 -0
- package/dist/schema/agents.d.ts.map +1 -0
- package/dist/schema/agents.js +133 -0
- package/dist/schema/agents.js.map +1 -0
- package/dist/schema/layout-manager2.test.d.ts +2 -0
- package/dist/schema/layout-manager2.test.d.ts.map +1 -0
- package/dist/schema/layout-manager2.test.js +19 -0
- package/dist/schema/layout-manager2.test.js.map +1 -0
- package/dist/schema/layout.d.ts +215 -0
- package/dist/schema/layout.d.ts.map +1 -0
- package/dist/schema/layout.js +96 -0
- package/dist/schema/layout.js.map +1 -0
- package/dist/schema/profile.d.ts +1148 -0
- package/dist/schema/profile.d.ts.map +1 -0
- package/dist/schema/profile.js +199 -0
- package/dist/schema/profile.js.map +1 -0
- package/dist/schema/ux.d.ts +359 -0
- package/dist/schema/ux.d.ts.map +1 -0
- package/dist/schema/ux.js +53 -0
- package/dist/schema/ux.js.map +1 -0
- package/dist/session/config.d.ts +3 -0
- package/dist/session/config.d.ts.map +1 -0
- package/dist/session/config.js +5 -0
- package/dist/session/config.js.map +1 -0
- package/dist/session/exec.d.ts +5 -0
- package/dist/session/exec.d.ts.map +1 -0
- package/dist/session/exec.js +29 -0
- package/dist/session/exec.js.map +1 -0
- package/dist/session/index.d.ts +3 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +3 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/session.test.d.ts +2 -0
- package/dist/session/session.test.d.ts.map +1 -0
- package/dist/session/session.test.js +12 -0
- package/dist/session/session.test.js.map +1 -0
- package/dist/slot/guards.d.ts +5 -0
- package/dist/slot/guards.d.ts.map +1 -0
- package/dist/slot/guards.js +53 -0
- package/dist/slot/guards.js.map +1 -0
- package/dist/slot/types.d.ts +54 -0
- package/dist/slot/types.d.ts.map +1 -0
- package/dist/slot/types.js +38 -0
- package/dist/slot/types.js.map +1 -0
- package/dist/stack/config.d.ts +8 -0
- package/dist/stack/config.d.ts.map +1 -0
- package/dist/stack/config.js +8 -0
- package/dist/stack/config.js.map +1 -0
- package/dist/stack/exec.d.ts +6 -0
- package/dist/stack/exec.d.ts.map +1 -0
- package/dist/stack/exec.js +52 -0
- package/dist/stack/exec.js.map +1 -0
- package/dist/stack/index.d.ts +3 -0
- package/dist/stack/index.d.ts.map +1 -0
- package/dist/stack/index.js +3 -0
- package/dist/stack/index.js.map +1 -0
- package/dist/stack/stack.test.d.ts +2 -0
- package/dist/stack/stack.test.d.ts.map +1 -0
- package/dist/stack/stack.test.js +55 -0
- package/dist/stack/stack.test.js.map +1 -0
- package/dist/ux/defaults.d.ts +4 -0
- package/dist/ux/defaults.d.ts.map +1 -0
- package/dist/ux/defaults.js +98 -0
- package/dist/ux/defaults.js.map +1 -0
- package/dist/ux/evaluate.d.ts +22 -0
- package/dist/ux/evaluate.d.ts.map +1 -0
- package/dist/ux/evaluate.js +160 -0
- package/dist/ux/evaluate.js.map +1 -0
- package/dist/ux/evaluate.test.d.ts +2 -0
- package/dist/ux/evaluate.test.d.ts.map +1 -0
- package/dist/ux/evaluate.test.js +64 -0
- package/dist/ux/evaluate.test.js.map +1 -0
- package/dist/ux/index.d.ts +3 -0
- package/dist/ux/index.d.ts.map +1 -0
- package/dist/ux/index.js +3 -0
- package/dist/ux/index.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export const PATHS_MANIFEST = "paths.json";
|
|
4
|
+
/** Resolve a harness path from mesh.config (profileDir-relative by default). */
|
|
5
|
+
export function resolveHarnessPath(loaded, rel) {
|
|
6
|
+
const scope = loaded.profile.paths?.scope ?? "profile";
|
|
7
|
+
const raw = rel.trim();
|
|
8
|
+
if (path.isAbsolute(raw))
|
|
9
|
+
return path.normalize(raw);
|
|
10
|
+
if (scope === "workspace") {
|
|
11
|
+
return path.normalize(path.resolve(loaded.workspace, raw));
|
|
12
|
+
}
|
|
13
|
+
return path.normalize(path.resolve(loaded.profileDir, raw));
|
|
14
|
+
}
|
|
15
|
+
export function pathsScope(loaded) {
|
|
16
|
+
return loaded.profile.paths?.scope ?? "profile";
|
|
17
|
+
}
|
|
18
|
+
export function storageBackend(loaded) {
|
|
19
|
+
return loaded.profile.storage?.backend ?? "sqlite";
|
|
20
|
+
}
|
|
21
|
+
export function buildResolvedPaths(loaded) {
|
|
22
|
+
const { profile } = loaded;
|
|
23
|
+
const dataRoot = resolveHarnessPath(loaded, profile.data?.root ?? "runtime");
|
|
24
|
+
const sqliteRel = profile.storage?.sqlite?.path ?? "runtime/mesh.sqlite";
|
|
25
|
+
return {
|
|
26
|
+
dataRoot,
|
|
27
|
+
daemonDir: path.join(dataRoot, "daemon"),
|
|
28
|
+
seatsRoot: resolveHarnessPath(loaded, profile.seats.root),
|
|
29
|
+
meshAgentsJson: resolveHarnessPath(loaded, profile.state.meshAgentsJson),
|
|
30
|
+
agentsJson: resolveHarnessPath(loaded, profile.state.agentsJson),
|
|
31
|
+
chatRoomsRoot: resolveHarnessPath(loaded, profile.chatRooms?.root ?? "chat-rooms"),
|
|
32
|
+
chatFilesRoot: resolveHarnessPath(loaded, profile.chatFiles?.root ?? "chat-files"),
|
|
33
|
+
rolesDir: path.resolve(loaded.profileDir, profile.roles.dir),
|
|
34
|
+
contractsDir: path.resolve(loaded.profileDir, "contracts"),
|
|
35
|
+
sqlitePath: resolveHarnessPath(loaded, sqliteRel),
|
|
36
|
+
storageBackend: storageBackend(loaded),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function workspaceRelativeHint(workspace, abs) {
|
|
40
|
+
const rel = path.relative(workspace, abs);
|
|
41
|
+
return rel && !rel.startsWith("..") ? rel : abs;
|
|
42
|
+
}
|
|
43
|
+
/** Write `.sm/paths.json` (workspace-relative path hints for agents). */
|
|
44
|
+
export function writePathsManifest(loaded) {
|
|
45
|
+
const resolved = buildResolvedPaths(loaded);
|
|
46
|
+
const outPath = path.join(loaded.profileDir, PATHS_MANIFEST);
|
|
47
|
+
const doc = {
|
|
48
|
+
version: 1,
|
|
49
|
+
profileDir: loaded.profileDir,
|
|
50
|
+
workspace: loaded.workspace,
|
|
51
|
+
pathsScope: pathsScope(loaded),
|
|
52
|
+
paths: {
|
|
53
|
+
dataRoot: workspaceRelativeHint(loaded.workspace, resolved.dataRoot),
|
|
54
|
+
daemonDir: workspaceRelativeHint(loaded.workspace, resolved.daemonDir),
|
|
55
|
+
seatsRoot: workspaceRelativeHint(loaded.workspace, resolved.seatsRoot),
|
|
56
|
+
meshAgentsJson: workspaceRelativeHint(loaded.workspace, resolved.meshAgentsJson),
|
|
57
|
+
agentsJson: workspaceRelativeHint(loaded.workspace, resolved.agentsJson),
|
|
58
|
+
chatRoomsRoot: workspaceRelativeHint(loaded.workspace, resolved.chatRoomsRoot),
|
|
59
|
+
chatFilesRoot: workspaceRelativeHint(loaded.workspace, resolved.chatFilesRoot),
|
|
60
|
+
rolesDir: workspaceRelativeHint(loaded.workspace, resolved.rolesDir),
|
|
61
|
+
contractsDir: workspaceRelativeHint(loaded.workspace, resolved.contractsDir),
|
|
62
|
+
sqlitePath: workspaceRelativeHint(loaded.workspace, resolved.sqlitePath),
|
|
63
|
+
storageBackend: resolved.storageBackend,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
fs.mkdirSync(loaded.profileDir, { recursive: true });
|
|
67
|
+
fs.writeFileSync(outPath, JSON.stringify(doc, null, 2) + "\n");
|
|
68
|
+
return outPath;
|
|
69
|
+
}
|
|
70
|
+
/** Refuse harness paths outside profileDir when scope=profile (safety guard). */
|
|
71
|
+
export function assertHarnessUnderDotdir(loaded, absPath, label) {
|
|
72
|
+
if (pathsScope(loaded) !== "profile")
|
|
73
|
+
return;
|
|
74
|
+
const rel = path.relative(loaded.profileDir, absPath);
|
|
75
|
+
if (rel.startsWith("..") || path.isAbsolute(rel)) {
|
|
76
|
+
throw new Error(`harness path ${label} must live under profile dir ${loaded.profileDir} (got ${absPath})`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=paths-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths-manifest.js","sourceRoot":"","sources":["../src/paths-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths-manifest.test.d.ts","sourceRoot":"","sources":["../src/paths-manifest.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { buildResolvedPaths, PATHS_MANIFEST, resolveHarnessPath, writePathsManifest, } from "./paths-manifest.js";
|
|
6
|
+
function stubLoaded(profileDir, workspace) {
|
|
7
|
+
const profile = {
|
|
8
|
+
name: "ci",
|
|
9
|
+
workspace: "..",
|
|
10
|
+
paths: { scope: "profile" },
|
|
11
|
+
storage: { backend: "sqlite", sqlite: { path: "runtime/mesh.sqlite" } },
|
|
12
|
+
session: {
|
|
13
|
+
name: "mesh",
|
|
14
|
+
scope: "workspace",
|
|
15
|
+
idLength: 6,
|
|
16
|
+
workerCount: 4,
|
|
17
|
+
miniMax: 4,
|
|
18
|
+
},
|
|
19
|
+
seats: { root: "seats", templates: ["FOCUS"], dirs: {} },
|
|
20
|
+
state: { agentsJson: "tmux-main-agents.json", meshAgentsJson: "mesh-agents.json" },
|
|
21
|
+
roles: { dir: "roles" },
|
|
22
|
+
data: { root: "runtime" },
|
|
23
|
+
providers: ["empty"],
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
profile,
|
|
27
|
+
profileDir,
|
|
28
|
+
profilePath: path.join(profileDir, "mesh.config.yaml"),
|
|
29
|
+
workspace,
|
|
30
|
+
workspaceId: "abc123",
|
|
31
|
+
sessionName: "mesh-abc123",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
describe("paths-manifest", () => {
|
|
35
|
+
it("resolves harness paths under profileDir", () => {
|
|
36
|
+
const ws = fs.mkdtempSync(path.join(os.tmpdir(), "sm-paths-"));
|
|
37
|
+
const sm = path.join(ws, ".sm");
|
|
38
|
+
fs.mkdirSync(sm, { recursive: true });
|
|
39
|
+
const loaded = stubLoaded(sm, ws);
|
|
40
|
+
const p = buildResolvedPaths(loaded);
|
|
41
|
+
expect(p.daemonDir).toBe(path.join(sm, "runtime", "daemon"));
|
|
42
|
+
expect(p.sqlitePath).toBe(path.join(sm, "runtime", "mesh.sqlite"));
|
|
43
|
+
expect(p.chatRoomsRoot).toBe(path.join(sm, "chat-rooms"));
|
|
44
|
+
expect(resolveHarnessPath(loaded, "seats")).toBe(path.join(sm, "seats"));
|
|
45
|
+
});
|
|
46
|
+
it("writes paths.json", () => {
|
|
47
|
+
const ws = fs.mkdtempSync(path.join(os.tmpdir(), "sm-paths-"));
|
|
48
|
+
const sm = path.join(ws, ".sm");
|
|
49
|
+
fs.mkdirSync(sm, { recursive: true });
|
|
50
|
+
const loaded = stubLoaded(sm, ws);
|
|
51
|
+
const out = writePathsManifest(loaded);
|
|
52
|
+
expect(out).toBe(path.join(sm, PATHS_MANIFEST));
|
|
53
|
+
const doc = JSON.parse(fs.readFileSync(out, "utf8"));
|
|
54
|
+
expect(doc.pathsScope).toBe("profile");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=paths-manifest.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths-manifest.test.js","sourceRoot":"","sources":["../src/paths-manifest.test.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function resolveWorkspace(profileWorkspace: string, profileDir: string): string;
|
|
2
|
+
export declare function resolveFromWorkspace(workspace: string, rel: string): string;
|
|
3
|
+
export declare function resolveFromProfile(profileDir: string, rel: string): string;
|
|
4
|
+
export declare function portsForSlot(formula: string, slot: number): string;
|
|
5
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export function resolveWorkspace(profileWorkspace, profileDir) {
|
|
3
|
+
const raw = profileWorkspace.trim();
|
|
4
|
+
if (path.isAbsolute(raw))
|
|
5
|
+
return path.normalize(raw);
|
|
6
|
+
return path.normalize(path.resolve(profileDir, raw));
|
|
7
|
+
}
|
|
8
|
+
export function resolveFromWorkspace(workspace, rel) {
|
|
9
|
+
return path.normalize(path.resolve(workspace, rel));
|
|
10
|
+
}
|
|
11
|
+
export function resolveFromProfile(profileDir, rel) {
|
|
12
|
+
return path.normalize(path.resolve(profileDir, rel));
|
|
13
|
+
}
|
|
14
|
+
export function portsForSlot(formula, slot) {
|
|
15
|
+
return formula.replace(/\{n\}/g, String(slot));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,gBAAgB,CAAC,gBAAwB,EAAE,UAAkB;IAC3E,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,GAAW;IACjE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,GAAW;IAChE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY;IACxD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type MeshProfile } from "./schema/profile.js";
|
|
2
|
+
import { type MeshRuntimePaths } from "./runtime-paths.js";
|
|
3
|
+
export interface LoadedProfile {
|
|
4
|
+
profile: MeshProfile;
|
|
5
|
+
profileDir: string;
|
|
6
|
+
profilePath: string;
|
|
7
|
+
workspace: string;
|
|
8
|
+
/** Short hash of resolved workspace path. */
|
|
9
|
+
workspaceId: string;
|
|
10
|
+
/** Resolved tmux session name (may include workspace suffix). */
|
|
11
|
+
sessionName: string;
|
|
12
|
+
}
|
|
13
|
+
export type { MeshRuntimePaths };
|
|
14
|
+
export { meshRuntimePaths, resolveDaemonPort, resolveSessionName, workspaceScopeId, resolveConnectivityHooks, runtimePathHint, } from "./runtime-paths.js";
|
|
15
|
+
/** seat-mesh package root (profiles/ lives here). */
|
|
16
|
+
export declare function seatMeshPackageRoot(): string;
|
|
17
|
+
/** Default profile: workspace `.sm/` when present, else bundled minimal. No flags required. */
|
|
18
|
+
export declare function defaultProfilePath(): string;
|
|
19
|
+
export declare function findProfilePath(explicit?: string, searchFrom?: string): string;
|
|
20
|
+
export declare function loadProfile(explicit?: string): LoadedProfile;
|
|
21
|
+
export declare function profilePaths(loaded: LoadedProfile): {
|
|
22
|
+
dataRoot: string;
|
|
23
|
+
daemonDir: string;
|
|
24
|
+
sqlitePath: string;
|
|
25
|
+
storageBackend: import("./paths-manifest.js").StorageBackend;
|
|
26
|
+
inboxJsonl: string;
|
|
27
|
+
peerJsonl: string;
|
|
28
|
+
checkbackJsonl: string;
|
|
29
|
+
paneOpsJsonl: string;
|
|
30
|
+
callsJsonl: string;
|
|
31
|
+
meshInboxMeta: string;
|
|
32
|
+
meshInboxStop: string;
|
|
33
|
+
meshInboxLog: string;
|
|
34
|
+
coldStartState: string;
|
|
35
|
+
ppaState: string;
|
|
36
|
+
wifiProbeLock: string;
|
|
37
|
+
minisJson: string;
|
|
38
|
+
miniDone: string;
|
|
39
|
+
miniManifest: string;
|
|
40
|
+
gateQueue: string;
|
|
41
|
+
seatsRoot: string;
|
|
42
|
+
agentsJson: string;
|
|
43
|
+
meshAgentsJson: string;
|
|
44
|
+
chatRoomsRoot: string;
|
|
45
|
+
chatFilesRoot: string;
|
|
46
|
+
rolesDir: string;
|
|
47
|
+
contractsDir: string;
|
|
48
|
+
managerDir: string;
|
|
49
|
+
manager2Dir: string;
|
|
50
|
+
secretaryDir: string;
|
|
51
|
+
daemonPort: number;
|
|
52
|
+
pathsManifest: string;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAO1E,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,qDAAqD;AACrD,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,SAAgB,GAAG,MAAM,CAqBrF;AAED,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CAgB5D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCjD"}
|
package/dist/profile.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
import { findDotSmConfig } from "./dotdir.js";
|
|
5
|
+
import { MeshProfileSchema } from "./schema/profile.js";
|
|
6
|
+
import { resolveWorkspace } from "./paths.js";
|
|
7
|
+
import { buildResolvedPaths, writePathsManifest, assertHarnessUnderDotdir, } from "./paths-manifest.js";
|
|
8
|
+
import { meshRuntimePaths, resolveDaemonPort, resolveSessionName, workspaceScopeId, } from "./runtime-paths.js";
|
|
9
|
+
export { meshRuntimePaths, resolveDaemonPort, resolveSessionName, workspaceScopeId, resolveConnectivityHooks, runtimePathHint, } from "./runtime-paths.js";
|
|
10
|
+
/** seat-mesh package root (profiles/ lives here). */
|
|
11
|
+
export function seatMeshPackageRoot() {
|
|
12
|
+
return path.resolve(import.meta.dirname, "../../..");
|
|
13
|
+
}
|
|
14
|
+
/** Default profile: workspace `.sm/` when present, else bundled minimal. No flags required. */
|
|
15
|
+
export function defaultProfilePath() {
|
|
16
|
+
const root = seatMeshPackageRoot();
|
|
17
|
+
const candidates = [path.join(root, "profiles/minimal/mesh.config.yaml")];
|
|
18
|
+
for (const cfg of candidates) {
|
|
19
|
+
if (fs.existsSync(cfg))
|
|
20
|
+
return cfg;
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`no default profile under ${root}/profiles/`);
|
|
23
|
+
}
|
|
24
|
+
export function findProfilePath(explicit, searchFrom = process.cwd()) {
|
|
25
|
+
if (explicit) {
|
|
26
|
+
const p = path.resolve(explicit);
|
|
27
|
+
if (fs.statSync(p).isDirectory()) {
|
|
28
|
+
const dotCfg = path.join(p, ".sm", "mesh.config.yaml");
|
|
29
|
+
const cfg = fs.existsSync(dotCfg) ? dotCfg : path.join(p, "mesh.config.yaml");
|
|
30
|
+
if (!fs.existsSync(cfg)) {
|
|
31
|
+
throw new Error(`profile directory missing mesh.config.yaml (or .sm/mesh.config.yaml): ${p}`);
|
|
32
|
+
}
|
|
33
|
+
return cfg;
|
|
34
|
+
}
|
|
35
|
+
if (!fs.existsSync(p))
|
|
36
|
+
throw new Error(`profile not found: ${p}`);
|
|
37
|
+
return p;
|
|
38
|
+
}
|
|
39
|
+
const dotCfg = findDotSmConfig(searchFrom);
|
|
40
|
+
if (dotCfg)
|
|
41
|
+
return dotCfg;
|
|
42
|
+
return defaultProfilePath();
|
|
43
|
+
}
|
|
44
|
+
export function loadProfile(explicit) {
|
|
45
|
+
const profilePath = findProfilePath(explicit);
|
|
46
|
+
const profileDir = path.dirname(profilePath);
|
|
47
|
+
const raw = YAML.parse(fs.readFileSync(profilePath, "utf8"));
|
|
48
|
+
const profile = MeshProfileSchema.parse(raw);
|
|
49
|
+
const workspace = resolveWorkspace(profile.workspace, profileDir);
|
|
50
|
+
const workspaceId = workspaceScopeId(workspace);
|
|
51
|
+
const sessionName = resolveSessionName(profile, workspace);
|
|
52
|
+
const loaded = { profile, profileDir, profilePath, workspace, workspaceId, sessionName };
|
|
53
|
+
try {
|
|
54
|
+
writePathsManifest(loaded);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* non-fatal on read-only profile dir */
|
|
58
|
+
}
|
|
59
|
+
return loaded;
|
|
60
|
+
}
|
|
61
|
+
export function profilePaths(loaded) {
|
|
62
|
+
const { profile } = loaded;
|
|
63
|
+
const resolved = buildResolvedPaths(loaded);
|
|
64
|
+
const rt = meshRuntimePaths(loaded);
|
|
65
|
+
const secretaryDir = profile.seats.dirs?.secretary ?? "secretary";
|
|
66
|
+
for (const [label, abs] of [
|
|
67
|
+
["dataRoot", resolved.dataRoot],
|
|
68
|
+
["daemonDir", resolved.daemonDir],
|
|
69
|
+
["seatsRoot", resolved.seatsRoot],
|
|
70
|
+
["meshAgentsJson", resolved.meshAgentsJson],
|
|
71
|
+
["chatRoomsRoot", resolved.chatRoomsRoot],
|
|
72
|
+
["chatFilesRoot", resolved.chatFilesRoot],
|
|
73
|
+
["sqlitePath", resolved.sqlitePath],
|
|
74
|
+
]) {
|
|
75
|
+
assertHarnessUnderDotdir(loaded, abs, label);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
seatsRoot: resolved.seatsRoot,
|
|
79
|
+
agentsJson: resolved.agentsJson,
|
|
80
|
+
meshAgentsJson: resolved.meshAgentsJson,
|
|
81
|
+
chatRoomsRoot: resolved.chatRoomsRoot,
|
|
82
|
+
chatFilesRoot: resolved.chatFilesRoot,
|
|
83
|
+
rolesDir: resolved.rolesDir,
|
|
84
|
+
contractsDir: resolved.contractsDir,
|
|
85
|
+
managerDir: path.join(resolved.seatsRoot, profile.seats.dirs?.manager ?? "manager"),
|
|
86
|
+
manager2Dir: path.join(resolved.seatsRoot, profile.seats.dirs?.["manager-2"] ?? "manager-2"),
|
|
87
|
+
secretaryDir: path.join(resolved.seatsRoot, secretaryDir),
|
|
88
|
+
daemonPort: resolveDaemonPort(profile, loaded.workspace),
|
|
89
|
+
pathsManifest: path.join(loaded.profileDir, "paths.json"),
|
|
90
|
+
...rt,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.test.d.ts","sourceRoot":"","sources":["../src/profile.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { defaultProfilePath, loadProfile, portsForSlot } from "./index.js";
|
|
4
|
+
describe("loadProfile", () => {
|
|
5
|
+
it("loads default profile without --profile", () => {
|
|
6
|
+
const loaded = loadProfile();
|
|
7
|
+
expect(["consumer", "minimal"]).toContain(loaded.profile.name);
|
|
8
|
+
expect(loaded.workspace).toBeTruthy();
|
|
9
|
+
});
|
|
10
|
+
it("default profile resolves bundled minimal mesh.config.yaml", () => {
|
|
11
|
+
const cfg = defaultProfilePath();
|
|
12
|
+
expect(cfg).toContain("profiles");
|
|
13
|
+
expect(cfg.endsWith("mesh.config.yaml")).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
it("loads bundled minimal profile", () => {
|
|
16
|
+
const minimalDir = path.resolve(import.meta.dirname, "../../../profiles/minimal");
|
|
17
|
+
const loaded = loadProfile(minimalDir);
|
|
18
|
+
expect(loaded.profile.name).toBe("minimal");
|
|
19
|
+
expect(loaded.workspace).toBeTruthy();
|
|
20
|
+
});
|
|
21
|
+
it("formats worker ports from formula", () => {
|
|
22
|
+
expect(portsForSlot("30{n}0/30{n}1", 3)).toBe("3030/3031");
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=profile.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.test.js","sourceRoot":"","sources":["../src/profile.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,2BAA2B,CAC5B,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhF,wBAAgB,sBAAsB,CACpC,SAAS,GAAE,aAAa,EAAO,GAC9B,gBAAgB,CAqBlB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function createProviderRegistry(providers = []) {
|
|
2
|
+
const byId = new Map();
|
|
3
|
+
for (const p of providers)
|
|
4
|
+
byId.set(p.id, p);
|
|
5
|
+
return {
|
|
6
|
+
register(provider) {
|
|
7
|
+
byId.set(provider.id, provider);
|
|
8
|
+
},
|
|
9
|
+
detect(pane) {
|
|
10
|
+
for (const p of byId.values()) {
|
|
11
|
+
if (p.detect(pane))
|
|
12
|
+
return p;
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
},
|
|
16
|
+
get(id) {
|
|
17
|
+
return byId.get(id);
|
|
18
|
+
},
|
|
19
|
+
all() {
|
|
20
|
+
return [...byId.values()];
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CACpC,YAA6B,EAAE;IAE/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE7C,OAAO;QACL,QAAQ,CAAC,QAAuB;YAC9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,IAAkB;YACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,GAAG;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent provider contract — orchestrator uses registry only (no CLI if/else).
|
|
3
|
+
*/
|
|
4
|
+
export interface PaneSnapshot {
|
|
5
|
+
paneId: string;
|
|
6
|
+
windowName: string;
|
|
7
|
+
cwd: string;
|
|
8
|
+
currentCommand: string;
|
|
9
|
+
captureTail: string;
|
|
10
|
+
options: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export type ComposerPhase = "empty" | "typing" | "busy" | "afk" | "limit" | "plain_shell";
|
|
13
|
+
export interface ComposerState {
|
|
14
|
+
phase: ComposerPhase;
|
|
15
|
+
limitKind?: string;
|
|
16
|
+
draftFingerprint?: string;
|
|
17
|
+
busyLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface Detection {
|
|
20
|
+
providerId: string;
|
|
21
|
+
resumeId?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface InjectPlan {
|
|
24
|
+
/** Prefix before message body (empty for OpenCode mesh text). */
|
|
25
|
+
prefix: string;
|
|
26
|
+
useBracketedPaste: boolean;
|
|
27
|
+
enterDelayMs: number;
|
|
28
|
+
flushEscFirst: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface LimitContext {
|
|
31
|
+
pane: PaneSnapshot;
|
|
32
|
+
providerId: string;
|
|
33
|
+
state: ComposerState;
|
|
34
|
+
profileName: string;
|
|
35
|
+
enqueue: (job: LimitJob) => Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
export interface LimitJob {
|
|
38
|
+
type: string;
|
|
39
|
+
paneId?: string;
|
|
40
|
+
payload?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export interface LimitDetector {
|
|
43
|
+
id: string;
|
|
44
|
+
match(state: ComposerState, pane: PaneSnapshot): boolean;
|
|
45
|
+
onRisingEdge(ctx: LimitContext): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/** One human prompt + agent reply pair (queryable; not pane scrollback). */
|
|
48
|
+
export interface PromptCapture {
|
|
49
|
+
humanPrompt: string;
|
|
50
|
+
agentResponse: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Per-slot prompt log (CHAT.jsonl) — required on every AgentProvider.
|
|
54
|
+
* Lets manager/secretary query session/model/prompt/response without scraping panes.
|
|
55
|
+
*/
|
|
56
|
+
export interface PromptRecording {
|
|
57
|
+
/** CLI session / resume id for grouping turns (may be undefined for stateless CLIs). */
|
|
58
|
+
sessionId(pane: PaneSnapshot, detection: Detection): string | undefined;
|
|
59
|
+
/** Model label when known (cmdline flag, footer, or provider default). */
|
|
60
|
+
modelId(pane: PaneSnapshot): string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Scrape latest completed exchange from pane capture.
|
|
63
|
+
* Return null when not parseable — use explicit `chat append` or inject-time record.
|
|
64
|
+
*/
|
|
65
|
+
scrapePromptTurn(pane: PaneSnapshot): PromptCapture | null;
|
|
66
|
+
}
|
|
67
|
+
export interface AgentProvider extends PromptRecording {
|
|
68
|
+
id: string;
|
|
69
|
+
detect(pane: PaneSnapshot): Detection | null;
|
|
70
|
+
composerState(pane: PaneSnapshot): ComposerState;
|
|
71
|
+
/** True when the CLI composer accepts a paste (splash done, not generating). */
|
|
72
|
+
composerReady(pane: PaneSnapshot): boolean;
|
|
73
|
+
injectPlan(pane: PaneSnapshot): InjectPlan;
|
|
74
|
+
limits?: LimitDetector[];
|
|
75
|
+
}
|
|
76
|
+
export interface ProviderRegistry {
|
|
77
|
+
register(provider: AgentProvider): void;
|
|
78
|
+
detect(pane: PaneSnapshot): AgentProvider | null;
|
|
79
|
+
get(id: string): AgentProvider | undefined;
|
|
80
|
+
all(): AgentProvider[];
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable queue rows — producers append; inbox daemon (BullMQ workers) drains.
|
|
3
|
+
*/
|
|
4
|
+
export type QueueChannel = "inbox" | "peer" | "checkback" | "schedule" | "limits" | "connectivity" | "inject";
|
|
5
|
+
export type QueueJobStatus = "pending" | "active" | "done" | "failed" | "held";
|
|
6
|
+
export interface QueueJobBase {
|
|
7
|
+
id: string;
|
|
8
|
+
channel: QueueChannel;
|
|
9
|
+
status: QueueJobStatus;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
targetPaneId?: string;
|
|
12
|
+
targetSlot?: number;
|
|
13
|
+
priority: number;
|
|
14
|
+
}
|
|
15
|
+
export interface InjectJob extends QueueJobBase {
|
|
16
|
+
channel: "inject" | "inbox" | "peer";
|
|
17
|
+
body: string;
|
|
18
|
+
prefix?: string;
|
|
19
|
+
meta?: {
|
|
20
|
+
from?: string;
|
|
21
|
+
expectReply?: boolean;
|
|
22
|
+
checkbackId?: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface LimitQueueJob extends QueueJobBase {
|
|
26
|
+
channel: "limits";
|
|
27
|
+
limitId: string;
|
|
28
|
+
providerId: string;
|
|
29
|
+
handler: string;
|
|
30
|
+
}
|
|
31
|
+
/** Orchestrator goal: best-effort empty all pending jobs fairly. */
|
|
32
|
+
export interface QueueDrainPolicy {
|
|
33
|
+
maxInjectPerTick: number;
|
|
34
|
+
digestCooldownMs: number;
|
|
35
|
+
idleSettleMs: number;
|
|
36
|
+
neverInjectWhileTyping: boolean;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,MAAM,GACN,WAAW,GACX,UAAU,GACV,QAAQ,GACR,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,OAAO,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,OAAO,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface RoleIndexEntry {
|
|
2
|
+
path: string;
|
|
3
|
+
note?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RolePolicy {
|
|
6
|
+
id: string;
|
|
7
|
+
text?: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
rule?: string;
|
|
10
|
+
cmd?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RoleIndex {
|
|
13
|
+
kind: string;
|
|
14
|
+
/** Printed first on ./sm.sh whoami (patterns.md / ONE-PATH). */
|
|
15
|
+
banner?: string[];
|
|
16
|
+
read_first?: RoleIndexEntry[];
|
|
17
|
+
policies?: RolePolicy[];
|
|
18
|
+
files?: string[];
|
|
19
|
+
inject?: string[];
|
|
20
|
+
vars?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
export declare function loadRoleIndex(rolesDir: string, kind: string): RoleIndex;
|
|
23
|
+
export declare function renderRoleIndex(index: RoleIndex, vars?: Record<string, string>, opts?: {
|
|
24
|
+
skipBanner?: boolean;
|
|
25
|
+
}): string;
|
|
26
|
+
export declare function validateRoleIndex(index: RoleIndex, workspace: string): {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
missing: string[];
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=role-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-index.d.ts","sourceRoot":"","sources":["../src/role-index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AA0BD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAcvE;AAMD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACjC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,MAAM,CAwCR;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAcpC"}
|