@buoy-gg/agent-core 7.0.66 → 7.0.67
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/lib/commonjs/hosted/protocol.js +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/providers/anthropic.js +1 -1
- package/lib/commonjs/providers/fallback.js +1 -0
- package/lib/commonjs/session.js +1 -1
- package/lib/module/hosted/protocol.js +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/providers/anthropic.js +1 -1
- package/lib/module/providers/fallback.js +1 -0
- package/lib/module/session.js +1 -1
- package/lib/typescript/hosted/protocol.d.ts +14 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/providers/fallback.d.ts +14 -0
- package/lib/typescript/session.d.ts +11 -0
- package/lib/web/index.mjs +47 -47
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.HOSTED_PROTOCOL_VERSION=exports.HOSTED_HEADERS=exports.HOSTED_ERRORS=void 0;exports.isHostedErrorCode=isHostedErrorCode;const HOSTED_PROTOCOL_VERSION=exports.HOSTED_PROTOCOL_VERSION=1;const HOSTED_HEADERS=exports.HOSTED_HEADERS={session:"X-Buoy-Session",ask:"X-Buoy-Ask",round:"X-Buoy-Round",attempt:"X-Buoy-Attempt",protocol:"X-Buoy-Protocol",client:"X-Buoy-Client",requestId:"X-Buoy-Request-Id"};const HOSTED_ERRORS=exports.HOSTED_ERRORS={session_missing:{status:401,action:"sign_in",message:"Sign in to use hosted Ask Buoy.",buttons:["sign_in"]},session_expired:{status:401,action:"refresh_retry",message:"Your sign-in ran out. Sign in again.",buttons:["sign_in"]},session_revoked:{status:401,action:"sign_in",message:"You were signed out. Sign in again.",buttons:["sign_in"]},token_not_allowed:{status:401,action:"sign_in",message:"This sign-in can't use hosted AI. Sign in as a person.",buttons:["sign_in"]},client_too_old:{status:426,action:"none",message:"Update Buoy to keep using hosted Ask Buoy.",buttons:[]},plan_not_eligible:{status:403,action:"none",message:"Hosted Ask Buoy comes with Pro and Business.",buttons:["see_plans"]},not_in_pilot:{status:403,action:"none",message:"Hosted Ask Buoy is in a small test right now.",buttons:[]},team_hosted_off:{status:403,action:"none",message:"Your team admin turned off hosted AI.",buttons:[]},account_frozen:{status:403,action:"none",message:"Your account has a billing problem.",buttons:["billing"]},credits_out:{status:402,action:"none",message:"You used this week's credits. They come back on {date}.",buttons:["own_endpoint"]},member_cap:{status:402,action:"none",message:"You hit your team's limit for you. Ask your admin.",buttons:[]},ask_too_costly:{status:402,action:"none",message:"This ask got too big. Try a smaller ask.",buttons:[]},ask_busy:{status:409,action:"retry_after",message:"Another ask is still running.",buttons:[]},duplicate_request:{status:409,action:"none",message:"That was already sent.",buttons:[]},request_too_large:{status:413,action:"trim_retry",message:"This chat got too long. Start a new chat.",buttons:["new_chat"]},media_not_allowed:{status:400,action:"none",message:"Hosted Ask Buoy can't read images yet.",buttons:[]},bad_request:{status:400,action:"none",message:"Something in the request was wrong.",buttons:["report"]},rate_limited:{status:429,action:"retry_after",message:"Too many asks at once. Trying again.",buttons:[]},hosted_paused:{status:503,action:"none",message:"Hosted AI is paused right now.",buttons:["own_endpoint"]},upstream_busy:{status:503,action:"retry_after",message:"The AI is busy. Trying again.",buttons:[]},upstream_error:{status:502,action:"retry_after",message:"The AI had a problem.",buttons:["try_again","report"]},upstream_refused:{status:403,action:"none",message:"The AI would not answer that.",buttons:["report"]},internal:{status:500,action:"none",message:"Something broke on our side.",buttons:["try_again","report"]}};function isHostedErrorCode(t){return typeof t==="string"&&Object.prototype.hasOwnProperty.call(HOSTED_ERRORS,t)}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.HOSTED_PROTOCOL_VERSION=exports.HOSTED_HEADERS=exports.HOSTED_ERRORS=void 0;exports.isHostedErrorCode=isHostedErrorCode;const HOSTED_PROTOCOL_VERSION=exports.HOSTED_PROTOCOL_VERSION=1;const HOSTED_HEADERS=exports.HOSTED_HEADERS={session:"X-Buoy-Session",ask:"X-Buoy-Ask",round:"X-Buoy-Round",attempt:"X-Buoy-Attempt",protocol:"X-Buoy-Protocol",client:"X-Buoy-Client",requestId:"X-Buoy-Request-Id"};const HOSTED_ERRORS=exports.HOSTED_ERRORS={session_missing:{status:401,action:"sign_in",message:"Sign in to use hosted Ask Buoy.",buttons:["sign_in"]},session_expired:{status:401,action:"refresh_retry",message:"Your sign-in ran out. Sign in again.",buttons:["sign_in"]},session_revoked:{status:401,action:"sign_in",message:"You were signed out. Sign in again.",buttons:["sign_in"]},token_not_allowed:{status:401,action:"sign_in",message:"This sign-in can't use hosted AI. Sign in as a person.",buttons:["sign_in"]},client_too_old:{status:426,action:"none",message:"Update Buoy to keep using hosted Ask Buoy.",buttons:[]},plan_not_eligible:{status:403,action:"none",message:"Hosted Ask Buoy comes with Pro and Business.",buttons:["see_plans"]},not_in_pilot:{status:403,action:"none",message:"Hosted Ask Buoy is in a small test right now.",buttons:[]},team_hosted_off:{status:403,action:"none",message:"Your team admin turned off hosted AI.",buttons:[]},account_frozen:{status:403,action:"none",message:"Your account has a billing problem.",buttons:["billing"]},credits_out:{status:402,action:"none",message:"You used this week's credits. They come back on {date}.",buttons:["own_endpoint"]},member_cap:{status:402,action:"none",message:"You hit your team's limit for you. Ask your admin.",buttons:[]},ask_too_costly:{status:402,action:"none",message:"This ask got too big. Try a smaller ask.",buttons:[]},ask_busy:{status:409,action:"retry_after",message:"Another ask is still running.",buttons:[]},duplicate_request:{status:409,action:"none",message:"That was already sent.",buttons:[]},request_too_large:{status:413,action:"trim_retry",message:"This chat got too long. Start a new chat.",buttons:["new_chat"]},media_not_allowed:{status:400,action:"none",message:"Hosted Ask Buoy can't read images yet.",buttons:[]},bad_request:{status:400,action:"none",message:"Something in the request was wrong.",buttons:["report"]},rate_limited:{status:429,action:"retry_after",message:"Too many asks at once. Trying again.",buttons:[]},hosted_paused:{status:503,action:"none",message:"Hosted AI is paused right now.",buttons:["own_endpoint"]},claude_paused:{status:503,action:"none",message:"Claude is busy right now. Start a new chat to use Luna.",buttons:["new_chat"]},service_down:{status:503,action:"none",message:"Ask Buoy is down right now. We know, and we're working on it. Try again in a few minutes.",buttons:["try_again"]},upstream_busy:{status:503,action:"retry_after",message:"The AI is busy. Trying again.",buttons:[]},upstream_error:{status:502,action:"retry_after",message:"The AI had a problem.",buttons:["try_again","report"]},upstream_refused:{status:403,action:"none",message:"The AI would not answer that.",buttons:["report"]},internal:{status:500,action:"none",message:"Something broke on our side.",buttons:["try_again","report"]}};function isHostedErrorCode(t){return typeof t==="string"&&Object.prototype.hasOwnProperty.call(HOSTED_ERRORS,t)}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _exportNames={CATALOG:true,CATALOG_ACTION_COUNT:true,CATALOG_TOOL_COUNT:true,CATALOG_ACTIONS:true,fromProviderToolName:true,toProviderToolName:true,toProviderTools:true,applyDefaults:true,validateParams:true,projectSnapshot:true,SNAPSHOT_ACTION:true,normalizeParams:true,aliasNote:true,hashQueryKey:true,createAnthropicProvider:true,createOpenAIProvider:true,hostedErrorOf:true,runAgentTurn:true,runGatedAction:true,readTargetDigest:true,digestOf:true,EvidenceStore:true,TokenCalibration:true,buildLiveBlock:true,buildSystemPrompt:true,buildContextDigest:true,buildLiveContext:true,EffectLedger:true,isReversible:true,humanise:true,titleCall:true,toolTitle:true,UI_TOOL_NAME:true,UI_PARAMS:true,uiProviderTool:true,buildUiBlock:true,projectReceipt:true,shallowDiff:true,decide:true,describeCall:true,DEFAULT_REQUIRE_APPROVAL:true,resolveRequireApproval:true,redact:true,registerSelfEndpoint:true,isSelfTraffic:true,stripSelfTraffic:true,idFactory:true,RUN_ID:true,createAskBuoySession:true,resumableHistory:true};Object.defineProperty(exports,"CATALOG",{enumerable:true,get:function(){return _catalog.CATALOG}});Object.defineProperty(exports,"CATALOG_ACTIONS",{enumerable:true,get:function(){return _catalogTypes.CATALOG_ACTIONS}});Object.defineProperty(exports,"CATALOG_ACTION_COUNT",{enumerable:true,get:function(){return _catalog.CATALOG_ACTION_COUNT}});Object.defineProperty(exports,"CATALOG_TOOL_COUNT",{enumerable:true,get:function(){return _catalog.CATALOG_TOOL_COUNT}});Object.defineProperty(exports,"DEFAULT_REQUIRE_APPROVAL",{enumerable:true,get:function(){return _policy.DEFAULT_REQUIRE_APPROVAL}});Object.defineProperty(exports,"EffectLedger",{enumerable:true,get:function(){return _ledger.EffectLedger}});Object.defineProperty(exports,"EvidenceStore",{enumerable:true,get:function(){return _evidence.EvidenceStore}});Object.defineProperty(exports,"RUN_ID",{enumerable:true,get:function(){return _runId.RUN_ID}});Object.defineProperty(exports,"SNAPSHOT_ACTION",{enumerable:true,get:function(){return _snapshotReads.SNAPSHOT_ACTION}});Object.defineProperty(exports,"TokenCalibration",{enumerable:true,get:function(){return _tokenCalibration.TokenCalibration}});Object.defineProperty(exports,"UI_PARAMS",{enumerable:true,get:function(){return _uiTool.UI_PARAMS}});Object.defineProperty(exports,"UI_TOOL_NAME",{enumerable:true,get:function(){return _uiTool.UI_TOOL_NAME}});Object.defineProperty(exports,"aliasNote",{enumerable:true,get:function(){return _normalizeParams.aliasNote}});Object.defineProperty(exports,"applyDefaults",{enumerable:true,get:function(){return _validateParams.applyDefaults}});Object.defineProperty(exports,"buildContextDigest",{enumerable:true,get:function(){return _buildContextPack.buildContextDigest}});Object.defineProperty(exports,"buildLiveBlock",{enumerable:true,get:function(){return _systemPrompt.buildLiveBlock}});Object.defineProperty(exports,"buildLiveContext",{enumerable:true,get:function(){return _buildContextPack.buildLiveContext}});Object.defineProperty(exports,"buildSystemPrompt",{enumerable:true,get:function(){return _systemPrompt.buildSystemPrompt}});Object.defineProperty(exports,"buildUiBlock",{enumerable:true,get:function(){return _uiTool.buildUiBlock}});Object.defineProperty(exports,"createAnthropicProvider",{enumerable:true,get:function(){return _anthropic.createAnthropicProvider}});Object.defineProperty(exports,"createAskBuoySession",{enumerable:true,get:function(){return _session.createAskBuoySession}});Object.defineProperty(exports,"createOpenAIProvider",{enumerable:true,get:function(){return _openai.createOpenAIProvider}});Object.defineProperty(exports,"decide",{enumerable:true,get:function(){return _policy.decide}});Object.defineProperty(exports,"describeCall",{enumerable:true,get:function(){return _policy.describeCall}});Object.defineProperty(exports,"digestOf",{enumerable:true,get:function(){return _runAgentTurn.digestOf}});Object.defineProperty(exports,"fromProviderToolName",{enumerable:true,get:function(){return _toProviderTools.fromProviderToolName}});Object.defineProperty(exports,"hashQueryKey",{enumerable:true,get:function(){return _normalizeParams.hashQueryKey}});Object.defineProperty(exports,"hostedErrorOf",{enumerable:true,get:function(){return _problem.hostedErrorOf}});Object.defineProperty(exports,"humanise",{enumerable:true,get:function(){return _labels.humanise}});Object.defineProperty(exports,"idFactory",{enumerable:true,get:function(){return _runId.idFactory}});Object.defineProperty(exports,"isReversible",{enumerable:true,get:function(){return _ledger.isReversible}});Object.defineProperty(exports,"isSelfTraffic",{enumerable:true,get:function(){return _redact.isSelfTraffic}});Object.defineProperty(exports,"normalizeParams",{enumerable:true,get:function(){return _normalizeParams.normalizeParams}});Object.defineProperty(exports,"projectReceipt",{enumerable:true,get:function(){return _receipts.projectReceipt}});Object.defineProperty(exports,"projectSnapshot",{enumerable:true,get:function(){return _snapshotReads.projectSnapshot}});Object.defineProperty(exports,"readTargetDigest",{enumerable:true,get:function(){return _runAgentTurn.readTargetDigest}});Object.defineProperty(exports,"redact",{enumerable:true,get:function(){return _redact.redact}});Object.defineProperty(exports,"registerSelfEndpoint",{enumerable:true,get:function(){return _redact.registerSelfEndpoint}});Object.defineProperty(exports,"resolveRequireApproval",{enumerable:true,get:function(){return _policy.resolveRequireApproval}});Object.defineProperty(exports,"resumableHistory",{enumerable:true,get:function(){return _session.resumableHistory}});Object.defineProperty(exports,"runAgentTurn",{enumerable:true,get:function(){return _runAgentTurn.runAgentTurn}});Object.defineProperty(exports,"runGatedAction",{enumerable:true,get:function(){return _runAgentTurn.runGatedAction}});Object.defineProperty(exports,"shallowDiff",{enumerable:true,get:function(){return _receipts.shallowDiff}});Object.defineProperty(exports,"stripSelfTraffic",{enumerable:true,get:function(){return _redact.stripSelfTraffic}});Object.defineProperty(exports,"titleCall",{enumerable:true,get:function(){return _labels.titleCall}});Object.defineProperty(exports,"toProviderToolName",{enumerable:true,get:function(){return _toProviderTools.toProviderToolName}});Object.defineProperty(exports,"toProviderTools",{enumerable:true,get:function(){return _toProviderTools.toProviderTools}});Object.defineProperty(exports,"toolTitle",{enumerable:true,get:function(){return _labels.toolTitle}});Object.defineProperty(exports,"uiProviderTool",{enumerable:true,get:function(){return _uiTool.uiProviderTool}});Object.defineProperty(exports,"validateParams",{enumerable:true,get:function(){return _validateParams.validateParams}});var _catalog=require("./catalog/catalog.g");var _catalogTypes=require("./catalog/catalog.types.g");var _toProviderTools=require("./catalog/toProviderTools");var _validateParams=require("./catalog/validateParams");var _snapshotReads=require("./catalog/snapshotReads");var _normalizeParams=require("./catalog/normalizeParams");var _anthropic=require("./providers/anthropic");var _openai=require("./providers/openai");var _protocol=require("./hosted/protocol");Object.keys(_protocol).forEach(function(e){if(e==="default"||e==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,e))return;if(e in exports&&exports[e]===_protocol[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _protocol[e]}})});var _problem=require("./providers/problem");var _runAgentTurn=require("./engine/runAgentTurn");var _evidence=require("./engine/evidence");var _tokenCalibration=require("./engine/tokenCalibration");var _systemPrompt=require("./engine/systemPrompt");var _buildContextPack=require("./context/buildContextPack");var _ledger=require("./effects/ledger");var _labels=require("./policy/labels");var _types=require("./blocks/types");Object.keys(_types).forEach(function(e){if(e==="default"||e==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,e))return;if(e in exports&&exports[e]===_types[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _types[e]}})});var _uiTool=require("./blocks/uiTool");var _receipts=require("./blocks/receipts");var _policy=require("./policy/policy");var _redact=require("./policy/redact");var _runId=require("./blocks/runId");var _session=require("./session");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _exportNames={CATALOG:true,CATALOG_ACTION_COUNT:true,CATALOG_TOOL_COUNT:true,CATALOG_ACTIONS:true,fromProviderToolName:true,toProviderToolName:true,toProviderTools:true,applyDefaults:true,validateParams:true,projectSnapshot:true,SNAPSHOT_ACTION:true,normalizeParams:true,aliasNote:true,hashQueryKey:true,createAnthropicProvider:true,createOpenAIProvider:true,createFallbackProvider:true,hostedErrorOf:true,runAgentTurn:true,runGatedAction:true,readTargetDigest:true,digestOf:true,EvidenceStore:true,TokenCalibration:true,buildLiveBlock:true,buildSystemPrompt:true,buildContextDigest:true,buildLiveContext:true,EffectLedger:true,isReversible:true,humanise:true,titleCall:true,toolTitle:true,UI_TOOL_NAME:true,UI_PARAMS:true,uiProviderTool:true,buildUiBlock:true,projectReceipt:true,shallowDiff:true,decide:true,describeCall:true,DEFAULT_REQUIRE_APPROVAL:true,resolveRequireApproval:true,redact:true,registerSelfEndpoint:true,isSelfTraffic:true,stripSelfTraffic:true,idFactory:true,RUN_ID:true,createAskBuoySession:true,resumableHistory:true};Object.defineProperty(exports,"CATALOG",{enumerable:true,get:function(){return _catalog.CATALOG}});Object.defineProperty(exports,"CATALOG_ACTIONS",{enumerable:true,get:function(){return _catalogTypes.CATALOG_ACTIONS}});Object.defineProperty(exports,"CATALOG_ACTION_COUNT",{enumerable:true,get:function(){return _catalog.CATALOG_ACTION_COUNT}});Object.defineProperty(exports,"CATALOG_TOOL_COUNT",{enumerable:true,get:function(){return _catalog.CATALOG_TOOL_COUNT}});Object.defineProperty(exports,"DEFAULT_REQUIRE_APPROVAL",{enumerable:true,get:function(){return _policy.DEFAULT_REQUIRE_APPROVAL}});Object.defineProperty(exports,"EffectLedger",{enumerable:true,get:function(){return _ledger.EffectLedger}});Object.defineProperty(exports,"EvidenceStore",{enumerable:true,get:function(){return _evidence.EvidenceStore}});Object.defineProperty(exports,"RUN_ID",{enumerable:true,get:function(){return _runId.RUN_ID}});Object.defineProperty(exports,"SNAPSHOT_ACTION",{enumerable:true,get:function(){return _snapshotReads.SNAPSHOT_ACTION}});Object.defineProperty(exports,"TokenCalibration",{enumerable:true,get:function(){return _tokenCalibration.TokenCalibration}});Object.defineProperty(exports,"UI_PARAMS",{enumerable:true,get:function(){return _uiTool.UI_PARAMS}});Object.defineProperty(exports,"UI_TOOL_NAME",{enumerable:true,get:function(){return _uiTool.UI_TOOL_NAME}});Object.defineProperty(exports,"aliasNote",{enumerable:true,get:function(){return _normalizeParams.aliasNote}});Object.defineProperty(exports,"applyDefaults",{enumerable:true,get:function(){return _validateParams.applyDefaults}});Object.defineProperty(exports,"buildContextDigest",{enumerable:true,get:function(){return _buildContextPack.buildContextDigest}});Object.defineProperty(exports,"buildLiveBlock",{enumerable:true,get:function(){return _systemPrompt.buildLiveBlock}});Object.defineProperty(exports,"buildLiveContext",{enumerable:true,get:function(){return _buildContextPack.buildLiveContext}});Object.defineProperty(exports,"buildSystemPrompt",{enumerable:true,get:function(){return _systemPrompt.buildSystemPrompt}});Object.defineProperty(exports,"buildUiBlock",{enumerable:true,get:function(){return _uiTool.buildUiBlock}});Object.defineProperty(exports,"createAnthropicProvider",{enumerable:true,get:function(){return _anthropic.createAnthropicProvider}});Object.defineProperty(exports,"createAskBuoySession",{enumerable:true,get:function(){return _session.createAskBuoySession}});Object.defineProperty(exports,"createFallbackProvider",{enumerable:true,get:function(){return _fallback.createFallbackProvider}});Object.defineProperty(exports,"createOpenAIProvider",{enumerable:true,get:function(){return _openai.createOpenAIProvider}});Object.defineProperty(exports,"decide",{enumerable:true,get:function(){return _policy.decide}});Object.defineProperty(exports,"describeCall",{enumerable:true,get:function(){return _policy.describeCall}});Object.defineProperty(exports,"digestOf",{enumerable:true,get:function(){return _runAgentTurn.digestOf}});Object.defineProperty(exports,"fromProviderToolName",{enumerable:true,get:function(){return _toProviderTools.fromProviderToolName}});Object.defineProperty(exports,"hashQueryKey",{enumerable:true,get:function(){return _normalizeParams.hashQueryKey}});Object.defineProperty(exports,"hostedErrorOf",{enumerable:true,get:function(){return _problem.hostedErrorOf}});Object.defineProperty(exports,"humanise",{enumerable:true,get:function(){return _labels.humanise}});Object.defineProperty(exports,"idFactory",{enumerable:true,get:function(){return _runId.idFactory}});Object.defineProperty(exports,"isReversible",{enumerable:true,get:function(){return _ledger.isReversible}});Object.defineProperty(exports,"isSelfTraffic",{enumerable:true,get:function(){return _redact.isSelfTraffic}});Object.defineProperty(exports,"normalizeParams",{enumerable:true,get:function(){return _normalizeParams.normalizeParams}});Object.defineProperty(exports,"projectReceipt",{enumerable:true,get:function(){return _receipts.projectReceipt}});Object.defineProperty(exports,"projectSnapshot",{enumerable:true,get:function(){return _snapshotReads.projectSnapshot}});Object.defineProperty(exports,"readTargetDigest",{enumerable:true,get:function(){return _runAgentTurn.readTargetDigest}});Object.defineProperty(exports,"redact",{enumerable:true,get:function(){return _redact.redact}});Object.defineProperty(exports,"registerSelfEndpoint",{enumerable:true,get:function(){return _redact.registerSelfEndpoint}});Object.defineProperty(exports,"resolveRequireApproval",{enumerable:true,get:function(){return _policy.resolveRequireApproval}});Object.defineProperty(exports,"resumableHistory",{enumerable:true,get:function(){return _session.resumableHistory}});Object.defineProperty(exports,"runAgentTurn",{enumerable:true,get:function(){return _runAgentTurn.runAgentTurn}});Object.defineProperty(exports,"runGatedAction",{enumerable:true,get:function(){return _runAgentTurn.runGatedAction}});Object.defineProperty(exports,"shallowDiff",{enumerable:true,get:function(){return _receipts.shallowDiff}});Object.defineProperty(exports,"stripSelfTraffic",{enumerable:true,get:function(){return _redact.stripSelfTraffic}});Object.defineProperty(exports,"titleCall",{enumerable:true,get:function(){return _labels.titleCall}});Object.defineProperty(exports,"toProviderToolName",{enumerable:true,get:function(){return _toProviderTools.toProviderToolName}});Object.defineProperty(exports,"toProviderTools",{enumerable:true,get:function(){return _toProviderTools.toProviderTools}});Object.defineProperty(exports,"toolTitle",{enumerable:true,get:function(){return _labels.toolTitle}});Object.defineProperty(exports,"uiProviderTool",{enumerable:true,get:function(){return _uiTool.uiProviderTool}});Object.defineProperty(exports,"validateParams",{enumerable:true,get:function(){return _validateParams.validateParams}});var _catalog=require("./catalog/catalog.g");var _catalogTypes=require("./catalog/catalog.types.g");var _toProviderTools=require("./catalog/toProviderTools");var _validateParams=require("./catalog/validateParams");var _snapshotReads=require("./catalog/snapshotReads");var _normalizeParams=require("./catalog/normalizeParams");var _anthropic=require("./providers/anthropic");var _openai=require("./providers/openai");var _fallback=require("./providers/fallback");var _protocol=require("./hosted/protocol");Object.keys(_protocol).forEach(function(e){if(e==="default"||e==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,e))return;if(e in exports&&exports[e]===_protocol[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _protocol[e]}})});var _problem=require("./providers/problem");var _runAgentTurn=require("./engine/runAgentTurn");var _evidence=require("./engine/evidence");var _tokenCalibration=require("./engine/tokenCalibration");var _systemPrompt=require("./engine/systemPrompt");var _buildContextPack=require("./context/buildContextPack");var _ledger=require("./effects/ledger");var _labels=require("./policy/labels");var _types=require("./blocks/types");Object.keys(_types).forEach(function(e){if(e==="default"||e==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,e))return;if(e in exports&&exports[e]===_types[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _types[e]}})});var _uiTool=require("./blocks/uiTool");var _receipts=require("./blocks/receipts");var _policy=require("./policy/policy");var _redact=require("./policy/redact");var _runId=require("./blocks/runId");var _session=require("./session");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createAnthropicProvider=createAnthropicProvider;var _sse=require("./sse");var _streamTimer=require("./streamTimer");var _transport=require("./transport");var _problem=require("./problem");var _claude=require("../feeds/claude");const DEFAULT_VERSION="2023-06-01";function createAnthropicProvider(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createAnthropicProvider=createAnthropicProvider;var _sse=require("./sse");var _streamTimer=require("./streamTimer");var _transport=require("./transport");var _problem=require("./problem");var _claude=require("../feeds/claude");const DEFAULT_VERSION="2023-06-01";function createAnthropicProvider(r){const g=(0,_transport.createTransport)(r);return{protocol:"anthropic",async*send(p){const o=(0,_streamTimer.createStreamTimer)(p.signal,r);const m={truncated:false};try{const s={"content-type":"application/json","anthropic-version":r.anthropicVersion??DEFAULT_VERSION,...await(r.headers?.(p.meta)??{})};if(r.apiKey&&!s["x-api-key"]&&!s.Authorization){s["x-api-key"]=r.apiKey;s["anthropic-dangerous-direct-browser-access"]="true"}const a=await g.open({headers:s,signal:o.signal,body:JSON.stringify((0,_claude.claudeBody)(p,r))});o.connected();if(a.problem){yield{type:"error",message:a.problem,kind:"provider",problem:a.problemInfo};return}const u=new Map;const d=new Map;let i;let c;let _;let y=false;for await(const k of a.frames({status:m,onFrame:o.activity,signal:o.signal})){let n;try{n=JSON.parse(k.data)}catch{continue}if(r.hosted&&n.buoy&&typeof n.buoy==="object"){yield{type:"meter",frame:n.buoy};continue}const h=n.type??k.event;switch(h){case"content_block_start":{const e=n.content_block;if(e?.type==="thinking"){d.set(n.index,{thinking:e.thinking??"",signature:e.signature??""})}else if(e?.type==="redacted_thinking"){yield{type:"thinking",block:{type:"redacted_thinking",data:e.data}}}else if(e?.type==="tool_use"){u.set(n.index,{id:e.id,name:e.name,json:""})}break}case"content_block_delta":{const e=n.delta;if(e?.type==="text_delta"){yield{type:"text",delta:e.text}}else if(e?.type==="input_json_delta"){const t=u.get(n.index);if(t)t.json+=e.partial_json??""}else if(e?.type==="thinking_delta"){const t=d.get(n.index);if(t)t.thinking+=e.thinking??""}else if(e?.type==="signature_delta"){const t=d.get(n.index);if(t)t.signature+=e.signature??""}break}case"content_block_stop":{const e=d.get(n.index);if(e){d.delete(n.index);yield{type:"thinking",block:{type:"thinking",...e}}}const t=u.get(n.index);if(t){u.delete(n.index);let l={};try{l=t.json?JSON.parse(t.json):{}}catch{yield{type:"error",kind:"provider",message:(0,_sse.unparseableMessage)(t.name,t.json)};break}const b={id:t.id,name:t.name,input:l};yield{type:"tool-call",call:b}}break}case"message_start":{const e=n.message;if(typeof e?.model==="string"&&e.model)_=e.model;const t=e?.usage;if(t){c={input:t.input_tokens??0,output:t.output_tokens??0,...t.cache_read_input_tokens!==void 0?{cacheRead:t.cache_read_input_tokens}:{},...t.cache_creation_input_tokens!==void 0?{cacheWrite:t.cache_creation_input_tokens}:{}}}break}case"message_delta":{const e=n.delta;if(e?.stop_reason)i=e.stop_reason;const t=n.usage;if(t){c={...c,input:t.input_tokens??c?.input??0,output:t.output_tokens??0}}break}case"error":{const e=n.error;const t=e?.message??"Provider error";const l=r.hosted?(0,_problem.hostedErrorOf)(e):void 0;yield{type:"error",message:t,kind:"provider",problem:(0,_problem.classifyProblem)({type:typeof e?.type==="string"?e.type:void 0,message:t,...l?{hosted:l}:{}})};return}case"message_stop":y=true;break;default:break}if(y)break}const f=y||i!==void 0;if(!f){yield{type:"error",message:(0,_sse.truncatedMessage)(m.truncated),kind:"truncated"};return}yield{type:"done",outcome:i==="max_tokens"?"output-limited":i==="refusal"?"refused":i==="model_context_window_exceeded"?"context-limited":"completed",stopReason:i,usage:c,model:_}}catch(s){if(p.signal?.aborted)throw s;const a=o.message();if(a){yield{type:"error",message:a,kind:"timeout"};return}throw s}finally{o.dispose()}}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createFallbackProvider=createFallbackProvider;var _protocol=require("../hosted/protocol");var _problem=require("./problem");const MODEL_DOWN=new Set(["claude_paused","hosted_paused","upstream_error","upstream_busy","bad_request","internal"]);function wantsFallback(r){if(r.type!=="error")return false;const t=r.problem?.hosted?.code;if(t)return MODEL_DOWN.has(t);return r.kind!=="provider"||r.problem?.kind==="throttled"||r.problem?.kind==="other"}function serviceDown(r){const t=_protocol.HOSTED_ERRORS.service_down;const a={code:"service_down",message:t.message,request_id:r.problem?.hosted?.request_id??null,action:t.action,retry_after_ms:null,reset_at:null,help_url:null};return{type:"error",kind:"provider",message:t.message,problem:(0,_problem.classifyProblem)({message:t.message,hosted:a})}}function createFallbackProvider(r,t,a){let s=false;async function*i(l,o){let n=false;try{for await(const e of l.provider.send({...o,model:l.model})){if(!n&&wantsFallback(e))return e;if(e.type==="text"||e.type==="tool-call"||e.type==="thinking")n=true;yield e}}catch(e){if(o.signal?.aborted||n)throw e;return{type:"error",kind:"timeout",message:e instanceof Error?e.message:String(e)}}return null}return{protocol:r.provider.protocol,get onFallback(){return s},reset(){if(s)a?.("first");s=false},async*send(l){if(!s){const n=yield*i(r,l);if(!n)return;s=true;a?.("second")}const o=yield*i(t,l);if(!o)return;s=false;yield o.type==="error"?serviceDown(o):o}}}
|
package/lib/commonjs/session.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"compressConsumed",{enumerable:true,get:function(){return _historyBudget.compressConsumed}});exports.createAskBuoySession=createAskBuoySession;exports.resumableHistory=resumableHistory;Object.defineProperty(exports,"trimHistory",{enumerable:true,get:function(){return _historyBudget.trimHistory}});Object.defineProperty(exports,"trimHistoryReport",{enumerable:true,get:function(){return _historyBudget.trimHistoryReport}});var _feeds=require("./feeds");var _catalog=require("./catalog/catalog.g");var _buildContextPack=require("./context/buildContextPack");var _runAgentTurn=require("./engine/runAgentTurn");var _systemPrompt=require("./engine/systemPrompt");var _ledger=require("./effects/ledger");var _evidence=require("./engine/evidence");var _tokenCalibration=require("./engine/tokenCalibration");var _historyBudget=require("./engine/historyBudget");var _anthropic=require("./providers/anthropic");var _openai=require("./providers/openai");var _policy=require("./policy/policy");var _redact=require("./policy/redact");function resumableHistory(e){let r=e.length;while(r>0){const s=e[r-1];if(s.role==="assistant"&&!s.toolCalls?.length)break;r-=1}return e.slice(0,r).map(s=>s.role==="assistant"&&s.thinking?{...s,thinking:void 0}:s)}function createAskBuoySession(e){const r=(0,_feeds.selectFeed)(e.provider?.protocol??e.protocol,e.feedOptions);e={...e,feedOptions:r.options};let s=0;const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"compressConsumed",{enumerable:true,get:function(){return _historyBudget.compressConsumed}});exports.createAskBuoySession=createAskBuoySession;exports.resumableHistory=resumableHistory;Object.defineProperty(exports,"trimHistory",{enumerable:true,get:function(){return _historyBudget.trimHistory}});Object.defineProperty(exports,"trimHistoryReport",{enumerable:true,get:function(){return _historyBudget.trimHistoryReport}});var _feeds=require("./feeds");var _catalog=require("./catalog/catalog.g");var _buildContextPack=require("./context/buildContextPack");var _runAgentTurn=require("./engine/runAgentTurn");var _systemPrompt=require("./engine/systemPrompt");var _ledger=require("./effects/ledger");var _evidence=require("./engine/evidence");var _tokenCalibration=require("./engine/tokenCalibration");var _historyBudget=require("./engine/historyBudget");var _anthropic=require("./providers/anthropic");var _openai=require("./providers/openai");var _fallback=require("./providers/fallback");var _policy=require("./policy/policy");var _redact=require("./policy/redact");function resumableHistory(e){let r=e.length;while(r>0){const s=e[r-1];if(s.role==="assistant"&&!s.toolCalls?.length)break;r-=1}return e.slice(0,r).map(s=>s.role==="assistant"&&s.thinking?{...s,thinking:void 0}:s)}function createAskBuoySession(e){const r=(0,_feeds.selectFeed)(e.provider?.protocol??e.protocol,e.feedOptions);e={...e,feedOptions:r.options};let s=0;const T=e.catalog??_catalog.CATALOG;const l=new _ledger.EffectLedger;const A=e.policy??{};let a=[];const g=new Set;const O=new _evidence.EvidenceStore;const c=new _tokenCalibration.TokenCalibration;let u;let q=false;let m=false;const v=new Set;let y=false;let b=0;let k=0;let f={};let P={};(0,_redact.registerSelfEndpoint)(e.endpoint);const S=(t,o)=>t==="openai"?(0,_openai.createOpenAIProvider)(o):(0,_anthropic.createAnthropicProvider)(o);let w=null;if(!e.provider&&e.fallback){const t=e.fallback;(0,_redact.registerSelfEndpoint)(t.endpoint);const o={...e,endpoint:t.endpoint,model:t.model,feedOptions:(0,_feeds.selectFeed)(t.protocol).options};w=(0,_fallback.createFallbackProvider)({provider:S(e.protocol,e),model:e.model},{provider:S(t.protocol,o),model:t.model},h=>e.onModelSwitch?.(h==="second"?"fallback":"primary"))}const $=e.provider??w??S(e.protocol,e);let d=e.availableActions;let i=Object.keys(d);const n={...A};function j(){for(const t of Object.keys(n))delete n[t];Object.assign(n,A);if(m){n.requireApproval=[];n.requireApprovalFor=[]}if(y)n.readOnly=true}function E(){return n}function B(){u=(0,_systemPrompt.buildSystemPrompt)({catalog:T,context:{...e.context,digest:{...f,...e.context?.digest}},isRelease:e.isRelease,readOnly:n.readOnly??false,readOnlySource:A.readOnly?"app":y?"device":void 0,requireApproval:(0,_policy.resolveRequireApproval)(n),approvalsBypassed:m,appName:e.appName,platform:e.platform,availableToolIds:i})}async function H(){if(q)return;q=true;f={};try{f=await(0,_buildContextPack.buildContextDigest)({dispatch:e.dispatch,readSnapshot:e.readSnapshot,availableToolIds:i,availableActions:d})}catch{}P={};for(const t of f.zustandStores??[]){const o=t;if(o?.persistsTo&&o.name)P[o.persistsTo]=o.name}B()}return{ledger:l,evidence:O,calibration:c,trustedActions:()=>[...v],untrust:t=>{v.delete(t)},get messages(){return a},prime:H,setAvailableActions(t){d=t;i=Object.keys(t)},setApprovalBypass(t){if(m===t)return;m=t;j();if(u)B()},setReadOnly(t){if(y===t)return;y=t;j();if(u)B()},restore(t){if(a.length>0)return;const o=(0,_historyBudget.trimHistoryReport)(resumableHistory(t),c.charsPerToken,l.liveCallIds());a=o.messages;b=o.droppedRounds},async*send(t,o){const h=k;await H();let R;try{R=await(0,_buildContextPack.buildLiveContext)({dispatch:e.dispatch,readSnapshot:e.readSnapshot,availableToolIds:i,availableActions:d})}catch{R=void 0}if(h!==k){yield{type:"done",stopReason:"superseded"};return}const I=(0,_systemPrompt.buildLiveBlock)(R,l.list().map(p=>({label:`${p.toolId}.${p.action}${p.effect.label?` \u2014 ${p.effect.label}`:""}`,undone:p.undoneAt!==void 0})));const F={role:"user",text:t,...r.name==="claude"?{turnId:`turn-${++s}`}:{},...r.options.liveBlock&&r.options.liveBlock!=="system-tail"?{liveBlock:{placement:r.options.liveBlock,text:I}}:{}};const _=a[a.length-1];const M=_?.role==="user"&&(_.systemNotice||_.liveBlock?.placement==="system-msg")?[{role:"assistant",text:"[Buoy: The prior turn stopped before an answer.]"}]:[];const C=(0,_historyBudget.trimHistoryReport)([...a,...M,F],c.charsPerToken,l.liveCallIds());const G=C.messages;const L=C.droppedRounds+b;b=0;if(L>0)yield{type:"history-trimmed",droppedRounds:L,droppedPinned:C.droppedPinned};const N=(0,_runAgentTurn.runAgentTurn)({provider:$,catalog:T,messages:G,system:u,systemVolatile:r.options.liveBlock&&r.options.liveBlock!=="system-tail"?void 0:I,feedOptions:r.options,model:e.model,maxTokens:r.options.maxTokens??e.maxTokens??4096,dispatch:e.dispatch,readSnapshot:e.readSnapshot,storeKeyOwners:P,ledger:l,policy:E(),isRelease:e.isRelease,availableToolIds:i,availableActions:d,requestApproval:e.requestApproval,seenUrls:g,evidence:O,calibration:c,trusted:v,procedures:(0,_systemPrompt.listableProcedures)(e.context?.procedures,i),signal:o});let x=await N.next();while(!x.done){yield x.value;x=await N.next()}if(h===k)a=x.value},reset(){k+=1;w?.reset();a=[];b=0;l.clear();g.clear();O.clear();v.clear();q=false}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export const HOSTED_PROTOCOL_VERSION=1;export const HOSTED_HEADERS={session:"X-Buoy-Session",ask:"X-Buoy-Ask",round:"X-Buoy-Round",attempt:"X-Buoy-Attempt",protocol:"X-Buoy-Protocol",client:"X-Buoy-Client",requestId:"X-Buoy-Request-Id"};export const HOSTED_ERRORS={session_missing:{status:401,action:"sign_in",message:"Sign in to use hosted Ask Buoy.",buttons:["sign_in"]},session_expired:{status:401,action:"refresh_retry",message:"Your sign-in ran out. Sign in again.",buttons:["sign_in"]},session_revoked:{status:401,action:"sign_in",message:"You were signed out. Sign in again.",buttons:["sign_in"]},token_not_allowed:{status:401,action:"sign_in",message:"This sign-in can't use hosted AI. Sign in as a person.",buttons:["sign_in"]},client_too_old:{status:426,action:"none",message:"Update Buoy to keep using hosted Ask Buoy.",buttons:[]},plan_not_eligible:{status:403,action:"none",message:"Hosted Ask Buoy comes with Pro and Business.",buttons:["see_plans"]},not_in_pilot:{status:403,action:"none",message:"Hosted Ask Buoy is in a small test right now.",buttons:[]},team_hosted_off:{status:403,action:"none",message:"Your team admin turned off hosted AI.",buttons:[]},account_frozen:{status:403,action:"none",message:"Your account has a billing problem.",buttons:["billing"]},credits_out:{status:402,action:"none",message:"You used this week's credits. They come back on {date}.",buttons:["own_endpoint"]},member_cap:{status:402,action:"none",message:"You hit your team's limit for you. Ask your admin.",buttons:[]},ask_too_costly:{status:402,action:"none",message:"This ask got too big. Try a smaller ask.",buttons:[]},ask_busy:{status:409,action:"retry_after",message:"Another ask is still running.",buttons:[]},duplicate_request:{status:409,action:"none",message:"That was already sent.",buttons:[]},request_too_large:{status:413,action:"trim_retry",message:"This chat got too long. Start a new chat.",buttons:["new_chat"]},media_not_allowed:{status:400,action:"none",message:"Hosted Ask Buoy can't read images yet.",buttons:[]},bad_request:{status:400,action:"none",message:"Something in the request was wrong.",buttons:["report"]},rate_limited:{status:429,action:"retry_after",message:"Too many asks at once. Trying again.",buttons:[]},hosted_paused:{status:503,action:"none",message:"Hosted AI is paused right now.",buttons:["own_endpoint"]},upstream_busy:{status:503,action:"retry_after",message:"The AI is busy. Trying again.",buttons:[]},upstream_error:{status:502,action:"retry_after",message:"The AI had a problem.",buttons:["try_again","report"]},upstream_refused:{status:403,action:"none",message:"The AI would not answer that.",buttons:["report"]},internal:{status:500,action:"none",message:"Something broke on our side.",buttons:["try_again","report"]}};export function isHostedErrorCode(t){return typeof t==="string"&&Object.prototype.hasOwnProperty.call(HOSTED_ERRORS,t)}
|
|
1
|
+
"use strict";export const HOSTED_PROTOCOL_VERSION=1;export const HOSTED_HEADERS={session:"X-Buoy-Session",ask:"X-Buoy-Ask",round:"X-Buoy-Round",attempt:"X-Buoy-Attempt",protocol:"X-Buoy-Protocol",client:"X-Buoy-Client",requestId:"X-Buoy-Request-Id"};export const HOSTED_ERRORS={session_missing:{status:401,action:"sign_in",message:"Sign in to use hosted Ask Buoy.",buttons:["sign_in"]},session_expired:{status:401,action:"refresh_retry",message:"Your sign-in ran out. Sign in again.",buttons:["sign_in"]},session_revoked:{status:401,action:"sign_in",message:"You were signed out. Sign in again.",buttons:["sign_in"]},token_not_allowed:{status:401,action:"sign_in",message:"This sign-in can't use hosted AI. Sign in as a person.",buttons:["sign_in"]},client_too_old:{status:426,action:"none",message:"Update Buoy to keep using hosted Ask Buoy.",buttons:[]},plan_not_eligible:{status:403,action:"none",message:"Hosted Ask Buoy comes with Pro and Business.",buttons:["see_plans"]},not_in_pilot:{status:403,action:"none",message:"Hosted Ask Buoy is in a small test right now.",buttons:[]},team_hosted_off:{status:403,action:"none",message:"Your team admin turned off hosted AI.",buttons:[]},account_frozen:{status:403,action:"none",message:"Your account has a billing problem.",buttons:["billing"]},credits_out:{status:402,action:"none",message:"You used this week's credits. They come back on {date}.",buttons:["own_endpoint"]},member_cap:{status:402,action:"none",message:"You hit your team's limit for you. Ask your admin.",buttons:[]},ask_too_costly:{status:402,action:"none",message:"This ask got too big. Try a smaller ask.",buttons:[]},ask_busy:{status:409,action:"retry_after",message:"Another ask is still running.",buttons:[]},duplicate_request:{status:409,action:"none",message:"That was already sent.",buttons:[]},request_too_large:{status:413,action:"trim_retry",message:"This chat got too long. Start a new chat.",buttons:["new_chat"]},media_not_allowed:{status:400,action:"none",message:"Hosted Ask Buoy can't read images yet.",buttons:[]},bad_request:{status:400,action:"none",message:"Something in the request was wrong.",buttons:["report"]},rate_limited:{status:429,action:"retry_after",message:"Too many asks at once. Trying again.",buttons:[]},hosted_paused:{status:503,action:"none",message:"Hosted AI is paused right now.",buttons:["own_endpoint"]},claude_paused:{status:503,action:"none",message:"Claude is busy right now. Start a new chat to use Luna.",buttons:["new_chat"]},service_down:{status:503,action:"none",message:"Ask Buoy is down right now. We know, and we're working on it. Try again in a few minutes.",buttons:["try_again"]},upstream_busy:{status:503,action:"retry_after",message:"The AI is busy. Trying again.",buttons:[]},upstream_error:{status:502,action:"retry_after",message:"The AI had a problem.",buttons:["try_again","report"]},upstream_refused:{status:403,action:"none",message:"The AI would not answer that.",buttons:["report"]},internal:{status:500,action:"none",message:"Something broke on our side.",buttons:["try_again","report"]}};export function isHostedErrorCode(t){return typeof t==="string"&&Object.prototype.hasOwnProperty.call(HOSTED_ERRORS,t)}
|
package/lib/module/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export{CATALOG,CATALOG_ACTION_COUNT,CATALOG_TOOL_COUNT}from"./catalog/catalog.g";export{CATALOG_ACTIONS}from"./catalog/catalog.types.g";export{fromProviderToolName,toProviderToolName,toProviderTools}from"./catalog/toProviderTools";export{applyDefaults,validateParams}from"./catalog/validateParams";export{projectSnapshot,SNAPSHOT_ACTION}from"./catalog/snapshotReads";export{normalizeParams,aliasNote,hashQueryKey}from"./catalog/normalizeParams";export{createAnthropicProvider}from"./providers/anthropic";export{createOpenAIProvider}from"./providers/openai";export*from"./hosted/protocol";export{hostedErrorOf}from"./providers/problem";export{runAgentTurn,runGatedAction,readTargetDigest,digestOf}from"./engine/runAgentTurn";export{EvidenceStore}from"./engine/evidence";export{TokenCalibration}from"./engine/tokenCalibration";export{buildLiveBlock,buildSystemPrompt}from"./engine/systemPrompt";export{buildContextDigest,buildLiveContext}from"./context/buildContextPack";export{EffectLedger,isReversible}from"./effects/ledger";export{humanise,titleCall,toolTitle}from"./policy/labels";export*from"./blocks/types";export{UI_TOOL_NAME,UI_PARAMS,uiProviderTool,buildUiBlock}from"./blocks/uiTool";export{projectReceipt,shallowDiff}from"./blocks/receipts";export{decide,describeCall,DEFAULT_REQUIRE_APPROVAL,resolveRequireApproval}from"./policy/policy";export{redact,registerSelfEndpoint,isSelfTraffic,stripSelfTraffic}from"./policy/redact";export{idFactory,RUN_ID}from"./blocks/runId";export{createAskBuoySession,resumableHistory}from"./session";
|
|
1
|
+
"use strict";export{CATALOG,CATALOG_ACTION_COUNT,CATALOG_TOOL_COUNT}from"./catalog/catalog.g";export{CATALOG_ACTIONS}from"./catalog/catalog.types.g";export{fromProviderToolName,toProviderToolName,toProviderTools}from"./catalog/toProviderTools";export{applyDefaults,validateParams}from"./catalog/validateParams";export{projectSnapshot,SNAPSHOT_ACTION}from"./catalog/snapshotReads";export{normalizeParams,aliasNote,hashQueryKey}from"./catalog/normalizeParams";export{createAnthropicProvider}from"./providers/anthropic";export{createOpenAIProvider}from"./providers/openai";export{createFallbackProvider}from"./providers/fallback";export*from"./hosted/protocol";export{hostedErrorOf}from"./providers/problem";export{runAgentTurn,runGatedAction,readTargetDigest,digestOf}from"./engine/runAgentTurn";export{EvidenceStore}from"./engine/evidence";export{TokenCalibration}from"./engine/tokenCalibration";export{buildLiveBlock,buildSystemPrompt}from"./engine/systemPrompt";export{buildContextDigest,buildLiveContext}from"./context/buildContextPack";export{EffectLedger,isReversible}from"./effects/ledger";export{humanise,titleCall,toolTitle}from"./policy/labels";export*from"./blocks/types";export{UI_TOOL_NAME,UI_PARAMS,uiProviderTool,buildUiBlock}from"./blocks/uiTool";export{projectReceipt,shallowDiff}from"./blocks/receipts";export{decide,describeCall,DEFAULT_REQUIRE_APPROVAL,resolveRequireApproval}from"./policy/policy";export{redact,registerSelfEndpoint,isSelfTraffic,stripSelfTraffic}from"./policy/redact";export{idFactory,RUN_ID}from"./blocks/runId";export{createAskBuoySession,resumableHistory}from"./session";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{truncatedMessage as x,unparseableMessage as w}from"./sse";import{createStreamTimer as
|
|
1
|
+
"use strict";import{truncatedMessage as x,unparseableMessage as w}from"./sse";import{createStreamTimer as j}from"./streamTimer";import{createTransport as v}from"./transport";import{classifyProblem as S,hostedErrorOf as O}from"./problem";const M="2023-06-01";import{claudeBody as N}from"../feeds/claude";export function createAnthropicProvider(o){const g=v(o);return{protocol:"anthropic",async*send(l){const a=j(l.signal,o);const m={truncated:false};try{const i={"content-type":"application/json","anthropic-version":o.anthropicVersion??M,...await(o.headers?.(l.meta)??{})};if(o.apiKey&&!i["x-api-key"]&&!i.Authorization){i["x-api-key"]=o.apiKey;i["anthropic-dangerous-direct-browser-access"]="true"}const s=await g.open({headers:i,signal:a.signal,body:JSON.stringify(N(l,o))});a.connected();if(s.problem){yield{type:"error",message:s.problem,kind:"provider",problem:s.problemInfo};return}const u=new Map;const d=new Map;let r;let c;let k;let y=false;for await(const f of s.frames({status:m,onFrame:a.activity,signal:a.signal})){let n;try{n=JSON.parse(f.data)}catch{continue}if(o.hosted&&n.buoy&&typeof n.buoy==="object"){yield{type:"meter",frame:n.buoy};continue}const h=n.type??f.event;switch(h){case"content_block_start":{const e=n.content_block;if(e?.type==="thinking"){d.set(n.index,{thinking:e.thinking??"",signature:e.signature??""})}else if(e?.type==="redacted_thinking"){yield{type:"thinking",block:{type:"redacted_thinking",data:e.data}}}else if(e?.type==="tool_use"){u.set(n.index,{id:e.id,name:e.name,json:""})}break}case"content_block_delta":{const e=n.delta;if(e?.type==="text_delta"){yield{type:"text",delta:e.text}}else if(e?.type==="input_json_delta"){const t=u.get(n.index);if(t)t.json+=e.partial_json??""}else if(e?.type==="thinking_delta"){const t=d.get(n.index);if(t)t.thinking+=e.thinking??""}else if(e?.type==="signature_delta"){const t=d.get(n.index);if(t)t.signature+=e.signature??""}break}case"content_block_stop":{const e=d.get(n.index);if(e){d.delete(n.index);yield{type:"thinking",block:{type:"thinking",...e}}}const t=u.get(n.index);if(t){u.delete(n.index);let p={};try{p=t.json?JSON.parse(t.json):{}}catch{yield{type:"error",kind:"provider",message:w(t.name,t.json)};break}const b={id:t.id,name:t.name,input:p};yield{type:"tool-call",call:b}}break}case"message_start":{const e=n.message;if(typeof e?.model==="string"&&e.model)k=e.model;const t=e?.usage;if(t){c={input:t.input_tokens??0,output:t.output_tokens??0,...t.cache_read_input_tokens!==void 0?{cacheRead:t.cache_read_input_tokens}:{},...t.cache_creation_input_tokens!==void 0?{cacheWrite:t.cache_creation_input_tokens}:{}}}break}case"message_delta":{const e=n.delta;if(e?.stop_reason)r=e.stop_reason;const t=n.usage;if(t){c={...c,input:t.input_tokens??c?.input??0,output:t.output_tokens??0}}break}case"error":{const e=n.error;const t=e?.message??"Provider error";const p=o.hosted?O(e):void 0;yield{type:"error",message:t,kind:"provider",problem:S({type:typeof e?.type==="string"?e.type:void 0,message:t,...p?{hosted:p}:{}})};return}case"message_stop":y=true;break;default:break}if(y)break}const _=y||r!==void 0;if(!_){yield{type:"error",message:x(m.truncated),kind:"truncated"};return}yield{type:"done",outcome:r==="max_tokens"?"output-limited":r==="refusal"?"refused":r==="model_context_window_exceeded"?"context-limited":"completed",stopReason:r,usage:c,model:k}}catch(i){if(l.signal?.aborted)throw i;const s=a.message();if(s){yield{type:"error",message:s,kind:"timeout"};return}throw i}finally{a.dispose()}}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{HOSTED_ERRORS as d}from"../hosted/protocol";import{classifyProblem as c}from"./problem";const u=new Set(["claude_paused","hosted_paused","upstream_error","upstream_busy","bad_request","internal"]);function f(r){if(r.type!=="error")return false;const t=r.problem?.hosted?.code;if(t)return u.has(t);return r.kind!=="provider"||r.problem?.kind==="throttled"||r.problem?.kind==="other"}function p(r){const t=d.service_down;const i={code:"service_down",message:t.message,request_id:r.problem?.hosted?.request_id??null,action:t.action,retry_after_ms:null,reset_at:null,help_url:null};return{type:"error",kind:"provider",message:t.message,problem:c({message:t.message,hosted:i})}}export function createFallbackProvider(r,t,i){let s=false;async function*a(n,o){let l=false;try{for await(const e of n.provider.send({...o,model:n.model})){if(!l&&f(e))return e;if(e.type==="text"||e.type==="tool-call"||e.type==="thinking")l=true;yield e}}catch(e){if(o.signal?.aborted||l)throw e;return{type:"error",kind:"timeout",message:e instanceof Error?e.message:String(e)}}return null}return{protocol:r.provider.protocol,get onFallback(){return s},reset(){if(s)i?.("first");s=false},async*send(n){if(!s){const l=yield*a(r,n);if(!l)return;s=true;i?.("second")}const o=yield*a(t,n);if(!o)return;s=false;yield o.type==="error"?p(o):o}}}
|
package/lib/module/session.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{selectFeed as
|
|
1
|
+
"use strict";import{selectFeed as G}from"./feeds";import{CATALOG as J}from"./catalog/catalog.g";import{buildContextDigest as Q,buildLiveContext as W}from"./context/buildContextPack";import{runAgentTurn as X}from"./engine/runAgentTurn";import{buildLiveBlock as Y,buildSystemPrompt as Z,listableProcedures as _}from"./engine/systemPrompt";import{EffectLedger as g}from"./effects/ledger";import{EvidenceStore as ee}from"./engine/evidence";import{TokenCalibration as te}from"./engine/tokenCalibration";import{compressConsumed as oe,trimHistory as re,trimHistoryReport as I}from"./engine/historyBudget";import{createAnthropicProvider as se}from"./providers/anthropic";import{createOpenAIProvider as le}from"./providers/openai";import{createFallbackProvider as ae}from"./providers/fallback";import{resolveRequireApproval as ne}from"./policy/policy";import{registerSelfEndpoint as M}from"./policy/redact";export{oe as compressConsumed,re as trimHistory,I as trimHistoryReport};export function resumableHistory(e){let o=e.length;while(o>0){const s=e[o-1];if(s.role==="assistant"&&!s.toolCalls?.length)break;o-=1}return e.slice(0,o).map(s=>s.role==="assistant"&&s.thinking?{...s,thinking:void 0}:s)}export function createAskBuoySession(e){const o=G(e.provider?.protocol??e.protocol,e.feedOptions);e={...e,feedOptions:o.options};let s=0;const L=e.catalog??J;const n=new g;const O=e.policy??{};let a=[];const N=new Set;const w=new ee;const c=new te;let m;let x=false;let u=false;const v=new Set;let y=false;let f=0;let k=0;let b={};let S={};M(e.endpoint);const B=(t,r)=>t==="openai"?le(r):se(r);let R=null;if(!e.provider&&e.fallback){const t=e.fallback;M(t.endpoint);const r={...e,endpoint:t.endpoint,model:t.model,feedOptions:G(t.protocol).options};R=ae({provider:B(e.protocol,e),model:e.model},{provider:B(t.protocol,r),model:t.model},h=>e.onModelSwitch?.(h==="second"?"fallback":"primary"))}const z=e.provider??R??B(e.protocol,e);let p=e.availableActions;let i=Object.keys(p);const l={...O};function $(){for(const t of Object.keys(l))delete l[t];Object.assign(l,O);if(u){l.requireApproval=[];l.requireApprovalFor=[]}if(y)l.readOnly=true}function D(){return l}function P(){m=Z({catalog:L,context:{...e.context,digest:{...b,...e.context?.digest}},isRelease:e.isRelease,readOnly:l.readOnly??false,readOnlySource:O.readOnly?"app":y?"device":void 0,requireApproval:ne(l),approvalsBypassed:u,appName:e.appName,platform:e.platform,availableToolIds:i})}async function j(){if(x)return;x=true;b={};try{b=await Q({dispatch:e.dispatch,readSnapshot:e.readSnapshot,availableToolIds:i,availableActions:p})}catch{}S={};for(const t of b.zustandStores??[]){const r=t;if(r?.persistsTo&&r.name)S[r.persistsTo]=r.name}P()}return{ledger:n,evidence:w,calibration:c,trustedActions:()=>[...v],untrust:t=>{v.delete(t)},get messages(){return a},prime:j,setAvailableActions(t){p=t;i=Object.keys(t)},setApprovalBypass(t){if(u===t)return;u=t;$();if(m)P()},setReadOnly(t){if(y===t)return;y=t;$();if(m)P()},restore(t){if(a.length>0)return;const r=I(resumableHistory(t),c.charsPerToken,n.liveCallIds());a=r.messages;f=r.droppedRounds},async*send(t,r){const h=k;await j();let T;try{T=await W({dispatch:e.dispatch,readSnapshot:e.readSnapshot,availableToolIds:i,availableActions:p})}catch{T=void 0}if(h!==k){yield{type:"done",stopReason:"superseded"};return}const E=Y(T,n.list().map(d=>({label:`${d.toolId}.${d.action}${d.effect.label?` \u2014 ${d.effect.label}`:""}`,undone:d.undoneAt!==void 0})));const K={role:"user",text:t,...o.name==="claude"?{turnId:`turn-${++s}`}:{},...o.options.liveBlock&&o.options.liveBlock!=="system-tail"?{liveBlock:{placement:o.options.liveBlock,text:E}}:{}};const C=a[a.length-1];const U=C?.role==="user"&&(C.systemNotice||C.liveBlock?.placement==="system-msg")?[{role:"assistant",text:"[Buoy: The prior turn stopped before an answer.]"}]:[];const q=I([...a,...U,K],c.charsPerToken,n.liveCallIds());const V=q.messages;const F=q.droppedRounds+f;f=0;if(F>0)yield{type:"history-trimmed",droppedRounds:F,droppedPinned:q.droppedPinned};const H=X({provider:z,catalog:L,messages:V,system:m,systemVolatile:o.options.liveBlock&&o.options.liveBlock!=="system-tail"?void 0:E,feedOptions:o.options,model:e.model,maxTokens:o.options.maxTokens??e.maxTokens??4096,dispatch:e.dispatch,readSnapshot:e.readSnapshot,storeKeyOwners:S,ledger:n,policy:D(),isRelease:e.isRelease,availableToolIds:i,availableActions:p,requestApproval:e.requestApproval,seenUrls:N,evidence:w,calibration:c,trusted:v,procedures:_(e.context?.procedures,i),signal:r});let A=await H.next();while(!A.done){yield A.value;A=await H.next()}if(h===k)a=A.value},reset(){k+=1;R?.reset();a=[];f=0;n.clear();N.clear();w.clear();v.clear();x=false}}}
|
|
@@ -164,6 +164,20 @@ export declare const HOSTED_ERRORS: {
|
|
|
164
164
|
readonly message: "Hosted AI is paused right now.";
|
|
165
165
|
readonly buttons: readonly ["own_endpoint"];
|
|
166
166
|
};
|
|
167
|
+
/** Claude's prepaid budget is used up for now. The app's fallback sends the round to Luna, so this shows only without one. */
|
|
168
|
+
readonly claude_paused: {
|
|
169
|
+
readonly status: 503;
|
|
170
|
+
readonly action: "none";
|
|
171
|
+
readonly message: "Claude is busy right now. Start a new chat to use Luna.";
|
|
172
|
+
readonly buttons: readonly ["new_chat"];
|
|
173
|
+
};
|
|
174
|
+
/** Both models are down. Never sent by the gateway: the app's fallback makes it (providers/fallback.ts). */
|
|
175
|
+
readonly service_down: {
|
|
176
|
+
readonly status: 503;
|
|
177
|
+
readonly action: "none";
|
|
178
|
+
readonly message: "Ask Buoy is down right now. We know, and we're working on it. Try again in a few minutes.";
|
|
179
|
+
readonly buttons: readonly ["try_again"];
|
|
180
|
+
};
|
|
167
181
|
readonly upstream_busy: {
|
|
168
182
|
readonly status: 503;
|
|
169
183
|
readonly action: "retry_after";
|
|
@@ -16,6 +16,7 @@ export { projectSnapshot, SNAPSHOT_ACTION } from "./catalog/snapshotReads";
|
|
|
16
16
|
export { normalizeParams, aliasNote, hashQueryKey } from "./catalog/normalizeParams";
|
|
17
17
|
export { createAnthropicProvider } from "./providers/anthropic";
|
|
18
18
|
export { createOpenAIProvider } from "./providers/openai";
|
|
19
|
+
export { createFallbackProvider, type FallbackLane, type FallbackProvider } from "./providers/fallback";
|
|
19
20
|
export * from "./hosted/protocol";
|
|
20
21
|
export { hostedErrorOf } from "./providers/problem";
|
|
21
22
|
export type { AgentMessage, Provider, ProviderConfig, FeedOptions, ProviderRequest, RequestMeta, StreamEvent, ThinkingBlock, TokenUsage, ToolCall, ToolResult, } from "./providers/types";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Provider } from "./types";
|
|
2
|
+
export interface FallbackLane {
|
|
3
|
+
provider: Provider;
|
|
4
|
+
/** The model id this lane's requests carry. */
|
|
5
|
+
model: string;
|
|
6
|
+
}
|
|
7
|
+
export interface FallbackProvider extends Provider {
|
|
8
|
+
/** Back to the first lane: a new conversation tries the picked model again. */
|
|
9
|
+
reset(): void;
|
|
10
|
+
/** Which lane answers now. */
|
|
11
|
+
readonly onFallback: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function createFallbackProvider(first: FallbackLane, second: FallbackLane, onSwitch?: (to: "second" | "first") => void): FallbackProvider;
|
|
14
|
+
//# sourceMappingURL=fallback.d.ts.map
|
|
@@ -35,6 +35,17 @@ export interface AskBuoySessionConfig extends ProviderConfig {
|
|
|
35
35
|
* from `protocol` and the ProviderConfig fields.
|
|
36
36
|
*/
|
|
37
37
|
provider?: Provider;
|
|
38
|
+
/**
|
|
39
|
+
* Hosted Ask Buoy: a second model to answer when this one is down (see
|
|
40
|
+
* providers/fallback.ts). Same gateway, its own route and wire format.
|
|
41
|
+
*/
|
|
42
|
+
fallback?: {
|
|
43
|
+
protocol: "anthropic" | "openai";
|
|
44
|
+
endpoint: string;
|
|
45
|
+
model: string;
|
|
46
|
+
};
|
|
47
|
+
/** Called when answers move to the fallback model, or back for a new conversation. */
|
|
48
|
+
onModelSwitch?: (to: "fallback" | "primary") => void;
|
|
38
49
|
}
|
|
39
50
|
type RunApproval = (input: {
|
|
40
51
|
id: string;
|