import { WitnessCmdData } from "@ibgib/core-gib/dist/witness/witness-cmd/witness-cmd-types.mjs"; import { APIFunctionInfo } from "../api-types.mjs"; import type { getAllFunctionInfos } from "../api-index.mjs"; /** * @interface CommandBase - Base interface for all commands. * Extends the structure for witness commands. */ export interface CommandDataBase extends WitnessCmdData { /** * notes to self for use by the LLM to describe their use of the command. */ notesToSelf?: string; /** * set to true if the model desires notification as soon as the command is completed. * Note that this is not part of the intrinsic command, rather it is * metadata regarding agent (internal LLM model) workflow. */ repromptWithResult?: boolean; } /** * @interface EnqueuedCommand - Represents a command enqueued with its resolve * and reject functions. */ export interface EnqueuedCommand> { command: TCommand; resolve: (result: any) => void; reject: (error: Error) => void; /** * If the command is anonymous, then this will be set. Otherwise, the APIFunctionInfo * that will be used will be whitelisted from {@link getAllFunctionInfos}. */ anonApiFn?: APIFunctionInfo; } /** * @interface CommandService - Interface for the command service. */ export interface CommandService { // /** // * I'm adding this to enable anonymous functions. You must call this first // * and then you can call {@link enqueueCommand}. If you don't register, then // * you'll get an error. // * // * @see {@link commandifyAnonFn} // */ // registerAnonFn({ apiFnInfo }: { apiFnInfo: APIFunctionInfo }): void; /** * Enqueues a command to be executed. * @param {EnqueuedCommand} enqueuedCommand - The command to enqueue with its resolve and reject functions. */ enqueueCommand>(enqueuedCommand: EnqueuedCommand): void; /** * Starts processing the command queue. * @returns {Promise} A promise that resolves when the queue is empty. */ processQueue(): Promise; } // export const commandBaseSchemaProperties = { // repromptWithResult: { // type: 'boolean', // description: `Set this to true if you want to be reprompted with the function's result.`, // }, // notesToSelf: { // type: 'string', // description: `Use this as a note to yourself when looking at this function call and/or its result.`, // }, // } as const;