@my-life-buddies/buddy-runtime 0.0.1

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.
Files changed (58) hide show
  1. package/README.md +175 -0
  2. package/dist/conversation/agent.d.ts +24 -0
  3. package/dist/conversation/agent.d.ts.map +1 -0
  4. package/dist/conversation/agent.js +94 -0
  5. package/dist/conversation/agent.js.map +1 -0
  6. package/dist/conversation/convert.d.ts +46 -0
  7. package/dist/conversation/convert.d.ts.map +1 -0
  8. package/dist/conversation/convert.js +275 -0
  9. package/dist/conversation/convert.js.map +1 -0
  10. package/dist/conversation/history.d.ts +18 -0
  11. package/dist/conversation/history.d.ts.map +1 -0
  12. package/dist/conversation/history.js +28 -0
  13. package/dist/conversation/history.js.map +1 -0
  14. package/dist/conversation/index.d.ts +92 -0
  15. package/dist/conversation/index.d.ts.map +1 -0
  16. package/dist/conversation/index.js +322 -0
  17. package/dist/conversation/index.js.map +1 -0
  18. package/dist/conversation/presence.d.ts +24 -0
  19. package/dist/conversation/presence.d.ts.map +1 -0
  20. package/dist/conversation/presence.js +56 -0
  21. package/dist/conversation/presence.js.map +1 -0
  22. package/dist/conversation/writeBack.d.ts +36 -0
  23. package/dist/conversation/writeBack.d.ts.map +1 -0
  24. package/dist/conversation/writeBack.js +114 -0
  25. package/dist/conversation/writeBack.js.map +1 -0
  26. package/dist/index.d.ts +5 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/log.d.ts +5 -0
  31. package/dist/log.d.ts.map +1 -0
  32. package/dist/log.js +17 -0
  33. package/dist/log.js.map +1 -0
  34. package/dist/mlbClient.d.ts +118 -0
  35. package/dist/mlbClient.d.ts.map +1 -0
  36. package/dist/mlbClient.js +322 -0
  37. package/dist/mlbClient.js.map +1 -0
  38. package/dist/model.d.ts +24 -0
  39. package/dist/model.d.ts.map +1 -0
  40. package/dist/model.js +45 -0
  41. package/dist/model.js.map +1 -0
  42. package/dist/server.d.ts +6 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +99 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/tools/resource.d.ts +18 -0
  47. package/dist/tools/resource.d.ts.map +1 -0
  48. package/dist/tools/resource.js +57 -0
  49. package/dist/tools/resource.js.map +1 -0
  50. package/dist/tools/widgets.d.ts +16 -0
  51. package/dist/tools/widgets.d.ts.map +1 -0
  52. package/dist/tools/widgets.js +205 -0
  53. package/dist/tools/widgets.js.map +1 -0
  54. package/dist/types.d.ts +137 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +8 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +37 -0
@@ -0,0 +1,137 @@
1
+ import type { AgentMessage, AgentOptions, AgentState } from "@earendil-works/pi-agent-core";
2
+ /** 一个搭子在一场会话里的配置。形状照 pi 的 Agent 来。 */
3
+ export type BuddyOptions = Pick<AgentOptions, "transformContext" | "beforeToolCall" | "afterToolCall" | "shouldStopAfterTurn" | "prepareNextTurnWithContext" | "thinkingBudgets" | "toolExecution"> & {
4
+ /** systemPrompt 必填;tools / thinkingLevel 可选。model / messages 不露——模型在 BuddyServer.start 的 model 里按 id 选、历史从平台灌 */
5
+ initialState: Pick<AgentState, "systemPrompt"> & Partial<Pick<AgentState, "tools" | "thinkingLevel">>;
6
+ };
7
+ /** 工厂:每场会话第一条消息到达时调一次。 */
8
+ export type BuddyFactory = (conversation: Conversation) => BuddyOptions | Promise<BuddyOptions>;
9
+ /** 一场会话。工厂和工具闭包都拿得到。 */
10
+ export interface Conversation {
11
+ /** 平台的会话键:私聊 p_ 前缀、群 g_ 前缀。两场会话之间不该看得见对方 */
12
+ readonly key: string;
13
+ /** 行首带搭子 id */
14
+ readonly log: BuddyLogger;
15
+ /**
16
+ * 这场会话的记忆:搭子写给自己的长期印象,平台只存不读,按会话隔离,会话删除时平台一并清掉。
17
+ * 会话键已经绑好,调的时候不用传。失败(超配额、key 不合法、网络错误)直接 throw,文案是平台给的原因。
18
+ */
19
+ readonly memory: {
20
+ /** 全量列出,按 key 字典序。GET /internal/v1/memory */
21
+ list(): Promise<MemoryEntry[]>;
22
+ /** 覆盖写一条。key 是主题名:非空、不含空白与 /、≤64 字;text 单条 ≤16KB;每会话 ≤64 条、合计 ≤256KB。PUT /internal/v1/memory/:key */
23
+ write(key: string, text: string): Promise<void>;
24
+ /** 删一条,删不存在的也算成功。DELETE /internal/v1/memory/:key */
25
+ delete(key: string): Promise<void>;
26
+ };
27
+ }
28
+ /** 一条记忆:GET /internal/v1/memory 响应体 entries 里的每条 */
29
+ export interface MemoryEntry {
30
+ /** 主题名 */
31
+ key: string;
32
+ text: string;
33
+ /** 最后写入时刻,毫秒 */
34
+ updatedAt: number;
35
+ }
36
+ export interface BuddyLogger {
37
+ info(message: string, data?: Record<string, unknown>): void;
38
+ warn(message: string, data?: Record<string, unknown>): void;
39
+ error(message: string, data?: Record<string, unknown>): void;
40
+ }
41
+ export interface StartOptions {
42
+ buddy: BuddyFactory;
43
+ /** 模型 id,取值照平台 GET /cli/models 报的;不给就是 kimi-k3。整个进程的会话共用这一个 */
44
+ model?: string;
45
+ }
46
+ export interface BuddyServerHandle {
47
+ stop(): Promise<void>;
48
+ }
49
+ declare module "@earendil-works/pi-agent-core" {
50
+ interface CustomAgentMessages {
51
+ note: NoteMessage;
52
+ }
53
+ }
54
+ export interface NoteMessage {
55
+ role: "note";
56
+ text: string;
57
+ timestamp: number;
58
+ }
59
+ /** 读口每条记录 */
60
+ export interface PlatformMessage {
61
+ /** 落库自增号,③ 唯一标识兼游标 */
62
+ seq: number;
63
+ /** message / checkin / tool / question / note / widget / messagesCard / system */
64
+ type: string;
65
+ /** user / buddy / platform */
66
+ author: string;
67
+ /** 正文;富类型这里是给人看的一行摘要 */
68
+ text: string;
69
+ /** 发言人显示名(群成员现名 / 私聊转发人);搭子自己的消息不带 */
70
+ name?: string;
71
+ /** 群会话该句成员号快照 m_…,认人靠它 */
72
+ memberId?: string;
73
+ /** 落库时刻毫秒(含时间机器偏移) */
74
+ timestamp: number;
75
+ /** 平台算好的开口判定,只在对方侧消息上有 */
76
+ shouldReply?: boolean;
77
+ question?: unknown;
78
+ widget?: {
79
+ id: string;
80
+ };
81
+ messagesCard?: MessagesCard;
82
+ toolCalls?: PlatformToolCall[];
83
+ /** 该步推理原文,只有搭子自己的记录上有 */
84
+ thinking?: string;
85
+ /** 半截话,重建跳过 */
86
+ interrupted?: boolean;
87
+ quote?: {
88
+ name?: string;
89
+ text?: string;
90
+ };
91
+ }
92
+ export interface MessagesCard {
93
+ from?: string;
94
+ buddy?: string;
95
+ items: {
96
+ name?: string;
97
+ text?: string;
98
+ messagesCard?: MessagesCard;
99
+ }[];
100
+ }
101
+ export interface PlatformToolCall {
102
+ callId: string;
103
+ name: string;
104
+ /** 给平台排查看的一行 */
105
+ summary: string;
106
+ arguments?: unknown;
107
+ result?: string;
108
+ }
109
+ /** 写口每条:type 只能是 message / checkin / tool / question / widget / note */
110
+ export interface OutgoingMessage {
111
+ type: "message" | "tool" | "note" | "widget";
112
+ text?: string;
113
+ timestamp?: number;
114
+ thinking?: string;
115
+ toolCalls?: PlatformToolCall[];
116
+ interrupted?: boolean;
117
+ widget?: {
118
+ id: string;
119
+ };
120
+ idempotencyKey?: string;
121
+ }
122
+ /** 读口响应。没有 context 字段 = 键已作废 */
123
+ export interface PullResponse {
124
+ messages: PlatformMessage[];
125
+ context?: string;
126
+ }
127
+ /** 事件流分发出来的事件;welcome / data-access 在流那层就丢掉 */
128
+ export type BuddyEvent = {
129
+ type: "message";
130
+ convoKey: string;
131
+ } | {
132
+ type: "delete";
133
+ convoKey: string;
134
+ };
135
+ /** 一个 pi AgentMessage 在平台上的来处:rebuild 灌进来的记住 seq,出站时不重写 */
136
+ export type Transcript = AgentMessage[];
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ // 开发者契约 + 模块间共享的类型。设计正本:REDoc《【技术设计】搭子 runtime 基座》。
2
+ //
3
+ // 开发者交一个工厂:buddy: (conversation) => BuddyOptions。BuddyOptions 里没有一个自造字段——
4
+ // 名字和签名全部从 pi 的 AgentOptions / AgentState 上 Pick,运行时只做两件事:
5
+ // 藏掉运行时独占的字段(streamFn / getApiKey / model / messages / convertToLlm / steeringMode …),
6
+ // 把 systemPrompt 设成必填(没人设的搭子是 bug,类型上就拦)。
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,0EAA0E;AAC1E,2DAA2D;AAC3D,uFAAuF;AACvF,0CAA0C"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@my-life-buddies/buddy-runtime",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "MLB 搭子运行时,基于 pi-agent-core:订阅平台事件流、拉取消息、驱动模型、写回回复。开发者调用 BuddyServer.start 交一份配置即可跑起一只搭子",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ },
11
+ "./package.json": "./package.json"
12
+ },
13
+ "files": [
14
+ "dist/"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.build.json",
18
+ "typecheck": "tsc --noEmit -p tsconfig.json",
19
+ "test": "node --test src/*.test.ts src/conversation/*.test.ts src/tools/*.test.ts",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "dependencies": {
23
+ "@earendil-works/pi-agent-core": "0.85.1",
24
+ "@earendil-works/pi-ai": "0.85.1",
25
+ "typebox": "1.3.7"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^26.2.0",
29
+ "typescript": "^5.9.0"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "engines": {
35
+ "node": ">=22.19.0"
36
+ }
37
+ }