@buoy-gg/agent-core 7.0.33

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 (138) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +42 -0
  3. package/lib/commonjs/blocks/receipts.js +702 -0
  4. package/lib/commonjs/blocks/receipts.js.map +1 -0
  5. package/lib/commonjs/blocks/types.js +119 -0
  6. package/lib/commonjs/blocks/types.js.map +1 -0
  7. package/lib/commonjs/blocks/uiTool.js +994 -0
  8. package/lib/commonjs/blocks/uiTool.js.map +1 -0
  9. package/lib/commonjs/catalog/catalog.g.js +4044 -0
  10. package/lib/commonjs/catalog/catalog.g.js.map +1 -0
  11. package/lib/commonjs/catalog/catalog.source.json +4956 -0
  12. package/lib/commonjs/catalog/snapshotReads.js +256 -0
  13. package/lib/commonjs/catalog/snapshotReads.js.map +1 -0
  14. package/lib/commonjs/catalog/toProviderTools.js +107 -0
  15. package/lib/commonjs/catalog/toProviderTools.js.map +1 -0
  16. package/lib/commonjs/catalog/validateParams.js +129 -0
  17. package/lib/commonjs/catalog/validateParams.js.map +1 -0
  18. package/lib/commonjs/context/buildContextPack.js +141 -0
  19. package/lib/commonjs/context/buildContextPack.js.map +1 -0
  20. package/lib/commonjs/effects/ledger.js +229 -0
  21. package/lib/commonjs/effects/ledger.js.map +1 -0
  22. package/lib/commonjs/engine/effectFor.js +95 -0
  23. package/lib/commonjs/engine/effectFor.js.map +1 -0
  24. package/lib/commonjs/engine/runAgentTurn.js +667 -0
  25. package/lib/commonjs/engine/runAgentTurn.js.map +1 -0
  26. package/lib/commonjs/engine/systemPrompt.js +86 -0
  27. package/lib/commonjs/engine/systemPrompt.js.map +1 -0
  28. package/lib/commonjs/index.js +288 -0
  29. package/lib/commonjs/index.js.map +1 -0
  30. package/lib/commonjs/package.json +1 -0
  31. package/lib/commonjs/policy/labels.js +303 -0
  32. package/lib/commonjs/policy/labels.js.map +1 -0
  33. package/lib/commonjs/policy/policy.js +143 -0
  34. package/lib/commonjs/policy/policy.js.map +1 -0
  35. package/lib/commonjs/policy/redact.js +135 -0
  36. package/lib/commonjs/policy/redact.js.map +1 -0
  37. package/lib/commonjs/providers/anthropic.js +272 -0
  38. package/lib/commonjs/providers/anthropic.js.map +1 -0
  39. package/lib/commonjs/providers/openai.js +193 -0
  40. package/lib/commonjs/providers/openai.js.map +1 -0
  41. package/lib/commonjs/providers/sse.js +104 -0
  42. package/lib/commonjs/providers/sse.js.map +1 -0
  43. package/lib/commonjs/providers/types.js +6 -0
  44. package/lib/commonjs/providers/types.js.map +1 -0
  45. package/lib/commonjs/session.js +173 -0
  46. package/lib/commonjs/session.js.map +1 -0
  47. package/lib/commonjs/types.js +2 -0
  48. package/lib/commonjs/types.js.map +1 -0
  49. package/lib/module/blocks/receipts.js +696 -0
  50. package/lib/module/blocks/receipts.js.map +1 -0
  51. package/lib/module/blocks/types.js +113 -0
  52. package/lib/module/blocks/types.js.map +1 -0
  53. package/lib/module/blocks/uiTool.js +987 -0
  54. package/lib/module/blocks/uiTool.js.map +1 -0
  55. package/lib/module/catalog/catalog.g.js +4040 -0
  56. package/lib/module/catalog/catalog.g.js.map +1 -0
  57. package/lib/module/catalog/catalog.source.json +4956 -0
  58. package/lib/module/catalog/snapshotReads.js +252 -0
  59. package/lib/module/catalog/snapshotReads.js.map +1 -0
  60. package/lib/module/catalog/toProviderTools.js +101 -0
  61. package/lib/module/catalog/toProviderTools.js.map +1 -0
  62. package/lib/module/catalog/validateParams.js +124 -0
  63. package/lib/module/catalog/validateParams.js.map +1 -0
  64. package/lib/module/context/buildContextPack.js +138 -0
  65. package/lib/module/context/buildContextPack.js.map +1 -0
  66. package/lib/module/effects/ledger.js +223 -0
  67. package/lib/module/effects/ledger.js.map +1 -0
  68. package/lib/module/engine/effectFor.js +91 -0
  69. package/lib/module/engine/effectFor.js.map +1 -0
  70. package/lib/module/engine/runAgentTurn.js +663 -0
  71. package/lib/module/engine/runAgentTurn.js.map +1 -0
  72. package/lib/module/engine/systemPrompt.js +82 -0
  73. package/lib/module/engine/systemPrompt.js.map +1 -0
  74. package/lib/module/index.js +30 -0
  75. package/lib/module/index.js.map +1 -0
  76. package/lib/module/policy/labels.js +296 -0
  77. package/lib/module/policy/labels.js.map +1 -0
  78. package/lib/module/policy/policy.js +137 -0
  79. package/lib/module/policy/policy.js.map +1 -0
  80. package/lib/module/policy/redact.js +128 -0
  81. package/lib/module/policy/redact.js.map +1 -0
  82. package/lib/module/providers/anthropic.js +268 -0
  83. package/lib/module/providers/anthropic.js.map +1 -0
  84. package/lib/module/providers/openai.js +189 -0
  85. package/lib/module/providers/openai.js.map +1 -0
  86. package/lib/module/providers/sse.js +99 -0
  87. package/lib/module/providers/sse.js.map +1 -0
  88. package/lib/module/providers/types.js +4 -0
  89. package/lib/module/providers/types.js.map +1 -0
  90. package/lib/module/session.js +168 -0
  91. package/lib/module/session.js.map +1 -0
  92. package/lib/module/types.js +2 -0
  93. package/lib/module/types.js.map +1 -0
  94. package/lib/typescript/blocks/receipts.d.ts +32 -0
  95. package/lib/typescript/blocks/receipts.d.ts.map +1 -0
  96. package/lib/typescript/blocks/types.d.ts +576 -0
  97. package/lib/typescript/blocks/types.d.ts.map +1 -0
  98. package/lib/typescript/blocks/uiTool.d.ts +15 -0
  99. package/lib/typescript/blocks/uiTool.d.ts.map +1 -0
  100. package/lib/typescript/catalog/catalog.g.d.ts +11 -0
  101. package/lib/typescript/catalog/catalog.g.d.ts.map +1 -0
  102. package/lib/typescript/catalog/snapshotReads.d.ts +37 -0
  103. package/lib/typescript/catalog/snapshotReads.d.ts.map +1 -0
  104. package/lib/typescript/catalog/toProviderTools.d.ts +52 -0
  105. package/lib/typescript/catalog/toProviderTools.d.ts.map +1 -0
  106. package/lib/typescript/catalog/validateParams.d.ts +33 -0
  107. package/lib/typescript/catalog/validateParams.d.ts.map +1 -0
  108. package/lib/typescript/context/buildContextPack.d.ts +32 -0
  109. package/lib/typescript/context/buildContextPack.d.ts.map +1 -0
  110. package/lib/typescript/effects/ledger.d.ts +119 -0
  111. package/lib/typescript/effects/ledger.d.ts.map +1 -0
  112. package/lib/typescript/engine/effectFor.d.ts +21 -0
  113. package/lib/typescript/engine/effectFor.d.ts.map +1 -0
  114. package/lib/typescript/engine/runAgentTurn.d.ts +140 -0
  115. package/lib/typescript/engine/runAgentTurn.d.ts.map +1 -0
  116. package/lib/typescript/engine/systemPrompt.d.ts +49 -0
  117. package/lib/typescript/engine/systemPrompt.d.ts.map +1 -0
  118. package/lib/typescript/index.d.ts +29 -0
  119. package/lib/typescript/index.d.ts.map +1 -0
  120. package/lib/typescript/policy/labels.d.ts +10 -0
  121. package/lib/typescript/policy/labels.d.ts.map +1 -0
  122. package/lib/typescript/policy/policy.d.ts +106 -0
  123. package/lib/typescript/policy/policy.d.ts.map +1 -0
  124. package/lib/typescript/policy/redact.d.ts +37 -0
  125. package/lib/typescript/policy/redact.d.ts.map +1 -0
  126. package/lib/typescript/providers/anthropic.d.ts +22 -0
  127. package/lib/typescript/providers/anthropic.d.ts.map +1 -0
  128. package/lib/typescript/providers/openai.d.ts +19 -0
  129. package/lib/typescript/providers/openai.d.ts.map +1 -0
  130. package/lib/typescript/providers/sse.d.ts +18 -0
  131. package/lib/typescript/providers/sse.d.ts.map +1 -0
  132. package/lib/typescript/providers/types.d.ts +129 -0
  133. package/lib/typescript/providers/types.d.ts.map +1 -0
  134. package/lib/typescript/session.d.ts +58 -0
  135. package/lib/typescript/session.d.ts.map +1 -0
  136. package/lib/typescript/types.d.ts +119 -0
  137. package/lib/typescript/types.d.ts.map +1 -0
  138. package/package.json +58 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * SSE reading, with the React Native reality baked in.
5
+ *
6
+ * RN's built-in `fetch` does not implement `response.body`. Under Expo you get
7
+ * a real `ReadableStream` because `expo/fetch` is the global — but
8
+ * `EXPO_PUBLIC_USE_RN_FETCH=1` reverts that, and the bare-RN, NativeScript and
9
+ * TV-CLI lanes never had it. So `readSse` degrades to reading the whole body
10
+ * and replaying it as events rather than failing: a non-streaming answer is a
11
+ * slower chat, while a hard failure is no chat at all.
12
+ */
13
+
14
+ function* parseChunk(buffer) {
15
+ let rest = buffer;
16
+ let idx;
17
+ // Frames are separated by a blank line. \r\n\r\n is legal too.
18
+ while ((idx = rest.search(/\r?\n\r?\n/)) !== -1) {
19
+ const raw = rest.slice(0, idx);
20
+ rest = rest.slice(idx + (rest[idx] === "\r" ? 4 : 2));
21
+ let event;
22
+ const dataLines = [];
23
+ for (const line of raw.split(/\r?\n/)) {
24
+ if (line.startsWith(":")) continue; // comment / keepalive
25
+ if (line.startsWith("event:")) event = line.slice(6).trim();else if (line.startsWith("data:")) dataLines.push(line.slice(5).replace(/^ /, ""));
26
+ }
27
+ if (dataLines.length) yield {
28
+ event,
29
+ data: dataLines.join("\n")
30
+ };
31
+ }
32
+ return rest;
33
+ }
34
+ export async function* readSse(response) {
35
+ const body = response.body;
36
+ if (!body || typeof body.getReader !== "function") {
37
+ // No streaming on this platform — read it all, then replay.
38
+ const text = await response.text();
39
+ let rest = "";
40
+ const gen = parseChunk(text + "\n\n");
41
+ let next = gen.next();
42
+ while (!next.done) {
43
+ yield next.value;
44
+ next = gen.next();
45
+ }
46
+ rest = next.value;
47
+ if (rest.trim()) {
48
+ const tail = parseChunk(rest + "\n\n");
49
+ let t = tail.next();
50
+ while (!t.done) {
51
+ yield t.value;
52
+ t = tail.next();
53
+ }
54
+ }
55
+ return;
56
+ }
57
+ const reader = body.getReader();
58
+ const decoder = new TextDecoder();
59
+ let buffer = "";
60
+ try {
61
+ for (;;) {
62
+ const {
63
+ done,
64
+ value
65
+ } = await reader.read();
66
+ if (done) break;
67
+ buffer += decoder.decode(value, {
68
+ stream: true
69
+ });
70
+ const gen = parseChunk(buffer);
71
+ let next = gen.next();
72
+ while (!next.done) {
73
+ yield next.value;
74
+ next = gen.next();
75
+ }
76
+ buffer = next.value;
77
+ }
78
+ } finally {
79
+ // Cancelling on abort keeps the socket from lingering after the user
80
+ // closes the sheet mid-answer.
81
+ try {
82
+ reader.releaseLock();
83
+ } catch {
84
+ /* already released */
85
+ }
86
+ }
87
+ }
88
+
89
+ /** Body text for a failed response, trimmed to something a user can read. */
90
+ export async function errorBody(response) {
91
+ let detail = "";
92
+ try {
93
+ detail = (await response.text()).slice(0, 600);
94
+ } catch {
95
+ /* body already consumed or unreadable */
96
+ }
97
+ return `HTTP ${response.status}${detail ? ` — ${detail}` : ""}`;
98
+ }
99
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseChunk","buffer","rest","idx","search","raw","slice","event","dataLines","line","split","startsWith","trim","push","replace","length","data","join","readSse","response","body","getReader","text","gen","next","done","value","tail","t","reader","decoder","TextDecoder","read","decode","stream","releaseLock","errorBody","detail","status"],"sourceRoot":"../../../src","sources":["providers/sse.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["providers/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * A conversation, with everything wired up.
5
+ *
6
+ * This is the one-call surface the UI packages use. It owns the pieces that
7
+ * have to agree with each other across a whole session — the provider, the
8
+ * catalog filtered to what this device can actually do, the system prompt
9
+ * (built once, after grounding), the effect ledger, and the message history —
10
+ * so a chat UI is a message list plus a text box rather than an orchestrator.
11
+ */
12
+ import { CATALOG } from "./catalog/catalog.g";
13
+ import { buildContextDigest } from "./context/buildContextPack";
14
+ import { runAgentTurn } from "./engine/runAgentTurn";
15
+ import { buildSystemPrompt } from "./engine/systemPrompt";
16
+ import { EffectLedger } from "./effects/ledger";
17
+ import { createAnthropicProvider } from "./providers/anthropic";
18
+ import { createOpenAIProvider } from "./providers/openai";
19
+ import { resolveRequireApproval } from "./policy/policy";
20
+ import { registerSelfEndpoint } from "./policy/redact";
21
+ /**
22
+ * A long QA session must not die on the provider's context limit with an
23
+ * opaque error — the transcript grows without bound (tool results are the
24
+ * heavy part), so the OLDEST rounds are dropped once the history passes a
25
+ * budget. Rounds are dropped whole — a round starts at a user message — so
26
+ * the assistant/tool-result pairing every provider requires stays intact and
27
+ * the history still begins with a user message.
28
+ */
29
+ const MAX_HISTORY_CHARS = 150_000;
30
+ const MIN_KEEP_MESSAGES = 4;
31
+ function messageSize(m) {
32
+ try {
33
+ return JSON.stringify(m).length;
34
+ } catch {
35
+ return 0;
36
+ }
37
+ }
38
+ function trimHistory(messages) {
39
+ let total = 0;
40
+ for (const m of messages) total += messageSize(m);
41
+ if (total <= MAX_HISTORY_CHARS) return messages;
42
+ const out = [...messages];
43
+ while (out.length > MIN_KEEP_MESSAGES && total > MAX_HISTORY_CHARS) {
44
+ total -= messageSize(out[0]);
45
+ out.shift();
46
+ while (out.length > MIN_KEEP_MESSAGES && out[0].role !== "user") {
47
+ total -= messageSize(out[0]);
48
+ out.shift();
49
+ }
50
+ }
51
+ return out;
52
+ }
53
+ export function createAskBuoySession(config) {
54
+ const catalog = config.catalog ?? CATALOG;
55
+ const ledger = new EffectLedger();
56
+ const policy = config.policy ?? {};
57
+ let messages = [];
58
+ let system;
59
+ let primed = false;
60
+ /**
61
+ * `storage key -> the live store that owns it`, derived from the grounding.
62
+ *
63
+ * Kept because the prompt alone is advice, and a cheap model skips advice the
64
+ * same way it skips an optional parameter. With this the ENGINE can tell,
65
+ * at dispatch time, that a storage write landed on a store's saved copy and
66
+ * therefore changed nothing the user can see.
67
+ */
68
+ let storeKeyOwners = {};
69
+
70
+ // So the agent's own requests to the model endpoint never come back to it
71
+ // out of the network tool — that would feed it its own auth headers.
72
+ registerSelfEndpoint(config.endpoint);
73
+ const provider = config.protocol === "openai" ? createOpenAIProvider(config) : createAnthropicProvider(config);
74
+
75
+ // Mutable: the device's tool list fills in over the first frames and can
76
+ // change while the sheet is open. See setAvailableActions.
77
+ let availableActions = config.availableActions;
78
+ let availableToolIds = Object.keys(availableActions);
79
+ async function prime() {
80
+ if (primed) return;
81
+ primed = true;
82
+ let digest = {};
83
+ try {
84
+ digest = await buildContextDigest({
85
+ dispatch: config.dispatch,
86
+ readSnapshot: config.readSnapshot,
87
+ availableToolIds,
88
+ availableActions
89
+ });
90
+ } catch {
91
+ // Grounding is an optimisation. A chat with no digest still works; a
92
+ // chat that refuses to open because a probe timed out does not.
93
+ }
94
+ storeKeyOwners = {};
95
+ for (const raw of digest.zustandStores ?? []) {
96
+ const store = raw;
97
+ if (store?.persistsTo && store.name) storeKeyOwners[store.persistsTo] = store.name;
98
+ }
99
+ system = buildSystemPrompt({
100
+ catalog,
101
+ context: {
102
+ ...config.context,
103
+ digest: {
104
+ ...digest,
105
+ ...config.context?.digest
106
+ }
107
+ },
108
+ isRelease: config.isRelease,
109
+ readOnly: policy.readOnly ?? false,
110
+ requireApproval: resolveRequireApproval(policy),
111
+ appName: config.appName,
112
+ platform: config.platform
113
+ });
114
+ }
115
+ return {
116
+ ledger,
117
+ get messages() {
118
+ return messages;
119
+ },
120
+ prime,
121
+ setAvailableActions(actions) {
122
+ availableActions = actions;
123
+ availableToolIds = Object.keys(actions);
124
+ },
125
+ async *send(text, signal) {
126
+ await prime();
127
+ messages.push({
128
+ role: "user",
129
+ text
130
+ });
131
+ messages = trimHistory(messages);
132
+ const gen = runAgentTurn({
133
+ provider,
134
+ catalog,
135
+ messages,
136
+ system: system,
137
+ model: config.model,
138
+ maxTokens: config.maxTokens ?? 4096,
139
+ dispatch: config.dispatch,
140
+ readSnapshot: config.readSnapshot,
141
+ storeKeyOwners,
142
+ ledger,
143
+ policy,
144
+ isRelease: config.isRelease,
145
+ availableToolIds,
146
+ availableActions,
147
+ requestApproval: config.requestApproval,
148
+ signal
149
+ });
150
+ let next = await gen.next();
151
+ while (!next.done) {
152
+ yield next.value;
153
+ next = await gen.next();
154
+ }
155
+ // The generator's return value is the full history including tool turns.
156
+ messages = next.value;
157
+ },
158
+ reset() {
159
+ messages = [];
160
+ ledger.clear();
161
+ // The grounding digest is a snapshot of the app AT OPEN — stores and
162
+ // routes registered since are invisible to it. A new conversation is
163
+ // the natural moment to re-read the world.
164
+ primed = false;
165
+ }
166
+ };
167
+ }
168
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CATALOG","buildContextDigest","runAgentTurn","buildSystemPrompt","EffectLedger","createAnthropicProvider","createOpenAIProvider","resolveRequireApproval","registerSelfEndpoint","MAX_HISTORY_CHARS","MIN_KEEP_MESSAGES","messageSize","m","JSON","stringify","length","trimHistory","messages","total","out","shift","role","createAskBuoySession","config","catalog","ledger","policy","system","primed","storeKeyOwners","endpoint","provider","protocol","availableActions","availableToolIds","Object","keys","prime","digest","dispatch","readSnapshot","raw","zustandStores","store","persistsTo","name","context","isRelease","readOnly","requireApproval","appName","platform","setAvailableActions","actions","send","text","signal","push","gen","model","maxTokens","requestApproval","next","done","value","reset","clear"],"sourceRoot":"../../src","sources":["session.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Receipts — blocks the engine builds from tool results, deterministically.
3
+ *
4
+ * The model never authors these, so they cannot hallucinate, and a weak model
5
+ * cannot fail to produce them. They render the SAME redacted result the model
6
+ * gets, so what the user sees and what the model reasons about are one thing.
7
+ *
8
+ * Every projector is small and honest about caps: it truncates and records
9
+ * `total` so the renderer can say "+38 more" truthfully.
10
+ */
11
+ import { type Block } from "./types";
12
+ /** Shallow diff of two plain objects: top-level keys that differ. */
13
+ export declare function shallowDiff(before: unknown, after: unknown): {
14
+ path: string;
15
+ before?: unknown;
16
+ after?: unknown;
17
+ }[];
18
+ export interface ReceiptInput {
19
+ toolId: string;
20
+ action: string;
21
+ params: Record<string, unknown>;
22
+ result: unknown;
23
+ /** From captureBefore, when the engine read the prior value. */
24
+ before?: unknown;
25
+ effect: "read" | "write" | "destructive";
26
+ }
27
+ /**
28
+ * The receipt for one successful call, or nothing. Adding a projector is the
29
+ * whole job of making a tool's result visible — no UI change needed.
30
+ */
31
+ export declare function projectReceipt(input: ReceiptInput): Block | undefined;
32
+ //# sourceMappingURL=receipts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipts.d.ts","sourceRoot":"","sources":["../../../src/blocks/receipts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAQ,KAAK,KAAK,EAAwC,MAAM,SAAS,CAAC;AAqCjF,qEAAqE;AACrE,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,CAYvD;AAiCD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS,CA8frE"}