@baobox/sdk 0.1.2 → 0.2.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 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,37 @@ 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
- ### Sessions
54
+ ### Sessions, Skills, Tools, Eval, Admin
55
+
56
+ BaoBox now splits auth:
57
+
58
+ - `apiKey` is only for `chat`
59
+ - `adminSecret` is for `sessions`, `skills`, `tools`, `eval`, and `admin`
54
60
 
55
61
  ```typescript
56
62
  const session = await bb.sessions.create({ skillId: "sk_chase" });
57
63
  const history = await bb.sessions.messages(session.id);
64
+ const timeline = await bb.sessions.timeline(session.id);
65
+
66
+ const skill = await bb.skills.create({
67
+ name: "Document Chaser",
68
+ systemPrompt: "...",
69
+ tools: ["lookup_client_docs"], // SDK convenience: syncs attachments after create
70
+ });
71
+
72
+ const tool = await bb.tools.create({
73
+ name: "lookup_client_docs",
74
+ description: "...",
75
+ inputSchema: { type: "object" },
76
+ handlerType: "http",
77
+ handlerConfig: { url: "https://backend.example.com/tools/lookup" },
78
+ });
79
+
80
+ const run = await bb.eval.run({ skillId: skill.id });
81
+ const stats = await bb.admin.stats.get();
58
82
  ```
59
83
 
60
- ### Admin (requires admin token)
84
+ ### Backward compatibility
61
85
 
62
86
  ```typescript
63
87
  await bb.admin.skills.upsert({
@@ -77,10 +101,12 @@ await bb.admin.tools.upsert({
77
101
  });
78
102
  ```
79
103
 
80
- ### Events (trace)
104
+ `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`.
105
+
106
+ ### Events (timeline alias)
81
107
 
82
108
  ```typescript
83
- const events = await bb.events.list({ sessionId: "ses_1", limit: 50 });
109
+ const events = await bb.events.list({ sessionId: "ses_1" });
84
110
  ```
85
111
 
86
112
  ## Error handling
@@ -107,8 +133,9 @@ Network failures surface as `BaoBoxError` with `status: 0` and `code: "NETWORK"`
107
133
 
108
134
  ```typescript
109
135
  new BaoBoxClient({
110
- endpoint: "...", // required — BaoBox API base URL
111
- apiKey: "...", // required
136
+ endpoint: "...", // required — BaoBox API base URL
137
+ apiKey: "...", // optional unless using chat
138
+ adminSecret: "...", // optional unless using admin/runtime management APIs
112
139
  orgId: "firm_a", // optional, observability tag
113
140
  fetch: myFetch, // optional, injects custom fetch (tests / edge runtimes)
114
141
  timeoutMs: 30_000, // optional, default 30s. Set 0 to disable.
package/dist/index.d.ts CHANGED
@@ -1,12 +1,37 @@
1
- import type { ChatRequest, ChatResponse, Event, EventListRequest, Session, SessionMessage, Skill, BaoBoxClientOptions, SkillUpsertRequest, Tool, ToolUpsertRequest } from "./types.js";
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 } 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,112 @@ export declare class BaoBoxClient {
15
40
  };
16
41
  };
17
42
  readonly sessions: {
18
- create: (req: {
19
- skillId: string;
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
+ private getHealth;
28
100
  private createSession;
101
+ private getSession;
29
102
  private listMessages;
30
- private upsertSkill;
31
- private upsertTool;
103
+ private getSessionTimeline;
104
+ private deleteSession;
105
+ private listSkills;
106
+ private getSkill;
107
+ private createSkill;
108
+ private updateSkill;
109
+ private saveSkill;
110
+ private importSkill;
111
+ private deleteSkill;
112
+ private listSkillFiles;
113
+ private getSkillFile;
114
+ private setSkillFile;
115
+ private deleteSkillFile;
116
+ private listTools;
117
+ private getTool;
118
+ private createTool;
119
+ private deleteTool;
120
+ private listSkillTools;
121
+ private attachToolToSkill;
122
+ private detachToolFromSkill;
123
+ private listSkillSecrets;
124
+ private setSkillSecret;
125
+ private deleteSkillSecret;
126
+ private listApiKeys;
127
+ private createApiKey;
128
+ private deleteApiKey;
129
+ private getAdminStats;
130
+ private listAdminLogs;
131
+ private listScheduledTasks;
132
+ private createScheduledTask;
133
+ private updateScheduledTask;
134
+ private deleteScheduledTask;
135
+ private listEvalTests;
136
+ private createEvalTest;
137
+ private deleteEvalTest;
138
+ private runEval;
139
+ private getEvalRun;
140
+ private getEvalStats;
141
+ private listEvalFailures;
142
+ private compareEvalVersions;
32
143
  private listEvents;
144
+ private syncSkillTools;
145
+ private requestNoAuth;
146
+ private requestApi;
147
+ private requestAdmin;
33
148
  private request;
149
+ private getAuthHeaders;
34
150
  }
35
151
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,KAAK,EACL,gBAAgB,EAEhB,OAAO,EACP,cAAc,EACd,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,IAAI,EACJ,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,mBAAmB,YAAY,CAAC;AAIhC,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAKnC,SAAgB,KAAK,EAAE;QACrB,MAAM,EAAE;YAAE,MAAM,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;SAAE,CAAC;QAChE,KAAK,EAAE;YAAE,MAAM,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;SAAE,CAAC;KAC9D,CAAC;IACF,SAAgB,QAAQ,EAAE;QACxB,MAAM,EAAE,CAAC,GAAG,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC5D,CAAC;IACF,SAAgB,MAAM,EAAE;QACtB,IAAI,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;KACnD,CAAC;gBAEU,IAAI,EAAE,mBAAmB;IAkC/B,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;YAwBrC,aAAa;YAiBb,YAAY;YAuBZ,WAAW;YAsCX,UAAU;YA6BV,UAAU;YAkCV,OAAO;CAoFtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}