indusagi-coding-agent 0.1.43 → 0.1.45
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/CHANGELOG.md +10 -1
- package/README.md +2 -0
- package/dist/command-line/args.d.ts +3 -0
- package/dist/command-line/args.d.ts.map +1 -1
- package/dist/command-line/args.js +19 -2
- package/dist/command-line/args.js.map +1 -1
- package/dist/command-line/list-models.js +1 -1
- package/dist/command-line/list-models.js.map +1 -1
- package/dist/command-line/login-handler.d.ts.map +1 -1
- package/dist/command-line/login-handler.js +32 -0
- package/dist/command-line/login-handler.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/induscode-ui-delegate.d.ts +3 -0
- package/dist/interfaces/induscode-ui-delegate.d.ts.map +1 -0
- package/dist/interfaces/induscode-ui-delegate.js +148 -0
- package/dist/interfaces/induscode-ui-delegate.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/footer.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/components/footer.js +9 -15
- package/dist/interfaces/terminal-ui/components/footer.js.map +1 -1
- package/dist/interfaces/terminal-ui/components/model-selector.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/components/model-selector.js +1 -1
- package/dist/interfaces/terminal-ui/components/model-selector.js.map +1 -1
- package/dist/interfaces/terminal-ui/components/tool-execution.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/components/tool-execution.js +162 -1
- package/dist/interfaces/terminal-ui/components/tool-execution.js.map +1 -1
- package/dist/interfaces/terminal-ui/interactive-mode.d.ts +10 -0
- package/dist/interfaces/terminal-ui/interactive-mode.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/interactive-mode.js +207 -0
- package/dist/interfaces/terminal-ui/interactive-mode.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +18 -1
- package/dist/main.js.map +1 -1
- package/dist/runtime/agent-session.d.ts +41 -0
- package/dist/runtime/agent-session.d.ts.map +1 -1
- package/dist/runtime/agent-session.js +211 -24
- package/dist/runtime/agent-session.js.map +1 -1
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/model-registry.d.ts +6 -0
- package/dist/runtime/model-registry.d.ts.map +1 -1
- package/dist/runtime/model-registry.js +71 -14
- package/dist/runtime/model-registry.js.map +1 -1
- package/dist/runtime/model-resolver.d.ts.map +1 -1
- package/dist/runtime/model-resolver.js +5 -3
- package/dist/runtime/model-resolver.js.map +1 -1
- package/dist/runtime/plugins/types.d.ts +3 -0
- package/dist/runtime/plugins/types.d.ts.map +1 -1
- package/dist/runtime/plugins/types.js.map +1 -1
- package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts +19 -0
- package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/claude-cli-adapter.js +242 -0
- package/dist/runtime/providers/adapters/claude-cli-adapter.js.map +1 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts +18 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.js +177 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.js.map +1 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts +21 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.js +162 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.js.map +1 -0
- package/dist/runtime/providers/adapters/utils.d.ts +12 -0
- package/dist/runtime/providers/adapters/utils.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/utils.js +122 -0
- package/dist/runtime/providers/adapters/utils.js.map +1 -0
- package/dist/runtime/providers/builtins.d.ts +3 -0
- package/dist/runtime/providers/builtins.d.ts.map +1 -0
- package/dist/runtime/providers/builtins.js +99 -0
- package/dist/runtime/providers/builtins.js.map +1 -0
- package/dist/runtime/providers/provider-adapter-registry.d.ts +11 -0
- package/dist/runtime/providers/provider-adapter-registry.d.ts.map +1 -0
- package/dist/runtime/providers/provider-adapter-registry.js +36 -0
- package/dist/runtime/providers/provider-adapter-registry.js.map +1 -0
- package/dist/runtime/providers/provider-adapter.d.ts +33 -0
- package/dist/runtime/providers/provider-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/provider-adapter.js +2 -0
- package/dist/runtime/providers/provider-adapter.js.map +1 -0
- package/dist/runtime/providers/provider-service.d.ts +33 -0
- package/dist/runtime/providers/provider-service.d.ts.map +1 -0
- package/dist/runtime/providers/provider-service.js +157 -0
- package/dist/runtime/providers/provider-service.js.map +1 -0
- package/dist/runtime/providers/types.d.ts +29 -0
- package/dist/runtime/providers/types.d.ts.map +1 -0
- package/dist/runtime/providers/types.js +9 -0
- package/dist/runtime/providers/types.js.map +1 -0
- package/dist/runtime/sdk.d.ts +15 -1
- package/dist/runtime/sdk.d.ts.map +1 -1
- package/dist/runtime/sdk.js +88 -5
- package/dist/runtime/sdk.js.map +1 -1
- package/dist/runtime/settings-manager.d.ts +18 -0
- package/dist/runtime/settings-manager.d.ts.map +1 -1
- package/dist/runtime/settings-manager.js +13 -0
- package/dist/runtime/settings-manager.js.map +1 -1
- package/dist/runtime/system-prompt.d.ts.map +1 -1
- package/dist/runtime/system-prompt.js +52 -1
- package/dist/runtime/system-prompt.js.map +1 -1
- package/dist/runtime/tooling/index.d.ts +55 -2
- package/dist/runtime/tooling/index.d.ts.map +1 -1
- package/dist/runtime/tooling/index.js +52 -2
- package/dist/runtime/tooling/index.js.map +1 -1
- package/dist/runtime/tooling/registry.d.ts.map +1 -1
- package/dist/runtime/tooling/registry.js +36 -0
- package/dist/runtime/tooling/registry.js.map +1 -1
- package/dist/telemetry/core/types.d.ts +1 -1
- package/dist/telemetry/core/types.js +1 -1
- package/guides/CLAUDE_CODEX_CLI_INTEGRATION_PLAN.md +321 -0
- package/guides/{PI_MONO_MIT_REMOVAL_GUIDE.md → INDUSAGI_MONO_MIT_REMOVAL_GUIDE.md} +29 -29
- package/guides/OPTION3_PROVIDER_ADAPTER_RUNTIME_PLAN.md +370 -0
- package/package.json +10 -5
|
@@ -234,7 +234,7 @@ import { ExtensionRunner, wrapRegisteredTools, wrapToolsWithExtensions, } from "
|
|
|
234
234
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
235
235
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
236
236
|
import { HookRunner } from "./lifecycle/index.js";
|
|
237
|
-
import { createAllTools } from "./tooling/index.js";
|
|
237
|
+
import { ComposioService, createAllTools, } from "./tooling/index.js";
|
|
238
238
|
import { createMemory, createMemoryTools, DEFAULT_WORKING_MEMORY_TEMPLATE } from "./tooling/memory.js";
|
|
239
239
|
import { SubagentStore } from "./subagents.js";
|
|
240
240
|
import { createSessionTodoStore } from "./tooling/index.js";
|
|
@@ -294,6 +294,7 @@ export class AgentSession {
|
|
|
294
294
|
this._memoryTools = [];
|
|
295
295
|
this._memoryThreadId = "";
|
|
296
296
|
this._memoryResourceId = "default-user";
|
|
297
|
+
this._composioTools = [];
|
|
297
298
|
// Tool registry for extension getTools/setTools
|
|
298
299
|
this._toolRegistry = new Map();
|
|
299
300
|
// Base system prompt (without extension appends) - used to apply fresh appends each turn
|
|
@@ -335,6 +336,7 @@ export class AgentSession {
|
|
|
335
336
|
this._customTools = config.customTools ?? [];
|
|
336
337
|
this._cwd = config.cwd;
|
|
337
338
|
this._modelRegistry = config.modelRegistry;
|
|
339
|
+
this._providerService = config.providerService;
|
|
338
340
|
this._agentDir = config.agentDir ?? getAgentDir();
|
|
339
341
|
this._todoStore = createSessionTodoStore({
|
|
340
342
|
sessionManager: this.sessionManager,
|
|
@@ -396,6 +398,20 @@ export class AgentSession {
|
|
|
396
398
|
_rebuildTodoStore() {
|
|
397
399
|
this._todoStore.rebuildFromBranch();
|
|
398
400
|
}
|
|
401
|
+
_getComposioService() {
|
|
402
|
+
if (!this._composioService) {
|
|
403
|
+
this._composioService = new ComposioService();
|
|
404
|
+
}
|
|
405
|
+
return this._composioService;
|
|
406
|
+
}
|
|
407
|
+
_createComposioToolOptions() {
|
|
408
|
+
return {
|
|
409
|
+
service: this._getComposioService(),
|
|
410
|
+
onEnable: async (tools) => {
|
|
411
|
+
this.registerComposioTools(tools);
|
|
412
|
+
},
|
|
413
|
+
};
|
|
414
|
+
}
|
|
399
415
|
_consumeQueuedUserMessage(event) {
|
|
400
416
|
if (event.type !== "message_start" || event.message.role !== "user") {
|
|
401
417
|
return;
|
|
@@ -591,6 +607,9 @@ export class AgentSession {
|
|
|
591
607
|
* Call this when completely done with the session.
|
|
592
608
|
*/
|
|
593
609
|
dispose() {
|
|
610
|
+
if (this.model && this._providerService?.usesAdapter(this.model)) {
|
|
611
|
+
void this._providerService.stopCurrent(this.model).catch(() => { });
|
|
612
|
+
}
|
|
594
613
|
this._disconnectFromAgent();
|
|
595
614
|
this._observeAgentEventsUnsubscribe?.();
|
|
596
615
|
this._observeAgentEventsUnsubscribe = undefined;
|
|
@@ -779,16 +798,18 @@ export class AgentSession {
|
|
|
779
798
|
"Then use /model to select a model.");
|
|
780
799
|
}
|
|
781
800
|
// Validate API key
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
801
|
+
if (this._modelRegistry.providerNeedsAuth(this.model.provider)) {
|
|
802
|
+
const apiKey = await this._modelRegistry.getApiKey(this.model);
|
|
803
|
+
if (!apiKey) {
|
|
804
|
+
const isOAuth = this._modelRegistry.isUsingOAuth(this.model);
|
|
805
|
+
if (isOAuth) {
|
|
806
|
+
throw new Error(`Authentication failed for "${this.model.provider}". ` +
|
|
807
|
+
`Credentials may have expired or network is unavailable. ` +
|
|
808
|
+
`Run '/login ${this.model.provider}' to re-authenticate.`);
|
|
809
|
+
}
|
|
810
|
+
throw new Error(`No API key found for ${this.model.provider}.\n\n` +
|
|
811
|
+
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "authentication.md")}`);
|
|
789
812
|
}
|
|
790
|
-
throw new Error(`No API key found for ${this.model.provider}.\n\n` +
|
|
791
|
-
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "authentication.md")}`);
|
|
792
813
|
}
|
|
793
814
|
// Check if we need to compact before sending (catches aborted responses)
|
|
794
815
|
const lastAssistant = this._findLastAssistantMessage();
|
|
@@ -1108,6 +1129,9 @@ export class AgentSession {
|
|
|
1108
1129
|
*/
|
|
1109
1130
|
async abort() {
|
|
1110
1131
|
this.abortRetry();
|
|
1132
|
+
if (this.model && this._providerService?.usesAdapter(this.model)) {
|
|
1133
|
+
await this._providerService.interruptCurrent(this.model);
|
|
1134
|
+
}
|
|
1111
1135
|
this.agent.abort();
|
|
1112
1136
|
await this.agent.waitForIdle();
|
|
1113
1137
|
}
|
|
@@ -1134,6 +1158,9 @@ export class AgentSession {
|
|
|
1134
1158
|
}
|
|
1135
1159
|
this._disconnectFromAgent();
|
|
1136
1160
|
await this.abort();
|
|
1161
|
+
if (this.model && this._providerService?.usesAdapter(this.model)) {
|
|
1162
|
+
await this._providerService.stopCurrent(this.model);
|
|
1163
|
+
}
|
|
1137
1164
|
this.agent.reset();
|
|
1138
1165
|
this.sessionManager.newSession(options);
|
|
1139
1166
|
this._rebuildTodoStore();
|
|
@@ -1190,11 +1217,16 @@ export class AgentSession {
|
|
|
1190
1217
|
* @throws Error if no API key available for the model
|
|
1191
1218
|
*/
|
|
1192
1219
|
async setModel(model) {
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1220
|
+
if (this._modelRegistry.providerNeedsAuth(model.provider)) {
|
|
1221
|
+
const apiKey = await this._modelRegistry.getApiKey(model);
|
|
1222
|
+
if (!apiKey) {
|
|
1223
|
+
throw new Error(`No API key for ${model.provider}/${model.id}`);
|
|
1224
|
+
}
|
|
1196
1225
|
}
|
|
1197
1226
|
const previousModel = this.model;
|
|
1227
|
+
if (previousModel && !modelsAreEqual(previousModel, model) && this._providerService?.usesAdapter(previousModel)) {
|
|
1228
|
+
await this._providerService.stopCurrent(previousModel);
|
|
1229
|
+
}
|
|
1198
1230
|
this.agent.setModel(model);
|
|
1199
1231
|
this.sessionManager.appendModelChange(model.provider, model.id);
|
|
1200
1232
|
this.settingsManager.setDefaultModelAndProvider(model.provider, model.id);
|
|
@@ -1224,10 +1256,14 @@ export class AgentSession {
|
|
|
1224
1256
|
const len = this._scopedModels.length;
|
|
1225
1257
|
const nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
1226
1258
|
const next = this._scopedModels[nextIndex];
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1259
|
+
if (this._modelRegistry.providerNeedsAuth(next.model.provider)) {
|
|
1260
|
+
const apiKey = await this._modelRegistry.getApiKey(next.model);
|
|
1261
|
+
if (!apiKey) {
|
|
1262
|
+
throw new Error(`No API key for ${next.model.provider}/${next.model.id}`);
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
if (currentModel && !modelsAreEqual(currentModel, next.model) && this._providerService?.usesAdapter(currentModel)) {
|
|
1266
|
+
await this._providerService.stopCurrent(currentModel);
|
|
1231
1267
|
}
|
|
1232
1268
|
// Apply model
|
|
1233
1269
|
this.agent.setModel(next.model);
|
|
@@ -1249,9 +1285,14 @@ export class AgentSession {
|
|
|
1249
1285
|
const len = availableModels.length;
|
|
1250
1286
|
const nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
1251
1287
|
const nextModel = availableModels[nextIndex];
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1288
|
+
if (this._modelRegistry.providerNeedsAuth(nextModel.provider)) {
|
|
1289
|
+
const apiKey = await this._modelRegistry.getApiKey(nextModel);
|
|
1290
|
+
if (!apiKey) {
|
|
1291
|
+
throw new Error(`No API key for ${nextModel.provider}/${nextModel.id}`);
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
if (currentModel && !modelsAreEqual(currentModel, nextModel) && this._providerService?.usesAdapter(currentModel)) {
|
|
1295
|
+
await this._providerService.stopCurrent(currentModel);
|
|
1255
1296
|
}
|
|
1256
1297
|
this.agent.setModel(nextModel);
|
|
1257
1298
|
this.sessionManager.appendModelChange(nextModel.provider, nextModel.id);
|
|
@@ -1723,9 +1764,11 @@ export class AgentSession {
|
|
|
1723
1764
|
getAllTools: () => this.getAllTools(),
|
|
1724
1765
|
setActiveTools: (toolNames) => this.setActiveToolsByName(toolNames),
|
|
1725
1766
|
setModel: async (model) => {
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1767
|
+
if (this.modelRegistry.providerNeedsAuth(model.provider)) {
|
|
1768
|
+
const key = await this.modelRegistry.getApiKey(model);
|
|
1769
|
+
if (!key)
|
|
1770
|
+
return false;
|
|
1771
|
+
}
|
|
1729
1772
|
await this.setModel(model);
|
|
1730
1773
|
return true;
|
|
1731
1774
|
},
|
|
@@ -1779,6 +1822,7 @@ export class AgentSession {
|
|
|
1779
1822
|
bash: { commandPrefix: shellCommandPrefix },
|
|
1780
1823
|
task: taskOptions,
|
|
1781
1824
|
todoStore: this._todoStore,
|
|
1825
|
+
composio: this._createComposioToolOptions(),
|
|
1782
1826
|
});
|
|
1783
1827
|
this._baseToolRegistry = new Map(Object.entries(baseTools).map(([name, tool]) => [name, tool]));
|
|
1784
1828
|
const extensionsResult = this._resourceLoader.getExtensions();
|
|
@@ -1831,7 +1875,18 @@ export class AgentSession {
|
|
|
1831
1875
|
const activeMCPTools = this._mcpTools.filter((tool) => activeToolNameSet.has(tool.name));
|
|
1832
1876
|
// Include memory tools that are in the active set
|
|
1833
1877
|
const activeMemoryTools = this._memoryTools.filter((tool) => activeToolNameSet.has(tool.name));
|
|
1834
|
-
|
|
1878
|
+
// Include Composio toolkit tools that are in the active set
|
|
1879
|
+
const activeComposioTools = this._composioTools.filter((tool) => activeToolNameSet.has(tool.name));
|
|
1880
|
+
for (const tool of [...this._mcpTools, ...this._memoryTools, ...this._composioTools]) {
|
|
1881
|
+
toolRegistry.set(tool.name, tool);
|
|
1882
|
+
}
|
|
1883
|
+
const activeToolsArray = [
|
|
1884
|
+
...activeBaseTools,
|
|
1885
|
+
...activeExtensionTools,
|
|
1886
|
+
...activeMCPTools,
|
|
1887
|
+
...activeMemoryTools,
|
|
1888
|
+
...activeComposioTools,
|
|
1889
|
+
];
|
|
1835
1890
|
const shouldWrapTools = Boolean(this._extensionRunner || this._hookRunner);
|
|
1836
1891
|
if (shouldWrapTools) {
|
|
1837
1892
|
const wrappedActiveTools = wrapToolsWithExtensions(activeToolsArray, this._extensionRunner, this._hookRunner, this.sessionId);
|
|
@@ -2132,6 +2187,9 @@ export class AgentSession {
|
|
|
2132
2187
|
}
|
|
2133
2188
|
this._disconnectFromAgent();
|
|
2134
2189
|
await this.abort();
|
|
2190
|
+
if (this.model && this._providerService?.usesAdapter(this.model)) {
|
|
2191
|
+
await this._providerService.stopCurrent(this.model);
|
|
2192
|
+
}
|
|
2135
2193
|
this._steeringMessages = [];
|
|
2136
2194
|
this._followUpMessages = [];
|
|
2137
2195
|
this._pendingNextTurnMessages = [];
|
|
@@ -2677,6 +2735,135 @@ export class AgentSession {
|
|
|
2677
2735
|
});
|
|
2678
2736
|
}
|
|
2679
2737
|
// =========================================================================
|
|
2738
|
+
// Composio
|
|
2739
|
+
// =========================================================================
|
|
2740
|
+
/**
|
|
2741
|
+
* Register Composio toolkit tools with the session.
|
|
2742
|
+
* These are hydrated native agent tools produced by composio_enable or startup preload.
|
|
2743
|
+
*/
|
|
2744
|
+
registerComposioTools(tools) {
|
|
2745
|
+
const mergedTools = new Map(this._composioTools.map((tool) => [tool.name, tool]));
|
|
2746
|
+
for (const tool of tools) {
|
|
2747
|
+
mergedTools.set(tool.name, tool);
|
|
2748
|
+
this._toolRegistry.set(tool.name, tool);
|
|
2749
|
+
}
|
|
2750
|
+
this._composioTools = Array.from(mergedTools.values());
|
|
2751
|
+
const currentActive = this.getActiveToolNames();
|
|
2752
|
+
const activeToolNames = Array.from(new Set([...currentActive, ...tools.map((tool) => tool.name)]));
|
|
2753
|
+
this.setActiveToolsByName(activeToolNames);
|
|
2754
|
+
this._rebuildRuntimeState({
|
|
2755
|
+
activeToolNames,
|
|
2756
|
+
includeAllExtensionTools: true,
|
|
2757
|
+
});
|
|
2758
|
+
void this._refreshObserveSession();
|
|
2759
|
+
void this._logObserve({
|
|
2760
|
+
name: "composio.register_tools",
|
|
2761
|
+
summary: "registered Composio tools",
|
|
2762
|
+
attributes: {
|
|
2763
|
+
toolCount: tools.length,
|
|
2764
|
+
toolNames: tools.map((tool) => tool.name),
|
|
2765
|
+
},
|
|
2766
|
+
});
|
|
2767
|
+
}
|
|
2768
|
+
/**
|
|
2769
|
+
* Enable Composio toolkit tools for the current session.
|
|
2770
|
+
*/
|
|
2771
|
+
async enableComposio(options = {}) {
|
|
2772
|
+
return this._runObserveOperation("composio.enable", "custom", async () => {
|
|
2773
|
+
const persistSettings = options.persistSettings ?? false;
|
|
2774
|
+
const toolkits = options.toolkits?.length ? options.toolkits : this.settingsManager.getComposioDefaultToolkits();
|
|
2775
|
+
const toolSlugs = options.toolSlugs ?? [];
|
|
2776
|
+
if (toolkits.length === 0 && toolSlugs.length === 0) {
|
|
2777
|
+
throw new Error("Composio requires at least one toolkit or tool slug.");
|
|
2778
|
+
}
|
|
2779
|
+
const tools = await this._getComposioService().createAgentTools({
|
|
2780
|
+
toolkits,
|
|
2781
|
+
toolSlugs,
|
|
2782
|
+
authConfigs: options.authConfigs,
|
|
2783
|
+
connectedAccounts: options.connectedAccounts,
|
|
2784
|
+
authConfigId: options.authConfigId,
|
|
2785
|
+
connectedAccountId: options.connectedAccountId,
|
|
2786
|
+
});
|
|
2787
|
+
this.registerComposioTools(tools);
|
|
2788
|
+
if (persistSettings) {
|
|
2789
|
+
this.settingsManager.setComposioSettings({
|
|
2790
|
+
enabled: true,
|
|
2791
|
+
autoConnect: toolkits.length > 0,
|
|
2792
|
+
defaultToolkits: toolkits,
|
|
2793
|
+
mode: toolkits.length > 0 ? "preload" : "control",
|
|
2794
|
+
});
|
|
2795
|
+
}
|
|
2796
|
+
await this._refreshObserveSession();
|
|
2797
|
+
return tools;
|
|
2798
|
+
}, {
|
|
2799
|
+
attributes: {
|
|
2800
|
+
toolkits: options.toolkits ?? [],
|
|
2801
|
+
toolSlugs: options.toolSlugs ?? [],
|
|
2802
|
+
persistSettings: options.persistSettings ?? false,
|
|
2803
|
+
},
|
|
2804
|
+
});
|
|
2805
|
+
}
|
|
2806
|
+
/**
|
|
2807
|
+
* Remove hydrated Composio toolkit tools from the current session.
|
|
2808
|
+
*/
|
|
2809
|
+
async clearComposioTools(options) {
|
|
2810
|
+
await this._runObserveOperation("composio.clear", "custom", async () => {
|
|
2811
|
+
const persistSettings = options?.persistSettings ?? false;
|
|
2812
|
+
const composioToolNames = new Set(this._composioTools.map((tool) => tool.name));
|
|
2813
|
+
const activeWithoutComposio = this.getActiveToolNames().filter((name) => !composioToolNames.has(name));
|
|
2814
|
+
this._composioTools = [];
|
|
2815
|
+
this._rebuildRuntimeState({
|
|
2816
|
+
activeToolNames: activeWithoutComposio,
|
|
2817
|
+
includeAllExtensionTools: true,
|
|
2818
|
+
});
|
|
2819
|
+
if (persistSettings) {
|
|
2820
|
+
this.settingsManager.setComposioSettings({
|
|
2821
|
+
autoConnect: false,
|
|
2822
|
+
defaultToolkits: [],
|
|
2823
|
+
mode: "control",
|
|
2824
|
+
});
|
|
2825
|
+
}
|
|
2826
|
+
await this._refreshObserveSession();
|
|
2827
|
+
}, {
|
|
2828
|
+
attributes: {
|
|
2829
|
+
persistSettings: options?.persistSettings ?? false,
|
|
2830
|
+
},
|
|
2831
|
+
});
|
|
2832
|
+
}
|
|
2833
|
+
getComposioToolNames() {
|
|
2834
|
+
return this._composioTools.map((tool) => tool.name);
|
|
2835
|
+
}
|
|
2836
|
+
getComposioTools() {
|
|
2837
|
+
return this._composioTools;
|
|
2838
|
+
}
|
|
2839
|
+
async connectComposio(options) {
|
|
2840
|
+
return this._runObserveOperation("composio.connect", "custom", () => this._getComposioService().connectAccount({
|
|
2841
|
+
toolkit: options.toolkit,
|
|
2842
|
+
connectedAccountId: options.connectedAccountId,
|
|
2843
|
+
authConfigId: options.authConfigId,
|
|
2844
|
+
callbackUrl: options.callbackUrl,
|
|
2845
|
+
}), {
|
|
2846
|
+
attributes: {
|
|
2847
|
+
toolkit: options.toolkit ?? "",
|
|
2848
|
+
connectedAccountId: options.connectedAccountId ?? "",
|
|
2849
|
+
},
|
|
2850
|
+
});
|
|
2851
|
+
}
|
|
2852
|
+
async listComposioAccounts(filters) {
|
|
2853
|
+
return this._runObserveOperation("composio.accounts", "custom", () => this._getComposioService().listAccounts({
|
|
2854
|
+
toolkitSlugs: filters?.toolkits,
|
|
2855
|
+
statuses: filters?.statuses,
|
|
2856
|
+
limit: filters?.limit,
|
|
2857
|
+
cursor: filters?.cursor,
|
|
2858
|
+
authConfigIds: filters?.authConfigIds,
|
|
2859
|
+
}), {
|
|
2860
|
+
attributes: {
|
|
2861
|
+
toolkits: filters?.toolkits ?? [],
|
|
2862
|
+
statuses: filters?.statuses ?? [],
|
|
2863
|
+
},
|
|
2864
|
+
});
|
|
2865
|
+
}
|
|
2866
|
+
// =========================================================================
|
|
2680
2867
|
// Memory System
|
|
2681
2868
|
// =========================================================================
|
|
2682
2869
|
/**
|