@mclawnet/shared 0.1.7 → 0.1.9
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/__tests__/chat-protocol.test.d.ts +2 -0
- package/dist/__tests__/chat-protocol.test.d.ts.map +1 -0
- package/dist/__tests__/chat-protocol.test.js +32 -0
- package/dist/__tests__/chat-protocol.test.js.map +1 -0
- package/dist/__tests__/model-catalog.test.d.ts +2 -0
- package/dist/__tests__/model-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/model-catalog.test.js +55 -0
- package/dist/__tests__/model-catalog.test.js.map +1 -0
- package/dist/__tests__/session-protocol-schema.test.d.ts +2 -0
- package/dist/__tests__/session-protocol-schema.test.d.ts.map +1 -0
- package/dist/__tests__/session-protocol-schema.test.js +149 -0
- package/dist/__tests__/session-protocol-schema.test.js.map +1 -0
- package/dist/__tests__/swarm-protocol.test.d.ts +2 -0
- package/dist/__tests__/swarm-protocol.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-protocol.test.js +35 -0
- package/dist/__tests__/swarm-protocol.test.js.map +1 -0
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -1
- package/dist/constants.js.map +1 -1
- package/dist/encode-cwd.d.ts +15 -0
- package/dist/encode-cwd.d.ts.map +1 -0
- package/dist/encode-cwd.js +27 -0
- package/dist/encode-cwd.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model-catalog.d.ts +53 -0
- package/dist/model-catalog.d.ts.map +1 -0
- package/dist/model-catalog.js +5 -0
- package/dist/model-catalog.js.map +1 -0
- package/dist/protocol/agent.d.ts +576 -17
- package/dist/protocol/agent.d.ts.map +1 -1
- package/dist/protocol/agent.js +7 -0
- package/dist/protocol/agent.js.map +1 -1
- package/dist/protocol/chat.d.ts +110 -5
- package/dist/protocol/chat.d.ts.map +1 -1
- package/dist/protocol/events.d.ts +5 -2
- package/dist/protocol/events.d.ts.map +1 -1
- package/dist/protocol/events.js.map +1 -1
- package/dist/protocol/index.d.ts +3 -3
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/sandbox.d.ts +27 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +7 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schemas.d.ts +573 -11
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +151 -2
- package/dist/schemas.js.map +1 -1
- package/dist/types/session.d.ts +1 -1
- package/dist/types/session.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/brain-types.d.ts +0 -101
- package/dist/brain-types.d.ts.map +0 -1
- package/dist/brain-types.js +0 -4
- package/dist/brain-types.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-protocol.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/chat-protocol.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
describe("ChatCreateConversation (N4)", () => {
|
|
3
|
+
it("accepts backendType + sticky fields", () => {
|
|
4
|
+
const msg = {
|
|
5
|
+
type: "create_conversation",
|
|
6
|
+
agentId: "a1",
|
|
7
|
+
backendType: "codex",
|
|
8
|
+
stickyModel: "gpt-4o",
|
|
9
|
+
stickyMode: "workspace-write",
|
|
10
|
+
};
|
|
11
|
+
expect(msg.backendType).toBe("codex");
|
|
12
|
+
expect(msg.stickyModel).toBe("gpt-4o");
|
|
13
|
+
expect(msg.stickyMode).toBe("workspace-write");
|
|
14
|
+
});
|
|
15
|
+
it("backendType is optional (back-compat)", () => {
|
|
16
|
+
const msg = {
|
|
17
|
+
type: "create_conversation",
|
|
18
|
+
agentId: "a1",
|
|
19
|
+
};
|
|
20
|
+
expect(msg.backendType).toBeUndefined();
|
|
21
|
+
expect(msg.stickyModel).toBeUndefined();
|
|
22
|
+
expect(msg.stickyMode).toBeUndefined();
|
|
23
|
+
});
|
|
24
|
+
it("accepts 'claude' backendType literal", () => {
|
|
25
|
+
const msg = {
|
|
26
|
+
type: "create_conversation",
|
|
27
|
+
backendType: "claude",
|
|
28
|
+
};
|
|
29
|
+
expect(msg.backendType).toBe("claude");
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=chat-protocol.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-protocol.test.js","sourceRoot":"","sources":["../../src/__tests__/chat-protocol.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG9C,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GAA2B;YAClC,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,iBAAiB;SAC9B,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,GAAG,GAA2B;YAClC,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,IAAI;SACd,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,GAAG,GAA2B;YAClC,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,QAAQ;SACtB,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-catalog.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/model-catalog.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
describe("model-catalog types", () => {
|
|
3
|
+
it("ModelDescriptor accepts minimum required shape", () => {
|
|
4
|
+
const m = { code: "opus", label: "Claude Opus 4" };
|
|
5
|
+
expect(m.code).toBe("opus");
|
|
6
|
+
});
|
|
7
|
+
it("ModeDescriptor accepts minimum required shape", () => {
|
|
8
|
+
const m = { code: "default", label: "Default" };
|
|
9
|
+
expect(m.code).toBe("default");
|
|
10
|
+
});
|
|
11
|
+
it("AgentManifestPayload allows installed=false with empty models", () => {
|
|
12
|
+
const p = {
|
|
13
|
+
manifestVersion: 1,
|
|
14
|
+
backends: [
|
|
15
|
+
{
|
|
16
|
+
kind: "codex",
|
|
17
|
+
installed: false,
|
|
18
|
+
unavailableReason: "not on PATH",
|
|
19
|
+
models: [],
|
|
20
|
+
modes: [],
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
expect(p.backends[0].installed).toBe(false);
|
|
25
|
+
expect(p.backends[0].kind).toBe("codex");
|
|
26
|
+
});
|
|
27
|
+
it("AgentManifestPayload accepts installed=true with rich descriptors", () => {
|
|
28
|
+
const p = {
|
|
29
|
+
manifestVersion: 1,
|
|
30
|
+
backends: [
|
|
31
|
+
{
|
|
32
|
+
kind: "claude",
|
|
33
|
+
installed: true,
|
|
34
|
+
binaryPath: "/usr/local/bin/claude",
|
|
35
|
+
version: "2.0.1",
|
|
36
|
+
models: [
|
|
37
|
+
{
|
|
38
|
+
code: "opus",
|
|
39
|
+
label: "Claude Opus 4",
|
|
40
|
+
tier: "premium",
|
|
41
|
+
contextWindow: 200_000,
|
|
42
|
+
supportsVision: true,
|
|
43
|
+
supportsToolUse: true,
|
|
44
|
+
default: true,
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
modes: [{ code: "default", label: "Default", default: true }],
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
expect(p.backends[0].models[0].tier).toBe("premium");
|
|
52
|
+
expect(p.manifestVersion).toBe(1);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=model-catalog.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-catalog.test.js","sourceRoot":"","sources":["../../src/__tests__/model-catalog.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAO9C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAChE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAyB;YAC9B,eAAe,EAAE,CAAC;YAClB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK;oBAChB,iBAAiB,EAAE,aAAa;oBAChC,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAC;QACF,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,GAAyB;YAC9B,eAAe,EAAE,CAAC;YAClB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,uBAAuB;oBACnC,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,eAAe;4BACtB,IAAI,EAAE,SAAS;4BACf,aAAa,EAAE,OAAO;4BACtB,cAAc,EAAE,IAAI;4BACpB,eAAe,EAAE,IAAI;4BACrB,OAAO,EAAE,IAAI;yBACd;qBACF;oBACD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBAC9D;aACF;SACF,CAAC;QACF,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-protocol-schema.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/session-protocol-schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { createSessionSchema, sessionCreatePayloadSchema, sessionInputPayloadSchema, sessionUpdateStickyPayloadSchema, } from "../schemas.js";
|
|
3
|
+
describe("session protocol schemas", () => {
|
|
4
|
+
describe("createSessionSchema (REST POST /api/sessions)", () => {
|
|
5
|
+
it("accepts default backend (claude)", () => {
|
|
6
|
+
const r = createSessionSchema.safeParse({});
|
|
7
|
+
expect(r.success).toBe(true);
|
|
8
|
+
if (r.success)
|
|
9
|
+
expect(r.data.backendType).toBe("claude");
|
|
10
|
+
});
|
|
11
|
+
it("accepts explicit codex", () => {
|
|
12
|
+
const r = createSessionSchema.safeParse({ backendType: "codex" });
|
|
13
|
+
expect(r.success).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
it("rejects openclaw — REST enum now aligned with wire backendKindSchema", () => {
|
|
16
|
+
const r = createSessionSchema.safeParse({ backendType: "openclaw" });
|
|
17
|
+
expect(r.success).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe("sessionCreatePayloadSchema", () => {
|
|
21
|
+
it("accepts minimal valid payload", () => {
|
|
22
|
+
const r = sessionCreatePayloadSchema.safeParse({ sessionId: "s1", backend: "claude" });
|
|
23
|
+
expect(r.success).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
it("accepts full payload with sticky + initialInput", () => {
|
|
26
|
+
const r = sessionCreatePayloadSchema.safeParse({
|
|
27
|
+
sessionId: "s1",
|
|
28
|
+
workDir: "/tmp",
|
|
29
|
+
backend: "codex",
|
|
30
|
+
sticky: { model: "gpt-4o", mode: "workspace-write" },
|
|
31
|
+
systemPrompt: "you are helpful",
|
|
32
|
+
useBrainCore: false,
|
|
33
|
+
initialInput: "hi",
|
|
34
|
+
});
|
|
35
|
+
expect(r.success).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
it("rejects unknown backend (openclaw not allowed)", () => {
|
|
38
|
+
const r = sessionCreatePayloadSchema.safeParse({ sessionId: "s1", backend: "openclaw" });
|
|
39
|
+
expect(r.success).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
it("rejects missing sessionId", () => {
|
|
42
|
+
const r = sessionCreatePayloadSchema.safeParse({ backend: "claude" });
|
|
43
|
+
expect(r.success).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
it("accepts useWorktree=true on session.create", () => {
|
|
46
|
+
const r = sessionCreatePayloadSchema.safeParse({
|
|
47
|
+
sessionId: "s1",
|
|
48
|
+
backend: "claude",
|
|
49
|
+
useWorktree: true,
|
|
50
|
+
});
|
|
51
|
+
expect(r.success).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
it("useWorktree is optional (back-compat)", () => {
|
|
54
|
+
const r = sessionCreatePayloadSchema.safeParse({
|
|
55
|
+
sessionId: "s1",
|
|
56
|
+
backend: "claude",
|
|
57
|
+
});
|
|
58
|
+
expect(r.success).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("sessionInputPayloadSchema", () => {
|
|
62
|
+
it("accepts minimal", () => {
|
|
63
|
+
const r = sessionInputPayloadSchema.safeParse({ sessionId: "s1", content: "hello" });
|
|
64
|
+
expect(r.success).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it("accepts with messageMeta override", () => {
|
|
67
|
+
const r = sessionInputPayloadSchema.safeParse({
|
|
68
|
+
sessionId: "s1",
|
|
69
|
+
content: "hello",
|
|
70
|
+
messageMeta: { model: "opus", mode: "plan" },
|
|
71
|
+
});
|
|
72
|
+
expect(r.success).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
it("accepts empty content (e.g. retry signal)", () => {
|
|
75
|
+
const r = sessionInputPayloadSchema.safeParse({ sessionId: "s1", content: "" });
|
|
76
|
+
expect(r.success).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it("accepts backendSessionId for restart-recovery hint", () => {
|
|
79
|
+
const r = sessionInputPayloadSchema.safeParse({
|
|
80
|
+
sessionId: "s1",
|
|
81
|
+
content: "hello",
|
|
82
|
+
backendSessionId: "abc-123-uuid",
|
|
83
|
+
});
|
|
84
|
+
expect(r.success).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
it("accepts content + messageMeta + backendSessionId together", () => {
|
|
87
|
+
const r = sessionInputPayloadSchema.safeParse({
|
|
88
|
+
sessionId: "s1",
|
|
89
|
+
content: "hello",
|
|
90
|
+
messageMeta: { model: "opus" },
|
|
91
|
+
backendSessionId: "abc",
|
|
92
|
+
});
|
|
93
|
+
expect(r.success).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
it("rejects backendSessionId exceeding 256 chars (DOS cap)", () => {
|
|
96
|
+
const r = sessionInputPayloadSchema.safeParse({
|
|
97
|
+
sessionId: "s1",
|
|
98
|
+
content: "hello",
|
|
99
|
+
backendSessionId: "x".repeat(257),
|
|
100
|
+
});
|
|
101
|
+
expect(r.success).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
it("accepts workDir + useBrainCore for restart-recovery context", () => {
|
|
104
|
+
const r = sessionInputPayloadSchema.safeParse({
|
|
105
|
+
sessionId: "s1",
|
|
106
|
+
content: "hi",
|
|
107
|
+
workDir: "/repo",
|
|
108
|
+
useBrainCore: true,
|
|
109
|
+
});
|
|
110
|
+
expect(r.success).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
it("rejects workDir exceeding 4096 chars", () => {
|
|
113
|
+
const r = sessionInputPayloadSchema.safeParse({
|
|
114
|
+
sessionId: "s1",
|
|
115
|
+
content: "hi",
|
|
116
|
+
workDir: "x".repeat(4097),
|
|
117
|
+
});
|
|
118
|
+
expect(r.success).toBe(false);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("sessionUpdateStickyPayloadSchema", () => {
|
|
122
|
+
it("accepts partial sticky", () => {
|
|
123
|
+
const r = sessionUpdateStickyPayloadSchema.safeParse({
|
|
124
|
+
sessionId: "s1",
|
|
125
|
+
sticky: { model: "sonnet" },
|
|
126
|
+
});
|
|
127
|
+
expect(r.success).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
it("rejects empty sticky object (must specify at least one field)", () => {
|
|
130
|
+
const r = sessionUpdateStickyPayloadSchema.safeParse({
|
|
131
|
+
sessionId: "s1",
|
|
132
|
+
sticky: {},
|
|
133
|
+
});
|
|
134
|
+
expect(r.success).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
it("accepts sticky with mode only", () => {
|
|
137
|
+
const r = sessionUpdateStickyPayloadSchema.safeParse({
|
|
138
|
+
sessionId: "s1",
|
|
139
|
+
sticky: { mode: "plan" },
|
|
140
|
+
});
|
|
141
|
+
expect(r.success).toBe(true);
|
|
142
|
+
});
|
|
143
|
+
it("rejects missing sticky", () => {
|
|
144
|
+
const r = sessionUpdateStickyPayloadSchema.safeParse({ sessionId: "s1" });
|
|
145
|
+
expect(r.success).toBe(false);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=session-protocol-schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-protocol-schema.test.js","sourceRoot":"","sources":["../../src/__tests__/session-protocol-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-protocol.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/swarm-protocol.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
describe("ChatCreateSwarmConversation (N4.5)", () => {
|
|
3
|
+
it("roles[] accepts model + mode + backend + sandbox", () => {
|
|
4
|
+
const msg = {
|
|
5
|
+
type: "create_swarm_conversation",
|
|
6
|
+
roles: [{
|
|
7
|
+
roleName: "dev",
|
|
8
|
+
backend: "codex",
|
|
9
|
+
sandbox: "workspace-write",
|
|
10
|
+
model: "gpt-4o",
|
|
11
|
+
mode: "workspace-write",
|
|
12
|
+
}],
|
|
13
|
+
};
|
|
14
|
+
expect(msg.roles?.[0].model).toBe("gpt-4o");
|
|
15
|
+
expect(msg.roles?.[0].mode).toBe("workspace-write");
|
|
16
|
+
});
|
|
17
|
+
it("model/mode are optional (back-compat)", () => {
|
|
18
|
+
const msg = {
|
|
19
|
+
type: "create_swarm_conversation",
|
|
20
|
+
roles: [{ roleName: "dev" }],
|
|
21
|
+
};
|
|
22
|
+
expect(msg.roles?.[0].model).toBeUndefined();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("ChatUpgradeToSwarm (N4.5)", () => {
|
|
26
|
+
it("roles[] accepts model + mode", () => {
|
|
27
|
+
const msg = {
|
|
28
|
+
type: "upgrade_to_swarm",
|
|
29
|
+
sessionId: "s1",
|
|
30
|
+
roles: [{ roleName: "dev", model: "opus", mode: "plan" }],
|
|
31
|
+
};
|
|
32
|
+
expect(msg.roles[0].model).toBe("opus");
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=swarm-protocol.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-protocol.test.js","sourceRoot":"","sources":["../../src/__tests__/swarm-protocol.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG9C,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAgC;YACvC,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,CAAC;oBACN,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,iBAAiB;oBAC1B,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,iBAAiB;iBACxB,CAAC;SACH,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,GAAG,GAAgC;YACvC,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SAC7B,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,GAAG,GAAuB;YAC9B,IAAI,EAAE,kBAAkB;YACxB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SAC1D,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare const WS_CLOSE_SERVER_SHUTDOWN = 4005;
|
|
|
23
23
|
* track lastOutputAt explicitly (PR2), keep the threshold generous.
|
|
24
24
|
*/
|
|
25
25
|
export declare const STUCK_STREAMING_THRESHOLD_MS: number;
|
|
26
|
-
export declare const BACKEND_TYPES: readonly ["claude
|
|
26
|
+
export declare const BACKEND_TYPES: readonly ["claude", "codex", "openclaw"];
|
|
27
27
|
export type BackendType = (typeof BACKEND_TYPES)[number];
|
|
28
28
|
export declare const USER_ROLES: readonly ["admin", "user"];
|
|
29
29
|
export type UserRole = (typeof USER_ROLES)[number];
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAIvC,+BAA+B;AAC/B,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,yCAAyC;AACzC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,2BAA2B;AAC3B,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,QAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAIvC,+BAA+B;AAC/B,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,yCAAyC;AACzC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,2BAA2B;AAC3B,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,QAAgB,CAAC;AAO1D,eAAO,MAAM,aAAa,0CAA2C,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAIzD,eAAO,MAAM,UAAU,4BAA6B,CAAC;AACrD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAInD,4EAA4E;AAC5E,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAI/C,eAAO,MAAM,aAAa,0CAA2C,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAIzD,eAAO,MAAM,aAAa,mEAAoE,CAAC;AAC/F,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAIzD,eAAO,MAAM,cAAc,gCAAiC,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -26,7 +26,10 @@ export const WS_CLOSE_SERVER_SHUTDOWN = 4005;
|
|
|
26
26
|
*/
|
|
27
27
|
export const STUCK_STREAMING_THRESHOLD_MS = 5 * 60 * 1000;
|
|
28
28
|
// ── Backend Types ────────────────────────────────────────────────────
|
|
29
|
-
|
|
29
|
+
// N1.T9 migration: backend_type column values are now 'claude' | 'codex' | 'openclaw'
|
|
30
|
+
// (DB CHECK constraint added in drizzle/0012). Legacy 'claude-code' rows were
|
|
31
|
+
// UPDATEd to 'claude' by the same migration.
|
|
32
|
+
export const BACKEND_TYPES = ["claude", "codex", "openclaw"];
|
|
30
33
|
// ── User Roles ───────────────────────────────────────────────────────
|
|
31
34
|
export const USER_ROLES = ["admin", "user"];
|
|
32
35
|
// ── Feature Flags ───────────────────────────────────────────────────
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,uEAAuE;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,oCAAoC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,wEAAwE;AAExE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,wEAAwE;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,uEAAuE;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,oCAAoC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,wEAAwE;AAExE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,wEAAwE;AAExE,sFAAsF;AACtF,8EAA8E;AAC9E,6CAA6C;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC;AAGtE,wEAAwE;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAGrD,uEAAuE;AAEvE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAE/C,wEAAwE;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAGtE,wEAAwE;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAG/F,wEAAwE;AAExE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure string transform that encodes an absolute path into a single-segment
|
|
3
|
+
* identifier ClawNet uses for per-project directories (e.g.
|
|
4
|
+
* `~/.clawnet/projects/<encodedCwd>/...`).
|
|
5
|
+
*
|
|
6
|
+
* POSIX: /Users/lcf/code/foo → -Users-lcf-code-foo
|
|
7
|
+
* Win32: C:\Users\lcf\code\foo → C--Users-lcf-code-foo (colon and \ both → -)
|
|
8
|
+
* \\server\share\path → --server-share-path
|
|
9
|
+
*
|
|
10
|
+
* Lives in @mclawnet/shared (browser-safe, no node:os/fs deps) so both the
|
|
11
|
+
* node-side @mclawnet/task and the browser-side UI can use the same encoding
|
|
12
|
+
* without drift. @mclawnet/task re-exports it; UI imports it directly.
|
|
13
|
+
*/
|
|
14
|
+
export declare function encodeCwd(absPath: string): string;
|
|
15
|
+
//# sourceMappingURL=encode-cwd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode-cwd.d.ts","sourceRoot":"","sources":["../src/encode-cwd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAajD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure string transform that encodes an absolute path into a single-segment
|
|
3
|
+
* identifier ClawNet uses for per-project directories (e.g.
|
|
4
|
+
* `~/.clawnet/projects/<encodedCwd>/...`).
|
|
5
|
+
*
|
|
6
|
+
* POSIX: /Users/lcf/code/foo → -Users-lcf-code-foo
|
|
7
|
+
* Win32: C:\Users\lcf\code\foo → C--Users-lcf-code-foo (colon and \ both → -)
|
|
8
|
+
* \\server\share\path → --server-share-path
|
|
9
|
+
*
|
|
10
|
+
* Lives in @mclawnet/shared (browser-safe, no node:os/fs deps) so both the
|
|
11
|
+
* node-side @mclawnet/task and the browser-side UI can use the same encoding
|
|
12
|
+
* without drift. @mclawnet/task re-exports it; UI imports it directly.
|
|
13
|
+
*/
|
|
14
|
+
export function encodeCwd(absPath) {
|
|
15
|
+
const isPosix = absPath.startsWith("/");
|
|
16
|
+
const isWin = /^[a-zA-Z]:[\\/]/.test(absPath) || absPath.startsWith("\\\\");
|
|
17
|
+
if (!isPosix && !isWin) {
|
|
18
|
+
throw new Error(`encodeCwd requires an absolute path, got: ${absPath}`);
|
|
19
|
+
}
|
|
20
|
+
// Trim a single trailing slash/backslash (but never reduce a root to empty).
|
|
21
|
+
const trimmed = absPath.length > 1 && (absPath.endsWith("/") || absPath.endsWith("\\"))
|
|
22
|
+
? absPath.slice(0, -1)
|
|
23
|
+
: absPath;
|
|
24
|
+
// Replace path separators and the Windows drive colon with a dash.
|
|
25
|
+
return trimmed.replace(/[\\/:]/g, "-");
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=encode-cwd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode-cwd.js","sourceRoot":"","sources":["../src/encode-cwd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,6EAA6E;IAC7E,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,OAAO,CAAC;IACd,mEAAmE;IACnE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,7 @@ export * from "./schemas.js";
|
|
|
3
3
|
export * from "./types/index.js";
|
|
4
4
|
export * from "./protocol/index.js";
|
|
5
5
|
export * from "./token-ladder.js";
|
|
6
|
+
export * from "./encode-cwd.js";
|
|
7
|
+
export * from "./sandbox.js";
|
|
8
|
+
export * from "./model-catalog.js";
|
|
6
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,7 @@ export * from "./schemas.js";
|
|
|
4
4
|
export * from "./types/index.js";
|
|
5
5
|
export * from "./protocol/index.js";
|
|
6
6
|
export * from "./token-ladder.js";
|
|
7
|
+
export * from "./encode-cwd.js";
|
|
8
|
+
export * from "./sandbox.js";
|
|
9
|
+
export * from "./model-catalog.js";
|
|
7
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface ModelDescriptor {
|
|
2
|
+
/** Stable wire code, e.g. "opus", "sonnet", "gpt-5". */
|
|
3
|
+
code: string;
|
|
4
|
+
/** Human-readable label for UI, e.g. "Claude Opus 4". */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Optional one-line description. */
|
|
7
|
+
description?: string;
|
|
8
|
+
/** Capability tier hint for grouping in pickers. */
|
|
9
|
+
tier?: "premium" | "standard" | "lite";
|
|
10
|
+
/** Context window in tokens, if known. */
|
|
11
|
+
contextWindow?: number;
|
|
12
|
+
/** True if this model accepts images. */
|
|
13
|
+
supportsVision?: boolean;
|
|
14
|
+
/** True if this model accepts tool/function calls. */
|
|
15
|
+
supportsToolUse?: boolean;
|
|
16
|
+
/** True if this is the backend's default pick. At most one per backend. */
|
|
17
|
+
default?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ModeDescriptor {
|
|
20
|
+
/** Stable wire code, e.g. "default", "plan", "build". */
|
|
21
|
+
code: string;
|
|
22
|
+
/** Human-readable label for UI. */
|
|
23
|
+
label: string;
|
|
24
|
+
/** Optional one-line description. */
|
|
25
|
+
description?: string;
|
|
26
|
+
/** True if this is the backend's default pick. At most one per backend. */
|
|
27
|
+
default?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Active backend kinds for new sessions. Intentionally excludes 'openclaw'
|
|
31
|
+
* (legacy, no longer accepting new sessions) which the DB CHECK constraint
|
|
32
|
+
* in chat_sessions still permits for historical rows. Hub readers that
|
|
33
|
+
* encounter backend_type='openclaw' on a legacy row should treat it as
|
|
34
|
+
* read-only history, not as a manifest-eligible kind.
|
|
35
|
+
*/
|
|
36
|
+
export type BackendKind = "claude" | "codex";
|
|
37
|
+
export interface BackendManifestEntry {
|
|
38
|
+
kind: BackendKind;
|
|
39
|
+
/** False ⇒ binary not present / unusable; models/modes will be empty. */
|
|
40
|
+
installed: boolean;
|
|
41
|
+
binaryPath?: string;
|
|
42
|
+
version?: string;
|
|
43
|
+
/** Populated when `installed === false`, e.g. "not on PATH". */
|
|
44
|
+
unavailableReason?: string;
|
|
45
|
+
models: ModelDescriptor[];
|
|
46
|
+
modes: ModeDescriptor[];
|
|
47
|
+
}
|
|
48
|
+
export interface AgentManifestPayload {
|
|
49
|
+
/** Schema version; bump when wire shape changes incompatibly. */
|
|
50
|
+
manifestVersion: 1;
|
|
51
|
+
backends: BackendManifestEntry[];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=model-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,eAAe,EAAE,CAAC,CAAC;IACnB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,+BAA+B"}
|