@baobox/sdk 0.1.2 → 0.3.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 +79 -7
- package/dist/index.d.ts +123 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +638 -107
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +307 -37
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +1 -1
- package/package.json +23 -6
package/README.md
CHANGED
|
@@ -21,7 +21,8 @@ import { BaoBoxClient } from "@baobox/sdk";
|
|
|
21
21
|
|
|
22
22
|
const bb = new BaoBoxClient({
|
|
23
23
|
endpoint: "https://api.baobox.ai",
|
|
24
|
-
apiKey: process.env.BAOBOX_API_KEY
|
|
24
|
+
apiKey: process.env.BAOBOX_API_KEY,
|
|
25
|
+
adminSecret: process.env.BAOBOX_ADMIN_SECRET,
|
|
25
26
|
});
|
|
26
27
|
|
|
27
28
|
const res = await bb.chat({
|
|
@@ -50,14 +51,59 @@ const res = await bb.chat({
|
|
|
50
51
|
|
|
51
52
|
Returns `{ response, usage: { inputTokens, outputTokens }, sessionId, meta }` where `meta` carries `requestId`, `latencyMs`, `model`, and an optional `trace` array.
|
|
52
53
|
|
|
53
|
-
###
|
|
54
|
+
### Workflow (single-turn, stateless) — added in 0.3.0
|
|
55
|
+
|
|
56
|
+
`workflow()` is the right call when the caller already owns conversation state and doesn't want BaoBox to persist a session/thread. The full conversation history is passed every call; BaoBox just runs the skill on it once and returns. Events are written under a server-generated `runId` so you can fetch the trace later.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
const res = await bb.workflow({
|
|
60
|
+
skill: "sk_email_chase",
|
|
61
|
+
clientId: "client_abc", // your tenant's client identifier
|
|
62
|
+
requestId: "your_app_req_42", // your tenant's request identifier
|
|
63
|
+
input: "chase client for missing bank statements",
|
|
64
|
+
history: [ // optional
|
|
65
|
+
{ role: "user", content: "draft an email..." },
|
|
66
|
+
{ role: "assistant", content: "Sure, here's a draft..." },
|
|
67
|
+
],
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
console.log(res.response); // skill output
|
|
71
|
+
console.log(res.runId); // "wflow_..." — handle for the run's event timeline
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Returns `{ response, runId, usage, meta }`. `clientId` and `requestId` land on the BaoBox `call_logs` row (as `client_id` and `external_request_id`) so you can join workflow runs back to your own request log. The skill is responsible for self-routing — there is no `action` discriminator on the request.
|
|
75
|
+
|
|
76
|
+
### Sessions, Skills, Tools, Eval, Admin
|
|
77
|
+
|
|
78
|
+
BaoBox now splits auth:
|
|
79
|
+
|
|
80
|
+
- `apiKey` is only for `chat`
|
|
81
|
+
- `adminSecret` is for `sessions`, `skills`, `tools`, `eval`, and `admin`
|
|
54
82
|
|
|
55
83
|
```typescript
|
|
56
84
|
const session = await bb.sessions.create({ skillId: "sk_chase" });
|
|
57
85
|
const history = await bb.sessions.messages(session.id);
|
|
86
|
+
const timeline = await bb.sessions.timeline(session.id);
|
|
87
|
+
|
|
88
|
+
const skill = await bb.skills.create({
|
|
89
|
+
name: "Document Chaser",
|
|
90
|
+
systemPrompt: "...",
|
|
91
|
+
tools: ["lookup_client_docs"], // SDK convenience: syncs attachments after create
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const tool = await bb.tools.create({
|
|
95
|
+
name: "lookup_client_docs",
|
|
96
|
+
description: "...",
|
|
97
|
+
inputSchema: { type: "object" },
|
|
98
|
+
handlerType: "http",
|
|
99
|
+
handlerConfig: { url: "https://backend.example.com/tools/lookup" },
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const run = await bb.eval.run({ skillId: skill.id });
|
|
103
|
+
const stats = await bb.admin.stats.get();
|
|
58
104
|
```
|
|
59
105
|
|
|
60
|
-
###
|
|
106
|
+
### Backward compatibility
|
|
61
107
|
|
|
62
108
|
```typescript
|
|
63
109
|
await bb.admin.skills.upsert({
|
|
@@ -77,12 +123,16 @@ await bb.admin.tools.upsert({
|
|
|
77
123
|
});
|
|
78
124
|
```
|
|
79
125
|
|
|
80
|
-
|
|
126
|
+
`bb.admin.skills.upsert()` now targets `/api/v1/skills` and, when `tools` is provided, reconciles the skill's tool attachments via the dedicated tool-association endpoints. `bb.admin.tools.upsert()` now targets `/api/v1/tools`.
|
|
127
|
+
|
|
128
|
+
### Events (timeline alias)
|
|
81
129
|
|
|
82
130
|
```typescript
|
|
83
|
-
const events = await bb.events.list({ sessionId: "ses_1"
|
|
131
|
+
const events = await bb.events.list({ sessionId: "ses_1" });
|
|
84
132
|
```
|
|
85
133
|
|
|
134
|
+
Each `Event` carries `sessionId: string | null` and `runId: string | null` (added in 0.3.0). Chat events have `sessionId` set; workflow events have `runId` set. Both share the same shape so a single consumer can render either timeline.
|
|
135
|
+
|
|
86
136
|
## Error handling
|
|
87
137
|
|
|
88
138
|
Every non-2xx response throws `BaoBoxError`:
|
|
@@ -107,14 +157,36 @@ Network failures surface as `BaoBoxError` with `status: 0` and `code: "NETWORK"`
|
|
|
107
157
|
|
|
108
158
|
```typescript
|
|
109
159
|
new BaoBoxClient({
|
|
110
|
-
endpoint: "...",
|
|
111
|
-
apiKey: "...",
|
|
160
|
+
endpoint: "...", // required — BaoBox API base URL
|
|
161
|
+
apiKey: "...", // optional unless using chat
|
|
162
|
+
adminSecret: "...", // optional unless using admin/runtime management APIs
|
|
112
163
|
orgId: "firm_a", // optional, observability tag
|
|
113
164
|
fetch: myFetch, // optional, injects custom fetch (tests / edge runtimes)
|
|
114
165
|
timeoutMs: 30_000, // optional, default 30s. Set 0 to disable.
|
|
115
166
|
});
|
|
116
167
|
```
|
|
117
168
|
|
|
169
|
+
## Releasing
|
|
170
|
+
|
|
171
|
+
Publishing is **tag-driven via GitHub Actions** (`.github/workflows/publish.yml`). There is no local `npm login` / `npm publish` flow — auth lives in the `NPM_TOKEN` repo secret, and pushes use `--provenance` for npm provenance attestation. The full release sequence:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# 1. Bump version in package.json (e.g. 0.3.0 → 0.4.0).
|
|
175
|
+
# 2. Update the README + CHANGELOG if anything user-facing moved.
|
|
176
|
+
# 3. Commit on main and push.
|
|
177
|
+
git add package.json README.md src
|
|
178
|
+
git commit -m "feat: 0.4.0 — ..."
|
|
179
|
+
git push origin main
|
|
180
|
+
|
|
181
|
+
# 4. Tag the commit. The publish job is gated on `refs/tags/v*`.
|
|
182
|
+
git tag v0.4.0
|
|
183
|
+
git push --tags
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
GitHub Actions then runs verify (typecheck + test + build) and, on the tag job only, `npm publish --provenance --access public`. Watch the run at the repo's **Actions** tab; the npm release shows up at https://www.npmjs.com/package/@baobox/sdk a minute or two after the job goes green.
|
|
187
|
+
|
|
188
|
+
The package's `prepublishOnly` (`clean && build && test`) is the local safety net for anyone who does run `npm publish` by hand — but the day-to-day release path is the tag.
|
|
189
|
+
|
|
118
190
|
## License
|
|
119
191
|
|
|
120
192
|
MIT. See [LICENSE](./LICENSE).
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,37 @@
|
|
|
1
|
-
import type { ChatRequest, ChatResponse, Event, EventListRequest, Session, SessionMessage, Skill,
|
|
1
|
+
import type { AdminStats, ApiKey, AttachToolResult, BaoBoxClientOptions, CallLogRow, ChatRequest, ChatResponse, CreateApiKeyRequest, CreateEvalCaseRequest, CreateScheduledTaskRequest, DeleteResult, DetachToolResult, EvalCase, EvalCompare, EvalCompareRequest, EvalFailureRow, EvalFailuresRequest, EvalRunExecution, EvalRunWithResults, EvalStats, EvalStatsRequest, Event, EventListRequest, HealthResponse, RunEvalRequest, ScheduledTask, Session, SessionCreateRequest, SessionMessage, SessionTimeline, SetSkillFileRequest, SetSkillFileResult, SetSkillSecretRequest, SetSkillSecretResult, Skill, SkillCreateRequest, SkillFile, SkillFileSummary, SkillImportRequest, SkillSecretSummary, SkillUpdateRequest, SkillUpsertRequest, SkillWithFiles, Tool, ToolCreateRequest, ToolUpsertRequest, UpdateScheduledTaskRequest, CreatedApiKey, WorkflowRequest, WorkflowResponse } from "./types.js";
|
|
2
2
|
export { BaoBoxError } from "./errors.js";
|
|
3
3
|
export type * from "./types.js";
|
|
4
4
|
export declare class BaoBoxClient {
|
|
5
5
|
private readonly endpoint;
|
|
6
6
|
private readonly apiKey;
|
|
7
|
+
private readonly adminSecret;
|
|
7
8
|
private readonly fetch;
|
|
8
9
|
private readonly timeoutMs;
|
|
10
|
+
readonly health: {
|
|
11
|
+
get: () => Promise<HealthResponse>;
|
|
12
|
+
};
|
|
9
13
|
readonly admin: {
|
|
14
|
+
keys: {
|
|
15
|
+
list: () => Promise<ApiKey[]>;
|
|
16
|
+
create: (req: CreateApiKeyRequest) => Promise<CreatedApiKey>;
|
|
17
|
+
delete: (id: string) => Promise<DeleteResult>;
|
|
18
|
+
};
|
|
19
|
+
stats: {
|
|
20
|
+
get: (req?: {
|
|
21
|
+
since?: string;
|
|
22
|
+
}) => Promise<AdminStats>;
|
|
23
|
+
};
|
|
24
|
+
logs: {
|
|
25
|
+
list: (req?: {
|
|
26
|
+
limit?: number;
|
|
27
|
+
}) => Promise<CallLogRow[]>;
|
|
28
|
+
};
|
|
29
|
+
tasks: {
|
|
30
|
+
list: () => Promise<ScheduledTask[]>;
|
|
31
|
+
create: (req: CreateScheduledTaskRequest) => Promise<ScheduledTask | null>;
|
|
32
|
+
update: (id: string, req: UpdateScheduledTaskRequest) => Promise<ScheduledTask | null>;
|
|
33
|
+
delete: (id: string) => Promise<DeleteResult>;
|
|
34
|
+
};
|
|
10
35
|
skills: {
|
|
11
36
|
upsert: (req: SkillUpsertRequest) => Promise<Skill>;
|
|
12
37
|
};
|
|
@@ -15,21 +40,113 @@ export declare class BaoBoxClient {
|
|
|
15
40
|
};
|
|
16
41
|
};
|
|
17
42
|
readonly sessions: {
|
|
18
|
-
create: (req
|
|
19
|
-
|
|
20
|
-
}) => Promise<Session>;
|
|
43
|
+
create: (req?: SessionCreateRequest) => Promise<Session>;
|
|
44
|
+
get: (sessionId: string) => Promise<Session>;
|
|
21
45
|
messages: (sessionId: string) => Promise<SessionMessage[]>;
|
|
46
|
+
timeline: (sessionId: string) => Promise<SessionTimeline>;
|
|
47
|
+
delete: (sessionId: string) => Promise<DeleteResult>;
|
|
48
|
+
};
|
|
49
|
+
readonly skills: {
|
|
50
|
+
list: () => Promise<Skill[]>;
|
|
51
|
+
get: (skillId: string) => Promise<SkillWithFiles>;
|
|
52
|
+
create: (req: SkillCreateRequest) => Promise<Skill>;
|
|
53
|
+
update: (skillId: string, req: SkillUpdateRequest) => Promise<Skill>;
|
|
54
|
+
save: (req: SkillUpsertRequest) => Promise<Skill>;
|
|
55
|
+
import: (req: SkillImportRequest) => Promise<Skill>;
|
|
56
|
+
delete: (skillId: string) => Promise<DeleteResult>;
|
|
57
|
+
files: {
|
|
58
|
+
list: (skillId: string) => Promise<SkillFileSummary[]>;
|
|
59
|
+
get: (skillId: string, path: string) => Promise<SkillFile>;
|
|
60
|
+
set: (skillId: string, path: string, req: SetSkillFileRequest) => Promise<SetSkillFileResult>;
|
|
61
|
+
delete: (skillId: string, path: string) => Promise<DeleteResult>;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
readonly tools: {
|
|
65
|
+
list: () => Promise<Tool[]>;
|
|
66
|
+
get: (toolId: string) => Promise<Tool>;
|
|
67
|
+
create: (req: ToolCreateRequest) => Promise<Tool>;
|
|
68
|
+
delete: (toolId: string) => Promise<DeleteResult>;
|
|
69
|
+
skills: {
|
|
70
|
+
list: (skillId: string) => Promise<Tool[]>;
|
|
71
|
+
attach: (skillId: string, toolId: string) => Promise<AttachToolResult>;
|
|
72
|
+
detach: (skillId: string, toolId: string) => Promise<DetachToolResult>;
|
|
73
|
+
};
|
|
74
|
+
secrets: {
|
|
75
|
+
list: (skillId: string) => Promise<SkillSecretSummary[]>;
|
|
76
|
+
set: (skillId: string, req: SetSkillSecretRequest) => Promise<SetSkillSecretResult>;
|
|
77
|
+
delete: (skillId: string, key: string) => Promise<DeleteResult>;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
readonly eval: {
|
|
81
|
+
tests: {
|
|
82
|
+
list: (skillId: string) => Promise<EvalCase[]>;
|
|
83
|
+
create: (skillId: string, req: CreateEvalCaseRequest) => Promise<EvalCase>;
|
|
84
|
+
delete: (skillId: string, testId: string) => Promise<DeleteResult>;
|
|
85
|
+
};
|
|
86
|
+
run: (req: RunEvalRequest) => Promise<EvalRunExecution>;
|
|
87
|
+
runs: {
|
|
88
|
+
get: (runId: string) => Promise<EvalRunWithResults>;
|
|
89
|
+
};
|
|
90
|
+
stats: (req?: EvalStatsRequest) => Promise<EvalStats>;
|
|
91
|
+
failures: (req?: EvalFailuresRequest) => Promise<EvalFailureRow[]>;
|
|
92
|
+
compare: (req: EvalCompareRequest) => Promise<EvalCompare>;
|
|
22
93
|
};
|
|
23
94
|
readonly events: {
|
|
24
95
|
list: (req: EventListRequest) => Promise<Event[]>;
|
|
25
96
|
};
|
|
26
97
|
constructor(opts: BaoBoxClientOptions);
|
|
27
98
|
chat(req: ChatRequest): Promise<ChatResponse>;
|
|
99
|
+
workflow(req: WorkflowRequest): Promise<WorkflowResponse>;
|
|
100
|
+
private getHealth;
|
|
28
101
|
private createSession;
|
|
102
|
+
private getSession;
|
|
29
103
|
private listMessages;
|
|
30
|
-
private
|
|
31
|
-
private
|
|
104
|
+
private getSessionTimeline;
|
|
105
|
+
private deleteSession;
|
|
106
|
+
private listSkills;
|
|
107
|
+
private getSkill;
|
|
108
|
+
private createSkill;
|
|
109
|
+
private updateSkill;
|
|
110
|
+
private saveSkill;
|
|
111
|
+
private importSkill;
|
|
112
|
+
private deleteSkill;
|
|
113
|
+
private listSkillFiles;
|
|
114
|
+
private getSkillFile;
|
|
115
|
+
private setSkillFile;
|
|
116
|
+
private deleteSkillFile;
|
|
117
|
+
private listTools;
|
|
118
|
+
private getTool;
|
|
119
|
+
private createTool;
|
|
120
|
+
private deleteTool;
|
|
121
|
+
private listSkillTools;
|
|
122
|
+
private attachToolToSkill;
|
|
123
|
+
private detachToolFromSkill;
|
|
124
|
+
private listSkillSecrets;
|
|
125
|
+
private setSkillSecret;
|
|
126
|
+
private deleteSkillSecret;
|
|
127
|
+
private listApiKeys;
|
|
128
|
+
private createApiKey;
|
|
129
|
+
private deleteApiKey;
|
|
130
|
+
private getAdminStats;
|
|
131
|
+
private listAdminLogs;
|
|
132
|
+
private listScheduledTasks;
|
|
133
|
+
private createScheduledTask;
|
|
134
|
+
private updateScheduledTask;
|
|
135
|
+
private deleteScheduledTask;
|
|
136
|
+
private listEvalTests;
|
|
137
|
+
private createEvalTest;
|
|
138
|
+
private deleteEvalTest;
|
|
139
|
+
private runEval;
|
|
140
|
+
private getEvalRun;
|
|
141
|
+
private getEvalStats;
|
|
142
|
+
private listEvalFailures;
|
|
143
|
+
private compareEvalVersions;
|
|
32
144
|
private listEvents;
|
|
145
|
+
private syncSkillTools;
|
|
146
|
+
private requestNoAuth;
|
|
147
|
+
private requestApi;
|
|
148
|
+
private requestAdmin;
|
|
33
149
|
private request;
|
|
150
|
+
private getAuthHeaders;
|
|
34
151
|
}
|
|
35
152
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|