SYMBOL INDEX (4859 symbols across 532 files) FILE: cmd/picoclaw-launcher-tui/internal/config/store.go constant configDirName (line 12) | configDirName = ".picoclaw" constant configFileName (line 13) | configFileName = "config.json" function ConfigPath (line 16) | func ConfigPath() (string, error) { function ConfigDir (line 24) | func ConfigDir() (string, error) { function Load (line 32) | func Load() (*picoclawconfig.Config, error) { function Save (line 40) | func Save(cfg *picoclawconfig.Config) error { FILE: cmd/picoclaw-launcher-tui/internal/ui/app.go type appState (line 17) | type appState struct method push (line 79) | func (s *appState) push(name string, primitive tview.Primitive) { method pop (line 88) | func (s *appState) pop() { method mainMenu (line 106) | func (s *appState) mainMenu() tview.Primitive { method refreshMenu (line 122) | func (s *appState) refreshMenu(name string, menu *Menu) { method countChannels (line 133) | func (s *appState) countChannels() (enabled int, total int) { method applyChangesValidated (line 247) | func (s *appState) applyChangesValidated() bool { method requestExit (line 268) | func (s *appState) requestExit() { method requestStartTalk (line 281) | func (s *appState) requestStartTalk() { method requestStartGateway (line 293) | func (s *appState) requestStartGateway() { method viewGatewayLog (line 305) | func (s *appState) viewGatewayLog() { method selectedModelName (line 327) | func (s *appState) selectedModelName() string { method startTalk (line 356) | func (s *appState) startTalk() { method startGateway (line 373) | func (s *appState) startGateway() { method stopGateway (line 403) | func (s *appState) stopGateway() { method isGatewayRunning (line 411) | func (s *appState) isGatewayRunning() bool { method validateAgentModel (line 415) | func (s *appState) validateAgentModel() error { method isActiveModelValid (line 424) | func (s *appState) isActiveModelValid() bool { method hasEnabledChannel (line 438) | func (s *appState) hasEnabledChannel() bool { method confirmApplyOrDiscard (line 445) | func (s *appState) confirmApplyOrDiscard(onApply func(), onDiscard fun... method discardChanges (line 473) | func (s *appState) discardChanges() { method showMessage (line 487) | func (s *appState) showMessage(title, message string) { function Run (line 32) | func Run() error { function refreshMainMenuIfPresent (line 159) | func refreshMainMenuIfPresent(s *appState) { function refreshMainMenu (line 165) | func refreshMainMenu(menu *Menu, s *appState) { function rootModelLabel (line 338) | func rootModelLabel(selected string) string { function rootModelDescription (line 345) | func rootModelDescription() string { function rootChannelLabel (line 349) | func rootChannelLabel(valid bool) string { function loadOriginalConfig (line 505) | func loadOriginalConfig(path string) ([]byte, bool) { function writeOriginalConfig (line 516) | func writeOriginalConfig(path string, data []byte) error { function writeBackupConfig (line 520) | func writeBackupConfig(path string, data []byte) error { FILE: cmd/picoclaw-launcher-tui/internal/ui/channel.go method buildChannelMenuItems (line 13) | func (s *appState) buildChannelMenuItems() []MenuItem { method channelMenu (line 96) | func (s *appState) channelMenu() tview.Primitive { function refreshChannelMenuFromState (line 108) | func refreshChannelMenuFromState(menu *Menu, s *appState) { method telegramForm (line 112) | func (s *appState) telegramForm() tview.Primitive { method discordForm (line 125) | func (s *appState) discordForm() tview.Primitive { method qqForm (line 138) | func (s *appState) qqForm() tview.Primitive { method maixcamForm (line 151) | func (s *appState) maixcamForm() tview.Primitive { method whatsappForm (line 162) | func (s *appState) whatsappForm() tview.Primitive { method feishuForm (line 172) | func (s *appState) feishuForm() tview.Primitive { method dingtalkForm (line 191) | func (s *appState) dingtalkForm() tview.Primitive { method slackForm (line 204) | func (s *appState) slackForm() tview.Primitive { method lineForm (line 217) | func (s *appState) lineForm() tview.Primitive { method matrixForm (line 237) | func (s *appState) matrixForm() tview.Primitive { method onebotForm (line 259) | func (s *appState) onebotForm() tview.Primitive { method wecomForm (line 287) | func (s *appState) wecomForm() tview.Primitive { method wecomAppForm (line 316) | func (s *appState) wecomAppForm() tview.Primitive { method makeChannelOnEnabled (line 349) | func (s *appState) makeChannelOnEnabled(enabledPtr *bool) func(bool) { function addAllowFromField (line 360) | func addAllowFromField(form *tview.Form, allowFrom *picoclawconfig.Flexi... function baseChannelForm (line 366) | func baseChannelForm(title string, enabled bool, onEnabled func(bool)) *... function wrapWithBack (line 377) | func wrapWithBack(form *tview.Form, s *appState) tview.Primitive { function splitCSV (line 391) | func splitCSV(input string) picoclawconfig.FlexibleStringSlice { function addIntField (line 404) | func addIntField(form *tview.Form, label string, value int, onChange fun... function addInt64Field (line 413) | func addInt64Field(form *tview.Form, label string, value int64, onChange... function channelItem (line 422) | func channelItem(label, description string, enabled bool, action MenuAct... FILE: cmd/picoclaw-launcher-tui/internal/ui/gateway_posix.go function isGatewayProcessRunning (line 8) | func isGatewayProcessRunning() bool { function stopGatewayProcess (line 13) | func stopGatewayProcess() error { FILE: cmd/picoclaw-launcher-tui/internal/ui/gateway_windows.go function isGatewayProcessRunning (line 8) | func isGatewayProcessRunning() bool { function stopGatewayProcess (line 13) | func stopGatewayProcess() error { FILE: cmd/picoclaw-launcher-tui/internal/ui/menu.go type MenuAction (line 8) | type MenuAction type MenuItem (line 10) | type MenuItem struct type Menu (line 19) | type Menu struct method applyItems (line 47) | func (m *Menu) applyItems(items []MenuItem) { function NewMenu (line 24) | func NewMenu(title string, items []MenuItem) *Menu { FILE: cmd/picoclaw-launcher-tui/internal/ui/model.go method modelMenu (line 16) | func (s *appState) modelMenu() tview.Primitive { method modelForm (line 92) | func (s *appState) modelForm(index int) tview.Primitive { function addInput (line 203) | func addInput(form *tview.Form, label, value string, onChange func(strin... function addIntInput (line 209) | func addIntInput(form *tview.Form, label string, value int, onChange fun... method addModel (line 218) | func (s *appState) addModel(model picoclawconfig.ModelConfig) { method deleteModel (line 222) | func (s *appState) deleteModel(index int) { function modelStatusColor (line 230) | func modelStatusColor(valid bool, selected bool) *tcell.Color { function refreshModelMenu (line 239) | func refreshModelMenu(menu *Menu, currentModel string, models []picoclaw... function refreshModelMenuFromState (line 259) | func refreshModelMenuFromState(menu *Menu, s *appState) { function isModelValid (line 303) | func isModelValid(model picoclawconfig.ModelConfig) bool { method modelNameExists (line 310) | func (s *appState) modelNameExists(name string, excludeIndex int) bool { method nextAvailableModelName (line 326) | func (s *appState) nextAvailableModelName(base string) string { method testModel (line 342) | func (s *appState) testModel(model *picoclawconfig.ModelConfig) { FILE: cmd/picoclaw-launcher-tui/internal/ui/style.go constant colorBlue (line 9) | colorBlue = "[#3e5db9]" constant colorRed (line 10) | colorRed = "[#d54646]" constant banner (line 11) | banner = "\r\n[::b]" + function applyStyles (line 21) | func applyStyles() { function bannerView (line 35) | func bannerView() *tview.TextView { constant footerText (line 45) | footerText = "Esc: Back/Exit | Enter: Enter | ←↓↑→ : Move | Space: Selec... function footerView (line 47) | func footerView() *tview.TextView { FILE: cmd/picoclaw-launcher-tui/main.go function main (line 10) | func main() { FILE: cmd/picoclaw/internal/agent/command.go function NewAgentCommand (line 7) | func NewAgentCommand() *cobra.Command { FILE: cmd/picoclaw/internal/agent/command_test.go function TestNewAgentCommand (line 10) | func TestNewAgentCommand(t *testing.T) { FILE: cmd/picoclaw/internal/agent/helpers.go function agentCmd (line 21) | func agentCmd(message, sessionKey, model string, debug bool) error { function interactiveMode (line 80) | func interactiveMode(agentLoop *agent.AgentLoop, sessionKey string) { function simpleInteractiveMode (line 130) | func simpleInteractiveMode(agentLoop *agent.AgentLoop, sessionKey string) { FILE: cmd/picoclaw/internal/auth/command.go function NewAuthCommand (line 5) | func NewAuthCommand() *cobra.Command { FILE: cmd/picoclaw/internal/auth/command_test.go function TestNewAuthCommand (line 11) | func TestNewAuthCommand(t *testing.T) { FILE: cmd/picoclaw/internal/auth/helpers.go constant supportedProvidersMsg (line 20) | supportedProvidersMsg = "supported providers: openai, anthropic, google-... constant defaultAnthropicModel (line 21) | defaultAnthropicModel = "claude-sonnet-4.6" function authLoginCmd (line 24) | func authLoginCmd(provider string, useDeviceCode bool, useOauth bool) er... function authLoginOpenAI (line 37) | func authLoginOpenAI(useDeviceCode bool) error { function authLoginGoogleAntigravity (line 98) | func authLoginGoogleAntigravity() error { function authLoginAnthropic (line 170) | func authLoginAnthropic(useOauth bool) error { function authLoginAnthropicSetupToken (line 201) | func authLoginAnthropicSetupToken() error { function fetchGoogleUserEmail (line 245) | func fetchGoogleUserEmail(accessToken string) (string, error) { function authLoginPasteToken (line 276) | func authLoginPasteToken(provider string) error { function authLogoutCmd (line 343) | func authLogoutCmd(provider string) error { function authStatusCmd (line 407) | func authStatusCmd() error { function authModelsCmd (line 459) | func authModelsCmd() error { function isAntigravityModel (line 511) | func isAntigravityModel(model string) bool { function isOpenAIModel (line 519) | func isOpenAIModel(model string) bool { function isAnthropicModel (line 525) | func isAnthropicModel(model string) bool { FILE: cmd/picoclaw/internal/auth/login.go function newLoginCommand (line 5) | func newLoginCommand() *cobra.Command { FILE: cmd/picoclaw/internal/auth/login_test.go function TestNewLoginSubCommand (line 11) | func TestNewLoginSubCommand(t *testing.T) { FILE: cmd/picoclaw/internal/auth/logout.go function newLogoutCommand (line 5) | func newLogoutCommand() *cobra.Command { FILE: cmd/picoclaw/internal/auth/logout_test.go function TestNewLogoutSubcommand (line 10) | func TestNewLogoutSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/auth/models.go function newModelsCommand (line 5) | func newModelsCommand() *cobra.Command { FILE: cmd/picoclaw/internal/auth/models_test.go function TestNewModelsCommand (line 10) | func TestNewModelsCommand(t *testing.T) { FILE: cmd/picoclaw/internal/auth/status.go function newStatusCommand (line 5) | func newStatusCommand() *cobra.Command { FILE: cmd/picoclaw/internal/auth/status_test.go function TestNewStatusSubcommand (line 10) | func TestNewStatusSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/cron/add.go function newAddCommand (line 11) | func newAddCommand(storePath func() string) *cobra.Command { FILE: cmd/picoclaw/internal/cron/add_test.go function TestNewAddSubcommand (line 11) | func TestNewAddSubcommand(t *testing.T) { function TestNewAddCommandEveryAndCronMutuallyExclusive (line 45) | func TestNewAddCommandEveryAndCronMutuallyExclusive(t *testing.T) { FILE: cmd/picoclaw/internal/cron/command.go function NewCronCommand (line 12) | func NewCronCommand() *cobra.Command { FILE: cmd/picoclaw/internal/cron/command_test.go function TestNewCronCommand (line 11) | func TestNewCronCommand(t *testing.T) { FILE: cmd/picoclaw/internal/cron/disable.go function newDisableCommand (line 5) | func newDisableCommand(storePath func() string) *cobra.Command { FILE: cmd/picoclaw/internal/cron/disable_test.go function TestDisableSubcommand (line 10) | func TestDisableSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/cron/enable.go function newEnableCommand (line 5) | func newEnableCommand(storePath func() string) *cobra.Command { FILE: cmd/picoclaw/internal/cron/enable_test.go function TestEnableSubcommand (line 10) | func TestEnableSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/cron/helpers.go function cronListCmd (line 10) | func cronListCmd(storePath string) { function cronRemoveCmd (line 49) | func cronRemoveCmd(storePath, jobID string) { function cronSetJobEnabled (line 58) | func cronSetJobEnabled(storePath, jobID string, enabled bool) { FILE: cmd/picoclaw/internal/cron/list.go function newListCommand (line 5) | func newListCommand(storePath func() string) *cobra.Command { FILE: cmd/picoclaw/internal/cron/list_test.go function TestNewListSubcommand (line 10) | func TestNewListSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/cron/remove.go function newRemoveCommand (line 5) | func newRemoveCommand(storePath func() string) *cobra.Command { FILE: cmd/picoclaw/internal/cron/remove_test.go function TestNewRemoveSubcommand (line 10) | func TestNewRemoveSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/gateway/command.go function NewGatewayCommand (line 14) | func NewGatewayCommand() *cobra.Command { FILE: cmd/picoclaw/internal/gateway/command_test.go function TestNewGatewayCommand (line 10) | func TestNewGatewayCommand(t *testing.T) { FILE: cmd/picoclaw/internal/helpers.go constant Logo (line 10) | Logo = "🦞" function GetPicoclawHome (line 14) | func GetPicoclawHome() string { function GetConfigPath (line 22) | func GetConfigPath() string { function LoadConfig (line 29) | func LoadConfig() (*config.Config, error) { function FormatVersion (line 35) | func FormatVersion() string { function FormatBuildInfo (line 41) | func FormatBuildInfo() (string, string) { function GetVersion (line 47) | func GetVersion() string { FILE: cmd/picoclaw/internal/helpers_test.go function TestGetConfigPath (line 13) | func TestGetConfigPath(t *testing.T) { function TestGetConfigPath_WithPICOCLAW_HOME (line 22) | func TestGetConfigPath_WithPICOCLAW_HOME(t *testing.T) { function TestGetConfigPath_WithPICOCLAW_CONFIG (line 32) | func TestGetConfigPath_WithPICOCLAW_CONFIG(t *testing.T) { function TestGetConfigPath_Windows (line 43) | func TestGetConfigPath_Windows(t *testing.T) { FILE: cmd/picoclaw/internal/migrate/command.go function NewMigrateCommand (line 9) | func NewMigrateCommand() *cobra.Command { FILE: cmd/picoclaw/internal/migrate/command_test.go function TestNewMigrateCommand (line 10) | func TestNewMigrateCommand(t *testing.T) { FILE: cmd/picoclaw/internal/model/command.go constant LocalModel (line 13) | LocalModel = "local-model" function NewModelCommand (line 15) | func NewModelCommand() *cobra.Command { function showCurrentModel (line 57) | func showCurrentModel(cfg *config.Config) { function listAvailableModels (line 74) | func listAvailableModels(cfg *config.Config) { function setDefaultModel (line 97) | func setDefaultModel(configPath string, cfg *config.Config, modelName st... function formatModelName (line 133) | func formatModelName(name string) string { FILE: cmd/picoclaw/internal/model/command_test.go function initTest (line 18) | func initTest(t *testing.T) { function captureStdout (line 25) | func captureStdout(fn func()) string { function TestNewModelCommand (line 40) | func TestNewModelCommand(t *testing.T) { function TestShowCurrentModel_WithDefaultModel (line 60) | func TestShowCurrentModel_WithDefaultModel(t *testing.T) { function TestShowCurrentModel_NoDefaultModel (line 83) | func TestShowCurrentModel_NoDefaultModel(t *testing.T) { function TestShowCurrentModel_BackwardCompatibility (line 104) | func TestShowCurrentModel_BackwardCompatibility(t *testing.T) { function TestListAvailableModels_Empty (line 121) | func TestListAvailableModels_Empty(t *testing.T) { function TestListAvailableModels_WithModels (line 133) | func TestListAvailableModels_WithModels(t *testing.T) { function TestSetDefaultModel_ValidModel (line 157) | func TestSetDefaultModel_ValidModel(t *testing.T) { function TestSetDefaultModel_LegacyModelField (line 186) | func TestSetDefaultModel_LegacyModelField(t *testing.T) { function TestSetDefaultModel_InvalidModel (line 208) | func TestSetDefaultModel_InvalidModel(t *testing.T) { function TestSetDefaultModel_ModelWithoutAPIKey (line 225) | func TestSetDefaultModel_ModelWithoutAPIKey(t *testing.T) { function TestSetDefaultModel_SaveConfigError (line 243) | func TestSetDefaultModel_SaveConfigError(t *testing.T) { function TestFormatModelName (line 264) | func TestFormatModelName(t *testing.T) { function TestModelCommandExecution_Show (line 284) | func TestModelCommandExecution_Show(t *testing.T) { function TestModelCommandExecution_Set (line 312) | func TestModelCommandExecution_Set(t *testing.T) { function TestModelCommandExecution_TooManyArgs (line 340) | func TestModelCommandExecution_TooManyArgs(t *testing.T) { function TestListAvailableModels_MarkerLogic (line 348) | func TestListAvailableModels_MarkerLogic(t *testing.T) { FILE: cmd/picoclaw/internal/onboard/command.go function NewOnboardCommand (line 13) | func NewOnboardCommand() *cobra.Command { FILE: cmd/picoclaw/internal/onboard/command_test.go function TestNewOnboardCommand (line 10) | func TestNewOnboardCommand(t *testing.T) { FILE: cmd/picoclaw/internal/onboard/helpers.go function onboard (line 16) | func onboard(encrypt bool) { function promptPassphrase (line 106) | func promptPassphrase() (string, error) { function setupSSHKey (line 133) | func setupSSHKey() error { function createWorkspaceTemplates (line 158) | func createWorkspaceTemplates(workspace string) { function copyEmbeddedToTarget (line 165) | func copyEmbeddedToTarget(targetDir string) error { FILE: cmd/picoclaw/internal/onboard/helpers_test.go function TestCopyEmbeddedToTargetUsesAgentsMarkdown (line 9) | func TestCopyEmbeddedToTargetUsesAgentsMarkdown(t *testing.T) { FILE: cmd/picoclaw/internal/skills/command.go type deps (line 13) | type deps struct function NewSkillsCommand (line 19) | func NewSkillsCommand() *cobra.Command { FILE: cmd/picoclaw/internal/skills/command_test.go function TestNewSkillsCommand (line 10) | func TestNewSkillsCommand(t *testing.T) { FILE: cmd/picoclaw/internal/skills/helpers.go constant skillsSearchMaxResults (line 18) | skillsSearchMaxResults = 20 function skillsListCmd (line 20) | func skillsListCmd(loader *skills.SkillsLoader) { function skillsInstallCmd (line 38) | func skillsInstallCmd(installer *skills.SkillInstaller, repo string) err... function skillsInstallFromRegistry (line 54) | func skillsInstallFromRegistry(cfg *config.Config, registryName, slug st... function skillsRemoveCmd (line 121) | func skillsRemoveCmd(installer *skills.SkillInstaller, skillName string) { function skillsInstallBuiltinCmd (line 132) | func skillsInstallBuiltinCmd(workspace string) { function skillsListBuiltinCmd (line 168) | func skillsListBuiltinCmd() { function skillsSearchCmd (line 220) | func skillsSearchCmd(query string) { function skillsShowCmd (line 262) | func skillsShowCmd(loader *skills.SkillsLoader, skillName string) { function copyDirectory (line 274) | func copyDirectory(src, dst string) error { FILE: cmd/picoclaw/internal/skills/install.go function newInstallCommand (line 12) | func newInstallCommand(installerFn func() (*skills.SkillInstaller, error... FILE: cmd/picoclaw/internal/skills/install_test.go function TestNewInstallSubcommand (line 10) | func TestNewInstallSubcommand(t *testing.T) { function TestInstallCommandArgs (line 30) | func TestInstallCommandArgs(t *testing.T) { FILE: cmd/picoclaw/internal/skills/installbuiltin.go function newInstallBuiltinCommand (line 5) | func newInstallBuiltinCommand(workspaceFn func() (string, error)) *cobra... FILE: cmd/picoclaw/internal/skills/installbuiltin_test.go function TestNewInstallbuiltinSubcommand (line 10) | func TestNewInstallbuiltinSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/skills/list.go function newListCommand (line 9) | func newListCommand(loaderFn func() (*skills.SkillsLoader, error)) *cobr... FILE: cmd/picoclaw/internal/skills/list_test.go function TestNewListSubcommand (line 10) | func TestNewListSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/skills/listbuiltin.go function newListBuiltinCommand (line 5) | func newListBuiltinCommand() *cobra.Command { FILE: cmd/picoclaw/internal/skills/listbuiltin_test.go function TestNewListbuiltinSubcommand (line 10) | func TestNewListbuiltinSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/skills/remove.go function newRemoveCommand (line 9) | func newRemoveCommand(installerFn func() (*skills.SkillInstaller, error)... FILE: cmd/picoclaw/internal/skills/remove_test.go function TestNewRemoveSubcommand (line 10) | func TestNewRemoveSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/skills/search.go function newSearchCommand (line 7) | func newSearchCommand() *cobra.Command { FILE: cmd/picoclaw/internal/skills/search_test.go function TestNewSearchSubcommand (line 10) | func TestNewSearchSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/skills/show.go function newShowCommand (line 9) | func newShowCommand(loaderFn func() (*skills.SkillsLoader, error)) *cobr... FILE: cmd/picoclaw/internal/skills/show_test.go function TestNewShowSubcommand (line 10) | func TestNewShowSubcommand(t *testing.T) { FILE: cmd/picoclaw/internal/status/command.go function NewStatusCommand (line 7) | func NewStatusCommand() *cobra.Command { FILE: cmd/picoclaw/internal/status/command_test.go function TestNewStatusCommand (line 10) | func TestNewStatusCommand(t *testing.T) { FILE: cmd/picoclaw/internal/status/helpers.go function statusCmd (line 12) | func statusCmd() { FILE: cmd/picoclaw/internal/version/command.go function NewVersionCommand (line 12) | func NewVersionCommand() *cobra.Command { function printVersion (line 25) | func printVersion() { FILE: cmd/picoclaw/internal/version/command_test.go function TestNewVersionCommand (line 10) | func TestNewVersionCommand(t *testing.T) { FILE: cmd/picoclaw/main.go function NewPicoclawCommand (line 29) | func NewPicoclawCommand() *cobra.Command { constant colorBlue (line 55) | colorBlue = "\033[1;38;2;62;93;185m" constant colorRed (line 56) | colorRed = "\033[1;38;2;213;70;70m" constant banner (line 57) | banner = "\r\n" + function main (line 67) | func main() { FILE: cmd/picoclaw/main_test.go function TestNewPicoclawCommand (line 15) | func TestNewPicoclawCommand(t *testing.T) { FILE: pkg/agent/context.go type ContextBuilder (line 22) | type ContextBuilder struct method WithToolDiscovery (line 48) | func (cb *ContextBuilder) WithToolDiscovery(useBM25, useRegex bool) *C... method getIdentity (line 82) | func (cb *ContextBuilder) getIdentity() string { method getDiscoveryRule (line 112) | func (cb *ContextBuilder) getDiscoveryRule() string { method BuildSystemPrompt (line 131) | func (cb *ContextBuilder) BuildSystemPrompt() string { method BuildSystemPromptWithCache (line 166) | func (cb *ContextBuilder) BuildSystemPromptWithCache() string { method InvalidateCache (line 209) | func (cb *ContextBuilder) InvalidateCache() { method sourcePaths (line 224) | func (cb *ContextBuilder) sourcePaths() []string { method skillRoots (line 236) | func (cb *ContextBuilder) skillRoots() []string { method buildCacheBaseline (line 259) | func (cb *ContextBuilder) buildCacheBaseline() cacheBaseline { method sourceFilesChangedLocked (line 313) | func (cb *ContextBuilder) sourceFilesChangedLocked() bool { method fileChangedSince (line 348) | func (cb *ContextBuilder) fileChangedSince(path string) bool { method LoadBootstrapFiles (line 434) | func (cb *ContextBuilder) LoadBootstrapFiles() string { method buildDynamicContext (line 477) | func (cb *ContextBuilder) buildDynamicContext(channel, chatID, senderI... method BuildMessages (line 494) | func (cb *ContextBuilder) BuildMessages( method AddToolResult (line 714) | func (cb *ContextBuilder) AddToolResult( method AddAssistantMessage (line 726) | func (cb *ContextBuilder) AddAssistantMessage( method GetSkillsInfo (line 741) | func (cb *ContextBuilder) GetSkillsInfo() map[string]any { function getGlobalConfigDir (line 54) | func getGlobalConfigDir() string { function NewContextBuilder (line 65) | func NewContextBuilder(workspace string) *ContextBuilder { type cacheBaseline (line 250) | type cacheBaseline struct function skillFilesChangedSince (line 377) | func skillFilesChangedSince(skillRoots []string, filesAtCache map[string... function formatCurrentSenderLine (line 461) | func formatCurrentSenderLine(senderID, senderDisplayName string) string { function sanitizeHistoryForProvider (line 596) | func sanitizeHistoryForProvider(history []providers.Message) []providers... FILE: pkg/agent/context_cache_test.go function setupWorkspace (line 16) | func setupWorkspace(t *testing.T, files map[string]string) string { function TestSingleSystemMessage (line 38) | func TestSingleSystemMessage(t *testing.T) { function TestBuildMessages_CurrentSenderDynamicContext (line 129) | func TestBuildMessages_CurrentSenderDynamicContext(t *testing.T) { function TestMtimeAutoInvalidation (line 195) | func TestMtimeAutoInvalidation(t *testing.T) { function TestExplicitInvalidateCache (line 281) | func TestExplicitInvalidateCache(t *testing.T) { function TestCacheStability (line 308) | func TestCacheStability(t *testing.T) { function TestNewFileCreationInvalidatesCache (line 337) | func TestNewFileCreationInvalidatesCache(t *testing.T) { function TestSkillFileContentChange (line 396) | func TestSkillFileContentChange(t *testing.T) { function TestGlobalSkillFileContentChange (line 450) | func TestGlobalSkillFileContentChange(t *testing.T) { function TestBuiltinSkillFileContentChange (line 507) | func TestBuiltinSkillFileContentChange(t *testing.T) { function TestSkillFileDeletionInvalidatesCache (line 567) | func TestSkillFileDeletionInvalidatesCache(t *testing.T) { function TestConcurrentBuildSystemPromptWithCache (line 608) | func TestConcurrentBuildSystemPromptWithCache(t *testing.T) { function TestEmptyWorkspaceBaselineDetectsNewFiles (line 675) | func TestEmptyWorkspaceBaselineDetectsNewFiles(t *testing.T) { function BenchmarkBuildMessagesWithCache (line 711) | func BenchmarkBuildMessagesWithCache(b *testing.B) { FILE: pkg/agent/context_test.go function msg (line 9) | func msg(role, content string) providers.Message { function assistantWithTools (line 13) | func assistantWithTools(toolIDs ...string) providers.Message { function toolResult (line 21) | func toolResult(id string) providers.Message { function TestSanitizeHistoryForProvider_EmptyHistory (line 25) | func TestSanitizeHistoryForProvider_EmptyHistory(t *testing.T) { function TestSanitizeHistoryForProvider_SingleToolCall (line 37) | func TestSanitizeHistoryForProvider_SingleToolCall(t *testing.T) { function TestSanitizeHistoryForProvider_MultiToolCalls (line 52) | func TestSanitizeHistoryForProvider_MultiToolCalls(t *testing.T) { function TestSanitizeHistoryForProvider_AssistantToolCallAfterPlainAssistant (line 68) | func TestSanitizeHistoryForProvider_AssistantToolCallAfterPlainAssistant... function TestSanitizeHistoryForProvider_OrphanedLeadingTool (line 83) | func TestSanitizeHistoryForProvider_OrphanedLeadingTool(t *testing.T) { function TestSanitizeHistoryForProvider_ToolAfterUserDropped (line 96) | func TestSanitizeHistoryForProvider_ToolAfterUserDropped(t *testing.T) { function TestSanitizeHistoryForProvider_ToolAfterAssistantNoToolCalls (line 109) | func TestSanitizeHistoryForProvider_ToolAfterAssistantNoToolCalls(t *tes... function TestSanitizeHistoryForProvider_AssistantToolCallAtStart (line 123) | func TestSanitizeHistoryForProvider_AssistantToolCallAtStart(t *testing.... function TestSanitizeHistoryForProvider_MultiToolCallsThenNewRound (line 137) | func TestSanitizeHistoryForProvider_MultiToolCallsThenNewRound(t *testin... function TestSanitizeHistoryForProvider_ConsecutiveMultiToolRounds (line 157) | func TestSanitizeHistoryForProvider_ConsecutiveMultiToolRounds(t *testin... function TestSanitizeHistoryForProvider_PlainConversation (line 176) | func TestSanitizeHistoryForProvider_PlainConversation(t *testing.T) { function roles (line 191) | func roles(msgs []providers.Message) []string { function assertRoles (line 199) | func assertRoles(t *testing.T, msgs []providers.Message, expected ...str... function TestSanitizeHistoryForProvider_IncompleteToolResults (line 215) | func TestSanitizeHistoryForProvider_IncompleteToolResults(t *testing.T) { function TestSanitizeHistoryForProvider_MissingAllToolResults (line 238) | func TestSanitizeHistoryForProvider_MissingAllToolResults(t *testing.T) { function TestSanitizeHistoryForProvider_PartialToolResultsInMiddle (line 258) | func TestSanitizeHistoryForProvider_PartialToolResultsInMiddle(t *testin... FILE: pkg/agent/instance.go type AgentInstance (line 23) | type AgentInstance struct method Close (line 266) | func (a *AgentInstance) Close() error { function NewAgentInstance (line 54) | func NewAgentInstance( function resolveAgentWorkspace (line 201) | func resolveAgentWorkspace(agentCfg *config.AgentConfig, defaults *confi... function resolveAgentModel (line 215) | func resolveAgentModel(agentCfg *config.AgentConfig, defaults *config.Ag... function resolveAgentFallbacks (line 223) | func resolveAgentFallbacks(agentCfg *config.AgentConfig, defaults *confi... function compilePatterns (line 230) | func compilePatterns(patterns []string) []*regexp.Regexp { function buildAllowReadPatterns (line 243) | func buildAllowReadPatterns(cfg *config.Config) []*regexp.Regexp { function mediaTempDirPattern (line 260) | func mediaTempDirPattern() string { function initSessionStore (line 277) | func initSessionStore(dir string) session.SessionStore { function expandHome (line 300) | func expandHome(path string) string { FILE: pkg/agent/instance_test.go function TestNewAgentInstance_UsesDefaultsTemperatureAndMaxTokens (line 14) | func TestNewAgentInstance_UsesDefaultsTemperatureAndMaxTokens(t *testing... function TestNewAgentInstance_DefaultsTemperatureWhenZero (line 46) | func TestNewAgentInstance_DefaultsTemperatureWhenZero(t *testing.T) { function TestNewAgentInstance_DefaultsTemperatureWhenUnset (line 75) | func TestNewAgentInstance_DefaultsTemperatureWhenUnset(t *testing.T) { function TestNewAgentInstance_ResolveCandidatesFromModelListAlias (line 101) | func TestNewAgentInstance_ResolveCandidatesFromModelListAlias(t *testing... function TestNewAgentInstance_AllowsMediaTempDirForReadListAndExec (line 168) | func TestNewAgentInstance_AllowsMediaTempDirForReadListAndExec(t *testin... function TestNewAgentInstance_InvalidExecConfigDoesNotExit (line 250) | func TestNewAgentInstance_InvalidExecConfigDoesNotExit(t *testing.T) { FILE: pkg/agent/loop.go type AgentLoop (line 38) | type AgentLoop struct method Run (line 265) | func (al *AgentLoop) Run(ctx context.Context) error { method Stop (line 347) | func (al *AgentLoop) Stop() { method Close (line 352) | func (al *AgentLoop) Close() { method RegisterTool (line 367) | func (al *AgentLoop) RegisterTool(tool tools.Tool) { method SetChannelManager (line 376) | func (al *AgentLoop) SetChannelManager(cm *channels.Manager) { method ReloadProviderAndConfig (line 383) | func (al *AgentLoop) ReloadProviderAndConfig( method GetRegistry (line 477) | func (al *AgentLoop) GetRegistry() *AgentRegistry { method GetConfig (line 484) | func (al *AgentLoop) GetConfig() *config.Config { method SetMediaStore (line 491) | func (al *AgentLoop) SetMediaStore(s media.MediaStore) { method SetTranscriber (line 504) | func (al *AgentLoop) SetTranscriber(t voice.Transcriber) { method SetReloadFunc (line 509) | func (al *AgentLoop) SetReloadFunc(fn func() error) { method transcribeAudioInMessage (line 518) | func (al *AgentLoop) transcribeAudioInMessage(ctx context.Context, msg... method sendTranscriptionFeedback (line 573) | func (al *AgentLoop) sendTranscriptionFeedback( method RecordLastChannel (line 642) | func (al *AgentLoop) RecordLastChannel(channel string) error { method RecordLastChatID (line 651) | func (al *AgentLoop) RecordLastChatID(chatID string) error { method ProcessDirect (line 658) | func (al *AgentLoop) ProcessDirect( method ProcessDirectWithChannel (line 665) | func (al *AgentLoop) ProcessDirectWithChannel( method ProcessHeartbeat (line 686) | func (al *AgentLoop) ProcessHeartbeat( method processMessage (line 706) | func (al *AgentLoop) processMessage(ctx context.Context, msg bus.Inbou... method resolveMessageRoute (line 787) | func (al *AgentLoop) resolveMessageRoute(msg bus.InboundMessage) (rout... method processSystemMessage (line 816) | func (al *AgentLoop) processSystemMessage( method runAgentLoop (line 882) | func (al *AgentLoop) runAgentLoop( method targetReasoningChannelID (line 972) | func (al *AgentLoop) targetReasoningChannelID(channelName string) (cha... method handleReasoning (line 982) | func (al *AgentLoop) handleReasoning( method runLLMIteration (line 1029) | func (al *AgentLoop) runLLMIteration( method selectCandidates (line 1480) | func (al *AgentLoop) selectCandidates( method maybeSummarize (line 1511) | func (al *AgentLoop) maybeSummarize(agent *AgentInstance, sessionKey, ... method forceCompression (line 1530) | func (al *AgentLoop) forceCompression(agent *AgentInstance, sessionKey... method GetStartupInfo (line 1582) | func (al *AgentLoop) GetStartupInfo() map[string]any { method summarizeSession (line 1670) | func (al *AgentLoop) summarizeSession(agent *AgentInstance, sessionKey... method findNearestUserMessage (line 1754) | func (al *AgentLoop) findNearestUserMessage(messages []providers.Messa... method retryLLMCall (line 1778) | func (al *AgentLoop) retryLLMCall( method summarizeBatch (line 1820) | func (al *AgentLoop) summarizeBatch( method estimateTokens (line 1887) | func (al *AgentLoop) estimateTokens(messages []providers.Message) int { method handleCommand (line 1896) | func (al *AgentLoop) handleCommand( method buildCommandsRuntime (line 1939) | func (al *AgentLoop) buildCommandsRuntime(agent *AgentInstance, opts *... type processOptions (line 58) | type processOptions struct constant defaultResponse (line 73) | defaultResponse = "I've completed processing but have no respo... constant sessionKeyAgentPrefix (line 74) | sessionKeyAgentPrefix = "agent:" constant metadataKeyAccountID (line 75) | metadataKeyAccountID = "account_id" constant metadataKeyGuildID (line 76) | metadataKeyGuildID = "guild_id" constant metadataKeyTeamID (line 77) | metadataKeyTeamID = "team_id" constant metadataKeyParentPeerKind (line 78) | metadataKeyParentPeerKind = "parent_peer_kind" constant metadataKeyParentPeerID (line 79) | metadataKeyParentPeerID = "parent_peer_id" function NewAgentLoop (line 82) | func NewAgentLoop( function registerSharedTools (line 117) | func registerSharedTools( function inferMediaType (line 612) | func inferMediaType(filename, contentType string) string { function resolveScopeKey (line 809) | func resolveScopeKey(route routing.ResolvedRoute, msgSessionKey string) ... function formatMessagesForLog (line 1611) | func formatMessagesForLog(messages []providers.Message) string { function formatToolsForLog (line 1647) | func formatToolsForLog(toolDefs []providers.ToolDefinition) string { function mapCommandError (line 2021) | func mapCommandError(result commands.ExecuteResult) string { function extractPeer (line 2029) | func extractPeer(msg bus.InboundMessage) *routing.RoutePeer { function inboundMetadata (line 2044) | func inboundMetadata(msg bus.InboundMessage, key string) string { function extractParentPeer (line 2052) | func extractParentPeer(msg bus.InboundMessage) *routing.RoutePeer { function isNativeSearchProvider (line 2063) | func isNativeSearchProvider(p providers.LLMProvider) bool { function filterClientWebSearch (line 2072) | func filterClientWebSearch(tools []providers.ToolDefinition) []providers... function extractProvider (line 2084) | func extractProvider(registry *AgentRegistry) (providers.LLMProvider, bo... FILE: pkg/agent/loop_mcp.go type mcpRuntime (line 20) | type mcpRuntime struct method setManager (line 27) | func (r *mcpRuntime) setManager(manager *mcp.Manager) { method setInitErr (line 34) | func (r *mcpRuntime) setInitErr(err error) { method getInitErr (line 40) | func (r *mcpRuntime) getInitErr() error { method takeManager (line 46) | func (r *mcpRuntime) takeManager() *mcp.Manager { method hasManager (line 54) | func (r *mcpRuntime) hasManager() bool { method ensureMCPInitialized (line 62) | func (al *AgentLoop) ensureMCPInitialized(ctx context.Context) error { function serverIsDeferred (line 215) | func serverIsDeferred(discoveryEnabled bool, serverCfg config.MCPServerC... FILE: pkg/agent/loop_mcp_test.go function boolPtr (line 15) | func boolPtr(b bool) *bool { return &b } function TestServerIsDeferred (line 17) | func TestServerIsDeferred(t *testing.T) { FILE: pkg/agent/loop_media.go function resolveMediaRefs (line 28) | func resolveMediaRefs(messages []providers.Message, store media.MediaSto... function detectMIME (line 92) | func detectMIME(localPath string, meta media.MediaMeta) string { function encodeImageToDataURL (line 105) | func encodeImageToDataURL(localPath, mime string, info os.FileInfo, maxS... function buildPathTag (line 146) | func buildPathTag(mime, localPath string) string { function injectPathTags (line 159) | func injectPathTags(content string, tags []string) string { FILE: pkg/agent/loop_test.go type fakeChannel (line 25) | type fakeChannel struct method Name (line 27) | func (f *fakeChannel) Name() string ... method Start (line 28) | func (f *fakeChannel) Start(ctx context.Context) error ... method Stop (line 29) | func (f *fakeChannel) Stop(ctx context.Context) error ... method Send (line 30) | func (f *fakeChannel) Send(ctx context.Context, msg bus.OutboundMessag... method IsRunning (line 31) | func (f *fakeChannel) IsRunning() bool ... method IsAllowed (line 32) | func (f *fakeChannel) IsAllowed(string) bool ... method IsAllowedSender (line 33) | func (f *fakeChannel) IsAllowedSender(sender bus.SenderInfo) bool ... method ReasoningChannelID (line 34) | func (f *fakeChannel) ReasoningChannelID() string ... type recordingProvider (line 36) | type recordingProvider struct method Chat (line 40) | func (r *recordingProvider) Chat( method GetDefaultModel (line 54) | func (r *recordingProvider) GetDefaultModel() string { function newTestAgentLoop (line 58) | func newTestAgentLoop( function TestProcessMessage_IncludesCurrentSenderInDynamicContext (line 82) | func TestProcessMessage_IncludesCurrentSenderInDynamicContext(t *testing... function TestRecordLastChannel (line 135) | func TestRecordLastChannel(t *testing.T) { function TestRecordLastChatID (line 152) | func TestRecordLastChatID(t *testing.T) { function TestNewAgentLoop_StateInitialized (line 169) | func TestNewAgentLoop_StateInitialized(t *testing.T) { function TestToolRegistry_ToolRegistration (line 207) | func TestToolRegistry_ToolRegistration(t *testing.T) { function TestToolContext_Updates (line 247) | func TestToolContext_Updates(t *testing.T) { function TestToolRegistry_GetDefinitions (line 264) | func TestToolRegistry_GetDefinitions(t *testing.T) { function TestAgentLoop_GetStartupInfo (line 302) | func TestAgentLoop_GetStartupInfo(t *testing.T) { function TestAgentLoop_Stop (line 344) | func TestAgentLoop_Stop(t *testing.T) { type simpleMockProvider (line 379) | type simpleMockProvider struct method Chat (line 383) | func (m *simpleMockProvider) Chat( method GetDefaultModel (line 396) | func (m *simpleMockProvider) GetDefaultModel() string { type countingMockProvider (line 400) | type countingMockProvider struct method Chat (line 405) | func (m *countingMockProvider) Chat( method GetDefaultModel (line 419) | func (m *countingMockProvider) GetDefaultModel() string { type mockCustomTool (line 424) | type mockCustomTool struct method Name (line 426) | func (m *mockCustomTool) Name() string { method Description (line 430) | func (m *mockCustomTool) Description() string { method Parameters (line 434) | func (m *mockCustomTool) Parameters() map[string]any { method Execute (line 441) | func (m *mockCustomTool) Execute(ctx context.Context, args map[string]... type testHelper (line 446) | type testHelper struct method executeAndGetResponse (line 490) | func (h testHelper) executeAndGetResponse(tb testing.TB, ctx context.C... function newChatCompletionTestServer (line 450) | func newChatCompletionTestServer( constant responseTimeout (line 502) | responseTimeout = 3 * time.Second function TestProcessMessage_UsesRouteSessionKey (line 504) | func TestProcessMessage_UsesRouteSessionKey(t *testing.T) { function TestProcessMessage_CommandOutcomes (line 560) | func TestProcessMessage_CommandOutcomes(t *testing.T) { function TestProcessMessage_SwitchModelShowModelConsistency (line 639) | func TestProcessMessage_SwitchModelShowModelConsistency(t *testing.T) { function TestProcessMessage_SwitchModelRejectsUnknownAlias (line 710) | func TestProcessMessage_SwitchModelRejectsUnknownAlias(t *testing.T) { function TestProcessMessage_SwitchModelRoutesSubsequentRequestsToSelectedProvider (line 775) | func TestProcessMessage_SwitchModelRoutesSubsequentRequestsToSelectedPro... function TestToolResult_SilentToolDoesNotSendUserMessage (line 892) | func TestToolResult_SilentToolDoesNotSendUserMessage(t *testing.T) { function TestToolResult_UserFacingToolDoesSendMessage (line 934) | func TestToolResult_UserFacingToolDoesSendMessage(t *testing.T) { type failFirstMockProvider (line 976) | type failFirstMockProvider struct method Chat (line 983) | func (m *failFirstMockProvider) Chat( method GetDefaultModel (line 1000) | func (m *failFirstMockProvider) GetDefaultModel() string { function TestAgentLoop_ContextExhaustionRetry (line 1005) | func TestAgentLoop_ContextExhaustionRetry(t *testing.T) { function TestProcessDirectWithChannel_TriggersMCPInitialization (line 1090) | func TestProcessDirectWithChannel_TriggersMCPInitialization(t *testing.T) { function TestTargetReasoningChannelID_AllChannels (line 1143) | func TestTargetReasoningChannelID_AllChannels(t *testing.T) { function TestHandleReasoning (line 1212) | func TestHandleReasoning(t *testing.T) { function TestResolveMediaRefs_ResolvesToBase64 (line 1384) | func TestResolveMediaRefs_ResolvesToBase64(t *testing.T) { function TestResolveMediaRefs_SkipsOversizedFile (line 1420) | func TestResolveMediaRefs_SkipsOversizedFile(t *testing.T) { function TestResolveMediaRefs_UnknownTypeInjectsPath (line 1444) | func TestResolveMediaRefs_UnknownTypeInjectsPath(t *testing.T) { function TestResolveMediaRefs_PassesThroughNonMediaRefs (line 1468) | func TestResolveMediaRefs_PassesThroughNonMediaRefs(t *testing.T) { function TestResolveMediaRefs_DoesNotMutateOriginal (line 1479) | func TestResolveMediaRefs_DoesNotMutateOriginal(t *testing.T) { function TestResolveMediaRefs_UsesMetaContentType (line 1504) | func TestResolveMediaRefs_UsesMetaContentType(t *testing.T) { function TestResolveMediaRefs_PDFInjectsFilePath (line 1527) | func TestResolveMediaRefs_PDFInjectsFilePath(t *testing.T) { function TestResolveMediaRefs_AudioInjectsAudioPath (line 1550) | func TestResolveMediaRefs_AudioInjectsAudioPath(t *testing.T) { function TestResolveMediaRefs_VideoInjectsVideoPath (line 1572) | func TestResolveMediaRefs_VideoInjectsVideoPath(t *testing.T) { function TestResolveMediaRefs_NoGenericTagAppendsPath (line 1594) | func TestResolveMediaRefs_NoGenericTagAppendsPath(t *testing.T) { function TestResolveMediaRefs_EmptyContentGetsPathTag (line 1613) | func TestResolveMediaRefs_EmptyContentGetsPathTag(t *testing.T) { function TestResolveMediaRefs_MixedImageAndFile (line 1633) | func TestResolveMediaRefs_MixedImageAndFile(t *testing.T) { type nativeSearchProvider (line 1670) | type nativeSearchProvider struct method Chat (line 1674) | func (p *nativeSearchProvider) Chat( method GetDefaultModel (line 1681) | func (p *nativeSearchProvider) GetDefaultModel() string { return "test... method SupportsNativeSearch (line 1683) | func (p *nativeSearchProvider) SupportsNativeSearch() bool { return p.... type plainProvider (line 1685) | type plainProvider struct method Chat (line 1687) | func (p *plainProvider) Chat( method GetDefaultModel (line 1694) | func (p *plainProvider) GetDefaultModel() string { return "test-model" } function TestIsNativeSearchProvider_Supported (line 1696) | func TestIsNativeSearchProvider_Supported(t *testing.T) { function TestIsNativeSearchProvider_NotSupported (line 1702) | func TestIsNativeSearchProvider_NotSupported(t *testing.T) { function TestIsNativeSearchProvider_NoInterface (line 1708) | func TestIsNativeSearchProvider_NoInterface(t *testing.T) { function TestFilterClientWebSearch_RemovesWebSearch (line 1714) | func TestFilterClientWebSearch_RemovesWebSearch(t *testing.T) { function TestFilterClientWebSearch_NoWebSearch (line 1731) | func TestFilterClientWebSearch_NoWebSearch(t *testing.T) { function TestFilterClientWebSearch_EmptyInput (line 1742) | func TestFilterClientWebSearch_EmptyInput(t *testing.T) { FILE: pkg/agent/memory.go type MemoryStore (line 22) | type MemoryStore struct method getTodayFile (line 45) | func (ms *MemoryStore) getTodayFile() string { method ReadLongTerm (line 54) | func (ms *MemoryStore) ReadLongTerm() string { method WriteLongTerm (line 62) | func (ms *MemoryStore) WriteLongTerm(content string) error { method ReadToday (line 70) | func (ms *MemoryStore) ReadToday() string { method AppendToday (line 80) | func (ms *MemoryStore) AppendToday(content string) error { method GetRecentDailyNotes (line 110) | func (ms *MemoryStore) GetRecentDailyNotes(days int) string { method GetMemoryContext (line 134) | func (ms *MemoryStore) GetMemoryContext() string { function NewMemoryStore (line 30) | func NewMemoryStore(workspace string) *MemoryStore { FILE: pkg/agent/mock_provider_test.go type mockProvider (line 9) | type mockProvider struct method Chat (line 11) | func (m *mockProvider) Chat( method GetDefaultModel (line 24) | func (m *mockProvider) GetDefaultModel() string { FILE: pkg/agent/model_resolution.go function buildModelListResolver (line 11) | func buildModelListResolver(cfg *config.Config) func(raw string) (string... function resolveModelCandidates (line 51) | func resolveModelCandidates( function resolvedCandidateModel (line 67) | func resolvedCandidateModel(candidates []providers.FallbackCandidate, fa... function resolvedCandidateProvider (line 74) | func resolvedCandidateProvider(candidates []providers.FallbackCandidate,... function resolvedModelConfig (line 81) | func resolvedModelConfig(cfg *config.Config, modelName, workspace string... FILE: pkg/agent/registry.go type AgentRegistry (line 14) | type AgentRegistry struct method GetAgent (line 59) | func (r *AgentRegistry) GetAgent(agentID string) (*AgentInstance, bool) { method ResolveRoute (line 68) | func (r *AgentRegistry) ResolveRoute(input routing.RouteInput) routing... method ListAgentIDs (line 73) | func (r *AgentRegistry) ListAgentIDs() []string { method CanSpawnSubagent (line 84) | func (r *AgentRegistry) CanSpawnSubagent(parentAgentID, targetAgentID ... method ForEachTool (line 107) | func (r *AgentRegistry) ForEachTool(name string, fn func(tools.Tool)) { method Close (line 118) | func (r *AgentRegistry) Close() { method GetDefaultAgent (line 130) | func (r *AgentRegistry) GetDefaultAgent() *AgentInstance { function NewAgentRegistry (line 21) | func NewAgentRegistry( FILE: pkg/agent/registry_test.go type mockRegistryProvider (line 11) | type mockRegistryProvider struct method Chat (line 13) | func (m *mockRegistryProvider) Chat( method GetDefaultModel (line 23) | func (m *mockRegistryProvider) GetDefaultModel() string { function testCfg (line 27) | func testCfg(agents []config.AgentConfig) *config.Config { function TestNewAgentRegistry_ImplicitMain (line 41) | func TestNewAgentRegistry_ImplicitMain(t *testing.T) { function TestNewAgentRegistry_ExplicitAgents (line 59) | func TestNewAgentRegistry_ExplicitAgents(t *testing.T) { function TestAgentRegistry_GetAgent_Normalize (line 85) | func TestAgentRegistry_GetAgent_Normalize(t *testing.T) { function TestAgentRegistry_GetDefaultAgent (line 100) | func TestAgentRegistry_GetDefaultAgent(t *testing.T) { function TestAgentRegistry_CanSpawnSubagent (line 114) | func TestAgentRegistry_CanSpawnSubagent(t *testing.T) { function TestAgentRegistry_CanSpawnSubagent_Wildcard (line 143) | func TestAgentRegistry_CanSpawnSubagent_Wildcard(t *testing.T) { function TestAgentInstance_Model (line 164) | func TestAgentInstance_Model(t *testing.T) { function TestAgentInstance_FallbackInheritance (line 177) | func TestAgentInstance_FallbackInheritance(t *testing.T) { function TestAgentInstance_FallbackExplicitEmpty (line 190) | func TestAgentInstance_FallbackExplicitEmpty(t *testing.T) { FILE: pkg/agent/thinking.go type ThinkingLevel (line 10) | type ThinkingLevel constant ThinkingOff (line 13) | ThinkingOff ThinkingLevel = "off" constant ThinkingLow (line 14) | ThinkingLow ThinkingLevel = "low" constant ThinkingMedium (line 15) | ThinkingMedium ThinkingLevel = "medium" constant ThinkingHigh (line 16) | ThinkingHigh ThinkingLevel = "high" constant ThinkingXHigh (line 17) | ThinkingXHigh ThinkingLevel = "xhigh" constant ThinkingAdaptive (line 18) | ThinkingAdaptive ThinkingLevel = "adaptive" function parseThinkingLevel (line 24) | func parseThinkingLevel(level string) ThinkingLevel { FILE: pkg/agent/thinking_test.go function TestParseThinkingLevel (line 5) | func TestParseThinkingLevel(t *testing.T) { FILE: pkg/auth/anthropic_usage.go constant anthropicBetaHeader (line 12) | anthropicBetaHeader = "oauth-2025-04-20" constant anthropicAPIVersion (line 13) | anthropicAPIVersion = "2023-06-01" function setAnthropicUsageURL (line 20) | func setAnthropicUsageURL(url string) { anthropicUsageURL = url } type AnthropicUsage (line 22) | type AnthropicUsage struct function FetchAnthropicUsage (line 27) | func FetchAnthropicUsage(token string) (*AnthropicUsage, error) { FILE: pkg/auth/anthropic_usage_test.go function TestFetchAnthropicUsage_Success (line 10) | func TestFetchAnthropicUsage_Success(t *testing.T) { function TestFetchAnthropicUsage_Forbidden (line 40) | func TestFetchAnthropicUsage_Forbidden(t *testing.T) { function TestFetchAnthropicUsage_ServerError (line 60) | func TestFetchAnthropicUsage_ServerError(t *testing.T) { function TestFetchAnthropicUsage_MalformedJSON (line 80) | func TestFetchAnthropicUsage_MalformedJSON(t *testing.T) { FILE: pkg/auth/oauth.go type OAuthProviderConfig (line 23) | type OAuthProviderConfig struct function OpenAIOAuthConfig (line 33) | func OpenAIOAuthConfig() OAuthProviderConfig { function GoogleAntigravityOAuthConfig (line 45) | func GoogleAntigravityOAuthConfig() OAuthProviderConfig { function decodeBase64 (line 61) | func decodeBase64(s string) string { function GenerateState (line 70) | func GenerateState() (string, error) { function LoginBrowser (line 78) | func LoginBrowser(cfg OAuthProviderConfig) (*AuthCredential, error) { type callbackResult (line 179) | type callbackResult struct type deviceCodeResponse (line 184) | type deviceCodeResponse struct type DeviceCodeInfo (line 191) | type DeviceCodeInfo struct function RequestDeviceCode (line 200) | func RequestDeviceCode(cfg OAuthProviderConfig) (*DeviceCodeInfo, error) { function PollDeviceCodeOnce (line 242) | func PollDeviceCodeOnce(cfg OAuthProviderConfig, deviceAuthID, userCode ... function parseDeviceCodeResponse (line 246) | func parseDeviceCodeResponse(body []byte) (deviceCodeResponse, error) { function parseFlexibleInt (line 269) | func parseFlexibleInt(raw json.RawMessage) (int, error) { function LoginDeviceCode (line 291) | func LoginDeviceCode(cfg OAuthProviderConfig) (*AuthCredential, error) { function pollDeviceCode (line 349) | func pollDeviceCode(cfg OAuthProviderConfig, deviceAuthID, userCode stri... function RefreshAccessToken (line 387) | func RefreshAccessToken(cred *AuthCredential, cfg OAuthProviderConfig) (... function BuildAuthorizeURL (line 440) | func BuildAuthorizeURL(cfg OAuthProviderConfig, pkce PKCECodes, state, r... function buildAuthorizeURL (line 444) | func buildAuthorizeURL(cfg OAuthProviderConfig, pkce PKCECodes, state, r... function ExchangeCodeForTokens (line 480) | func ExchangeCodeForTokens(cfg OAuthProviderConfig, code, codeVerifier, ... function parseTokenResponse (line 520) | func parseTokenResponse(body []byte, provider string) (*AuthCredential, ... function extractAccountID (line 560) | func extractAccountID(token string) string { function parseJWTClaims (line 593) | func parseJWTClaims(token string) (map[string]any, error) { function base64URLDecode (line 620) | func base64URLDecode(s string) ([]byte, error) { function OpenBrowser (line 626) | func OpenBrowser(url string) error { FILE: pkg/auth/oauth_test.go function makeJWTForClaims (line 13) | func makeJWTForClaims(t *testing.T, claims map[string]any) string { function TestBuildAuthorizeURL (line 25) | func TestBuildAuthorizeURL(t *testing.T) { function TestBuildAuthorizeURLOpenAIExtras (line 69) | func TestBuildAuthorizeURLOpenAIExtras(t *testing.T) { function TestParseTokenResponse (line 91) | func TestParseTokenResponse(t *testing.T) { function TestParseTokenResponseExtractsAccountIDFromIDToken (line 122) | func TestParseTokenResponseExtractsAccountIDFromIDToken(t *testing.T) { function TestExtractAccountIDFromOrganizationsFallback (line 141) | func TestExtractAccountIDFromOrganizationsFallback(t *testing.T) { function TestParseTokenResponseNoAccessToken (line 153) | func TestParseTokenResponseNoAccessToken(t *testing.T) { function TestParseTokenResponseAccountIDFromIDToken (line 161) | func TestParseTokenResponseAccountIDFromIDToken(t *testing.T) { function makeJWTWithAccountID (line 181) | func makeJWTWithAccountID(accountID string) string { function TestExchangeCodeForTokens (line 189) | func TestExchangeCodeForTokens(t *testing.T) { function TestRefreshAccessToken (line 232) | func TestRefreshAccessToken(t *testing.T) { function TestRefreshAccessTokenNoRefreshToken (line 279) | func TestRefreshAccessTokenNoRefreshToken(t *testing.T) { function TestRefreshAccessTokenPreservesRefreshAndAccountID (line 293) | func TestRefreshAccessTokenPreservesRefreshAndAccountID(t *testing.T) { function TestOpenAIOAuthConfig (line 324) | func TestOpenAIOAuthConfig(t *testing.T) { function TestParseDeviceCodeResponseIntervalAsNumber (line 337) | func TestParseDeviceCodeResponseIntervalAsNumber(t *testing.T) { function TestParseDeviceCodeResponseIntervalAsString (line 356) | func TestParseDeviceCodeResponseIntervalAsString(t *testing.T) { function TestParseDeviceCodeResponseInvalidInterval (line 369) | func TestParseDeviceCodeResponseInvalidInterval(t *testing.T) { FILE: pkg/auth/pkce.go type PKCECodes (line 9) | type PKCECodes struct function GeneratePKCE (line 14) | func GeneratePKCE() (PKCECodes, error) { FILE: pkg/auth/pkce_test.go function TestGeneratePKCE (line 9) | func TestGeneratePKCE(t *testing.T) { function TestGeneratePKCEUniqueness (line 37) | func TestGeneratePKCEUniqueness(t *testing.T) { FILE: pkg/auth/store.go type AuthCredential (line 13) | type AuthCredential struct method IsExpired (line 28) | func (c *AuthCredential) IsExpired() bool { method NeedsRefresh (line 35) | func (c *AuthCredential) NeedsRefresh() bool { type AuthStore (line 24) | type AuthStore struct function authFilePath (line 42) | func authFilePath() string { function LoadStore (line 50) | func LoadStore() (*AuthStore, error) { function SaveStore (line 70) | func SaveStore(store *AuthStore) error { function GetCredential (line 81) | func GetCredential(provider string) (*AuthCredential, error) { function SetCredential (line 93) | func SetCredential(provider string, cred *AuthCredential) error { function DeleteCredential (line 102) | func DeleteCredential(provider string) error { function DeleteAllCredentials (line 111) | func DeleteAllCredentials() error { FILE: pkg/auth/store_test.go function TestAuthCredentialIsExpired (line 10) | func TestAuthCredentialIsExpired(t *testing.T) { function TestAuthCredentialNeedsRefresh (line 31) | func TestAuthCredentialNeedsRefresh(t *testing.T) { function TestStoreRoundtrip (line 53) | func TestStoreRoundtrip(t *testing.T) { function TestStoreFilePermissions (line 90) | func TestStoreFilePermissions(t *testing.T) { function TestStoreMultiProvider (line 116) | func TestStoreMultiProvider(t *testing.T) { function TestDeleteCredential (line 149) | func TestDeleteCredential(t *testing.T) { function TestLoadStoreEmpty (line 173) | func TestLoadStoreEmpty(t *testing.T) { FILE: pkg/auth/token.go function LoginPasteToken (line 10) | func LoginPasteToken(provider string, r io.Reader) (*AuthCredential, err... function LoginSetupToken (line 34) | func LoginSetupToken(r io.Reader) (*AuthCredential, error) { function providerDisplayName (line 63) | func providerDisplayName(provider string) string { FILE: pkg/auth/token_test.go function TestLoginSetupToken (line 8) | func TestLoginSetupToken(t *testing.T) { function TestLoginSetupToken_EmptyReader (line 55) | func TestLoginSetupToken_EmptyReader(t *testing.T) { FILE: pkg/bus/bus.go constant defaultBusBufferSize (line 15) | defaultBusBufferSize = 64 type MessageBus (line 17) | type MessageBus struct method PublishInbound (line 65) | func (mb *MessageBus) PublishInbound(ctx context.Context, msg InboundM... method InboundChan (line 69) | func (mb *MessageBus) InboundChan() <-chan InboundMessage { method PublishOutbound (line 73) | func (mb *MessageBus) PublishOutbound(ctx context.Context, msg Outboun... method OutboundChan (line 77) | func (mb *MessageBus) OutboundChan() <-chan OutboundMessage { method PublishOutboundMedia (line 81) | func (mb *MessageBus) PublishOutboundMedia(ctx context.Context, msg Ou... method OutboundMediaChan (line 85) | func (mb *MessageBus) OutboundMediaChan() <-chan OutboundMediaMessage { method Close (line 89) | func (mb *MessageBus) Close() { function NewMessageBus (line 28) | func NewMessageBus() *MessageBus { function publish (line 37) | func publish[T any](ctx context.Context, mb *MessageBus, ch chan T, msg ... FILE: pkg/bus/bus_test.go function TestPublishConsume (line 10) | func TestPublishConsume(t *testing.T) { function TestPublishOutboundSubscribe (line 39) | func TestPublishOutboundSubscribe(t *testing.T) { function TestPublishInbound_ContextCancel (line 64) | func TestPublishInbound_ContextCancel(t *testing.T) { function TestPublishInbound_BusClosed (line 89) | func TestPublishInbound_BusClosed(t *testing.T) { function TestPublishOutbound_BusClosed (line 99) | func TestPublishOutbound_BusClosed(t *testing.T) { function TestConsumeInbound_ContextCancel (line 109) | func TestConsumeInbound_ContextCancel(t *testing.T) { function TestConsumeInbound_BusClosed (line 138) | func TestConsumeInbound_BusClosed(t *testing.T) { function TestSubscribeOutbound_BusClosed (line 156) | func TestSubscribeOutbound_BusClosed(t *testing.T) { function TestConcurrentPublishClose (line 166) | func TestConcurrentPublishClose(t *testing.T) { function TestPublishInbound_FullBuffer (line 208) | func TestPublishInbound_FullBuffer(t *testing.T) { function TestCloseIdempotent (line 234) | func TestCloseIdempotent(t *testing.T) { FILE: pkg/bus/types.go type Peer (line 4) | type Peer struct type SenderInfo (line 10) | type SenderInfo struct type InboundMessage (line 18) | type InboundMessage struct type OutboundMessage (line 32) | type OutboundMessage struct type MediaPart (line 40) | type MediaPart struct type OutboundMediaMessage (line 49) | type OutboundMediaMessage struct FILE: pkg/channels/base.go function init (line 26) | func init() { function uniqueID (line 42) | func uniqueID() string { type Channel (line 47) | type Channel interface type BaseChannelOption (line 59) | type BaseChannelOption function WithMaxMessageLength (line 64) | func WithMaxMessageLength(n int) BaseChannelOption { function WithGroupTrigger (line 69) | func WithGroupTrigger(gt config.GroupTriggerConfig) BaseChannelOption { function WithReasoningChannelID (line 74) | func WithReasoningChannelID(id string) BaseChannelOption { type MessageLengthProvider (line 81) | type MessageLengthProvider interface type BaseChannel (line 85) | type BaseChannel struct method MaxMessageLength (line 120) | func (c *BaseChannel) MaxMessageLength() int { method ShouldRespondInGroup (line 136) | func (c *BaseChannel) ShouldRespondInGroup(isMentioned bool, content s... method Name (line 164) | func (c *BaseChannel) Name() string { method ReasoningChannelID (line 168) | func (c *BaseChannel) ReasoningChannelID() string { method IsRunning (line 172) | func (c *BaseChannel) IsRunning() bool { method IsAllowed (line 176) | func (c *BaseChannel) IsAllowed(senderID string) bool { method IsAllowedSender (line 218) | func (c *BaseChannel) IsAllowedSender(sender bus.SenderInfo) bool { method HandleMessage (line 232) | func (c *BaseChannel) HandleMessage( method SetRunning (line 313) | func (c *BaseChannel) SetRunning(running bool) { method SetMediaStore (line 318) | func (c *BaseChannel) SetMediaStore(s media.MediaStore) { c.mediaStore... method GetMediaStore (line 321) | func (c *BaseChannel) GetMediaStore() media.MediaStore { return c.medi... method SetPlaceholderRecorder (line 324) | func (c *BaseChannel) SetPlaceholderRecorder(r PlaceholderRecorder) { method GetPlaceholderRecorder (line 329) | func (c *BaseChannel) GetPlaceholderRecorder() PlaceholderRecorder { method SetOwner (line 335) | func (c *BaseChannel) SetOwner(ch Channel) { function NewBaseChannel (line 99) | func NewBaseChannel( function BuildMediaScope (line 340) | func BuildMediaScope(channel, chatID, messageID string) string { FILE: pkg/channels/base_test.go function TestBaseChannelIsAllowed (line 10) | func TestBaseChannelIsAllowed(t *testing.T) { function TestShouldRespondInGroup (line 59) | func TestShouldRespondInGroup(t *testing.T) { function TestIsAllowedSender (line 180) | func TestIsAllowedSender(t *testing.T) { FILE: pkg/channels/dingtalk/dingtalk.go type DingTalkChannel (line 25) | type DingTalkChannel struct method Start (line 61) | func (c *DingTalkChannel) Start(ctx context.Context) error { method Stop (line 89) | func (c *DingTalkChannel) Stop(ctx context.Context) error { method Send (line 106) | func (c *DingTalkChannel) Send(ctx context.Context, msg bus.OutboundMe... method onChatBotMessageReceived (line 134) | func (c *DingTalkChannel) onChatBotMessageReceived( method SendDirectReply (line 212) | func (c *DingTalkChannel) SendDirectReply(ctx context.Context, session... function NewDingTalkChannel (line 38) | func NewDingTalkChannel(cfg config.DingTalkConfig, messageBus *bus.Messa... FILE: pkg/channels/dingtalk/init.go function init (line 9) | func init() { FILE: pkg/channels/discord/discord.go constant sendTimeout (line 27) | sendTimeout = 10 * time.Second type DiscordChannel (line 36) | type DiscordChannel struct method Start (line 79) | func (c *DiscordChannel) Start(ctx context.Context) error { method Stop (line 107) | func (c *DiscordChannel) Stop(ctx context.Context) error { method Send (line 131) | func (c *DiscordChannel) Send(ctx context.Context, msg bus.OutboundMes... method SendMedia (line 149) | func (c *DiscordChannel) SendMedia(ctx context.Context, msg bus.Outbou... method EditMessage (line 244) | func (c *DiscordChannel) EditMessage(ctx context.Context, chatID strin... method SendPlaceholder (line 252) | func (c *DiscordChannel) SendPlaceholder(ctx context.Context, chatID s... method sendChunk (line 270) | func (c *DiscordChannel) sendChunk(ctx context.Context, channelID, con... method handleMessage (line 315) | func (c *DiscordChannel) handleMessage(s *discordgo.Session, m *discor... method startTyping (line 468) | func (c *DiscordChannel) startTyping(chatID string) { method stopTyping (line 503) | func (c *DiscordChannel) stopTyping(chatID string) { method StartTyping (line 514) | func (c *DiscordChannel) StartTyping(ctx context.Context, chatID strin... method downloadAttachment (line 519) | func (c *DiscordChannel) downloadAttachment(url, filename string) stri... method resolveDiscordRefs (line 562) | func (c *DiscordChannel) resolveDiscordRefs(s *discordgo.Session, text... method stripBotMention (line 606) | func (c *DiscordChannel) stripBotMention(text string) string { function NewDiscordChannel (line 47) | func NewDiscordChannel(cfg config.DiscordConfig, bus *bus.MessageBus) (*... function appendContent (line 308) | func appendContent(content, suffix string) string { function applyDiscordProxy (line 526) | func applyDiscordProxy(session *discordgo.Session, proxyAddr string) err... FILE: pkg/channels/discord/discord_resolve_test.go function TestChannelRefRegex (line 7) | func TestChannelRefRegex(t *testing.T) { function TestMsgLinkRegex (line 37) | func TestMsgLinkRegex(t *testing.T) { function TestMsgLinkRegex_MultipleMatches (line 88) | func TestMsgLinkRegex_MultipleMatches(t *testing.T) { FILE: pkg/channels/discord/discord_test.go function TestApplyDiscordProxy_CustomProxy (line 11) | func TestApplyDiscordProxy_CustomProxy(t *testing.T) { function TestApplyDiscordProxy_FromEnvironment (line 44) | func TestApplyDiscordProxy_FromEnvironment(t *testing.T) { function TestApplyDiscordProxy_InvalidProxyURL (line 82) | func TestApplyDiscordProxy_InvalidProxyURL(t *testing.T) { FILE: pkg/channels/discord/init.go function init (line 9) | func init() { FILE: pkg/channels/errors_test.go function TestErrorsIs (line 9) | func TestErrorsIs(t *testing.T) { function TestErrorsIsAllTypes (line 19) | func TestErrorsIsAllTypes(t *testing.T) { function TestErrorMessages (line 40) | func TestErrorMessages(t *testing.T) { FILE: pkg/channels/errutil.go function ClassifySendError (line 11) | func ClassifySendError(statusCode int, rawErr error) error { function ClassifyNetError (line 25) | func ClassifyNetError(err error) error { FILE: pkg/channels/errutil_test.go function TestClassifySendError (line 9) | func TestClassifySendError(t *testing.T) { function TestClassifySendErrorNoFalsePositive (line 49) | func TestClassifySendErrorNoFalsePositive(t *testing.T) { function TestClassifyNetError (line 80) | func TestClassifyNetError(t *testing.T) { FILE: pkg/channels/feishu/common.go function stringValue (line 15) | func stringValue(v *string) string { function buildMarkdownCard (line 24) | func buildMarkdownCard(content string) (string, error) { function extractJSONStringField (line 45) | func extractJSONStringField(content, field string) string { function extractImageKey (line 63) | func extractImageKey(content string) string { return extractJSONStringFi... function extractFileKey (line 67) | func extractFileKey(content string) string { return extractJSONStringFie... function extractFileName (line 70) | func extractFileName(content string) string { return extractJSONStringFi... function stripMentionPlaceholders (line 74) | func stripMentionPlaceholders(content string, mentions []*larkim.Mention... function extractCardImageKeys (line 91) | func extractCardImageKeys(rawContent string) (feishuKeys []string, exter... function isExternalURL (line 106) | func isExternalURL(s string) bool { function extractImageKeysRecursive (line 112) | func extractImageKeysRecursive(v any, feishuKeys, externalURLs *[]string) { FILE: pkg/channels/feishu/common_test.go function TestExtractJSONStringField (line 10) | func TestExtractJSONStringField(t *testing.T) { function TestExtractImageKey (line 71) | func TestExtractImageKey(t *testing.T) { function TestExtractFileKey (line 104) | func TestExtractFileKey(t *testing.T) { function TestExtractFileName (line 137) | func TestExtractFileName(t *testing.T) { function TestBuildMarkdownCard (line 170) | func TestBuildMarkdownCard(t *testing.T) { function TestStripMentionPlaceholders (line 230) | func TestStripMentionPlaceholders(t *testing.T) { function TestExtractCardImageKeys (line 294) | func TestExtractCardImageKeys(t *testing.T) { FILE: pkg/channels/feishu/feishu_32.go type FeishuChannel (line 15) | type FeishuChannel struct method Start (line 29) | func (c *FeishuChannel) Start(ctx context.Context) error { method Stop (line 34) | func (c *FeishuChannel) Stop(ctx context.Context) error { method Send (line 39) | func (c *FeishuChannel) Send(ctx context.Context, msg bus.OutboundMess... method EditMessage (line 44) | func (c *FeishuChannel) EditMessage(ctx context.Context, chatID, messa... method SendPlaceholder (line 49) | func (c *FeishuChannel) SendPlaceholder(ctx context.Context, chatID st... method ReactToMessage (line 54) | func (c *FeishuChannel) ReactToMessage(ctx context.Context, chatID, me... method SendMedia (line 59) | func (c *FeishuChannel) SendMedia(ctx context.Context, msg bus.Outboun... function NewFeishuChannel (line 22) | func NewFeishuChannel(cfg config.FeishuConfig, bus *bus.MessageBus) (*Fe... FILE: pkg/channels/feishu/feishu_64.go constant errCodeTenantTokenInvalid (line 36) | errCodeTenantTokenInvalid = 99991663 type FeishuChannel (line 38) | type FeishuChannel struct method Start (line 72) | func (c *FeishuChannel) Start(ctx context.Context) error { method Stop (line 118) | func (c *FeishuChannel) Stop(ctx context.Context) error { method Send (line 134) | func (c *FeishuChannel) Send(ctx context.Context, msg bus.OutboundMess... method EditMessage (line 182) | func (c *FeishuChannel) EditMessage(ctx context.Context, chatID, messa... method SendPlaceholder (line 206) | func (c *FeishuChannel) SendPlaceholder(ctx context.Context, chatID st... method ReactToMessage (line 250) | func (c *FeishuChannel) ReactToMessage(ctx context.Context, chatID, me... method SendMedia (line 313) | func (c *FeishuChannel) SendMedia(ctx context.Context, msg bus.Outboun... method sendMediaPart (line 337) | func (c *FeishuChannel) sendMediaPart( method handleMessageReceive (line 385) | func (c *FeishuChannel) handleMessageReceive(ctx context.Context, even... method fetchBotOpenID (line 494) | func (c *FeishuChannel) fetchBotOpenID(ctx context.Context) error { method isBotMentioned (line 529) | func (c *FeishuChannel) isBotMentioned(message *larkim.EventMessage) b... method downloadInboundMedia (line 593) | func (c *FeishuChannel) downloadInboundMedia( method downloadResource (line 651) | func (c *FeishuChannel) downloadResource( method sendCard (line 777) | func (c *FeishuChannel) sendCard(ctx context.Context, chatID, cardCont... method sendText (line 805) | func (c *FeishuChannel) sendText(ctx context.Context, chatID, text str... method sendImage (line 834) | func (c *FeishuChannel) sendImage(ctx context.Context, chatID string, ... method sendFile (line 880) | func (c *FeishuChannel) sendFile(ctx context.Context, chatID string, f... method invalidateTokenOnAuthError (line 957) | func (c *FeishuChannel) invalidateTokenOnAuthError(code int) { function NewFeishuChannel (line 51) | func NewFeishuChannel(cfg config.FeishuConfig, bus *bus.MessageBus) (*Fe... function extractContent (line 552) | func extractContent(messageType, rawContent string) string { function appendMediaTags (line 746) | func appendMediaTags(content, messageType string, mediaRefs []string) st... function extractFeishuSenderID (line 935) | func extractFeishuSenderID(sender *larkim.EventSender) string { FILE: pkg/channels/feishu/feishu_64_test.go function TestExtractContent (line 11) | func TestExtractContent(t *testing.T) { function TestAppendMediaTags (line 108) | func TestAppendMediaTags(t *testing.T) { function TestExtractFeishuSenderID (line 198) | func TestExtractFeishuSenderID(t *testing.T) { FILE: pkg/channels/feishu/init.go function init (line 9) | func init() { FILE: pkg/channels/feishu/token_cache.go type tokenCache (line 12) | type tokenCache struct method Set (line 26) | func (c *tokenCache) Set(_ context.Context, key, value string, ttl tim... method Get (line 33) | func (c *tokenCache) Get(_ context.Context, key string) (string, error) { method InvalidateAll (line 48) | func (c *tokenCache) InvalidateAll() { type tokenEntry (line 17) | type tokenEntry struct function newTokenCache (line 22) | func newTokenCache() *tokenCache { FILE: pkg/channels/interfaces.go type TypingCapable (line 12) | type TypingCapable interface type MessageEditor (line 18) | type MessageEditor interface type ReactionCapable (line 25) | type ReactionCapable interface type PlaceholderCapable (line 34) | type PlaceholderCapable interface type PlaceholderRecorder (line 41) | type PlaceholderRecorder interface type CommandRegistrarCapable (line 50) | type CommandRegistrarCapable interface FILE: pkg/channels/interfaces_command_test.go type mockRegistrar (line 10) | type mockRegistrar struct method RegisterCommands (line 12) | func (mockRegistrar) RegisterCommands(context.Context, []commands.Defi... function TestCommandRegistrarCapable_Compiles (line 14) | func TestCommandRegistrarCapable_Compiles(t *testing.T) { FILE: pkg/channels/irc/handler.go method onConnect (line 18) | func (c *IRCChannel) onConnect(conn *ircevent.Connection) { method onPrivmsg (line 34) | func (c *IRCChannel) onPrivmsg(conn *ircevent.Connection, e ircmsg.Messa... function nickMentionedAt (line 109) | func nickMentionedAt(content, botNick string) int { function isBotMentioned (line 135) | func isBotMentioned(content, botNick string) bool { function stripBotMention (line 140) | func stripBotMention(content, botNick string) string { FILE: pkg/channels/irc/init.go function init (line 9) | func init() { FILE: pkg/channels/irc/irc.go type IRCChannel (line 19) | type IRCChannel struct method Start (line 49) | func (c *IRCChannel) Start(ctx context.Context) error { method Stop (line 117) | func (c *IRCChannel) Stop(ctx context.Context) error { method Send (line 133) | func (c *IRCChannel) Send(ctx context.Context, msg bus.OutboundMessage... method StartTyping (line 166) | func (c *IRCChannel) StartTyping(ctx context.Context, chatID string) (... function NewIRCChannel (line 28) | func NewIRCChannel(cfg config.IRCConfig, messageBus *bus.MessageBus) (*I... function extractHost (line 188) | func extractHost(server string) string { FILE: pkg/channels/irc/irc_test.go function TestNewIRCChannel (line 10) | func TestNewIRCChannel(t *testing.T) { function TestExtractHost (line 48) | func TestExtractHost(t *testing.T) { function TestNickMentionedAt (line 69) | func TestNickMentionedAt(t *testing.T) { function TestIsBotMentioned (line 96) | func TestIsBotMentioned(t *testing.T) { function TestStripBotMention (line 123) | func TestStripBotMention(t *testing.T) { FILE: pkg/channels/line/init.go function init (line 9) | func init() { FILE: pkg/channels/line/line.go constant lineAPIBase (line 27) | lineAPIBase = "https://api.line.me/v2/bot" constant lineDataAPIBase (line 28) | lineDataAPIBase = "https://api-data.line.me/v2/bot" constant lineReplyEndpoint (line 29) | lineReplyEndpoint = lineAPIBase + "/message/reply" constant linePushEndpoint (line 30) | linePushEndpoint = lineAPIBase + "/message/push" constant lineContentEndpoint (line 31) | lineContentEndpoint = lineDataAPIBase + "/message/%s/content" constant lineBotInfoEndpoint (line 32) | lineBotInfoEndpoint = lineAPIBase + "/info" constant lineLoadingEndpoint (line 33) | lineLoadingEndpoint = lineAPIBase + "/chat/loading/start" constant lineReplyTokenMaxAge (line 34) | lineReplyTokenMaxAge = 25 * time.Second constant maxWebhookBodySize (line 38) | maxWebhookBodySize = 1 << 20 type replyTokenEntry (line 41) | type replyTokenEntry struct type LINEChannel (line 49) | type LINEChannel struct method Start (line 84) | func (c *LINEChannel) Start(ctx context.Context) error { method fetchBotInfo (line 108) | func (c *LINEChannel) fetchBotInfo() error { method Stop (line 141) | func (c *LINEChannel) Stop(ctx context.Context) error { method WebhookPath (line 154) | func (c *LINEChannel) WebhookPath() string { method ServeHTTP (line 162) | func (c *LINEChannel) ServeHTTP(w http.ResponseWriter, r *http.Request) { method webhookHandler (line 167) | func (c *LINEChannel) webhookHandler(w http.ResponseWriter, r *http.Re... method verifySignature (line 214) | func (c *LINEChannel) verifySignature(body []byte, signature string) b... method processEvent (line 262) | func (c *LINEChannel) processEvent(event lineEvent) { method isBotMentioned (line 401) | func (c *LINEChannel) isBotMentioned(msg lineMessage) bool { method stripBotMention (line 440) | func (c *LINEChannel) stripBotMention(text string, msg lineMessage) st... method resolveChatID (line 485) | func (c *LINEChannel) resolveChatID(source lineSource) string { method Send (line 498) | func (c *LINEChannel) Send(ctx context.Context, msg bus.OutboundMessag... method SendMedia (line 532) | func (c *LINEChannel) SendMedia(ctx context.Context, msg bus.OutboundM... method sendReply (line 571) | func (c *LINEChannel) sendReply(ctx context.Context, replyToken, conte... method sendPush (line 581) | func (c *LINEChannel) sendPush(ctx context.Context, to, content, quote... method StartTyping (line 595) | func (c *LINEChannel) StartTyping(ctx context.Context, chatID string) ... method sendLoading (line 636) | func (c *LINEChannel) sendLoading(ctx context.Context, chatID string) ... method callAPI (line 645) | func (c *LINEChannel) callAPI(ctx context.Context, endpoint string, pa... method downloadContent (line 677) | func (c *LINEChannel) downloadContent(messageID, filename string) stri... function NewLINEChannel (line 64) | func NewLINEChannel(cfg config.LINEConfig, messageBus *bus.MessageBus) (... type lineEvent (line 227) | type lineEvent struct type lineSource (line 235) | type lineSource struct type lineMessage (line 242) | type lineMessage struct type lineMentionee (line 255) | type lineMentionee struct function buildTextMessage (line 559) | func buildTextMessage(content, quoteToken string) map[string]string { FILE: pkg/channels/line/line_test.go function TestWebhookRejectsOversizedBody (line 11) | func TestWebhookRejectsOversizedBody(t *testing.T) { function TestWebhookAcceptsMaxBodySize (line 25) | func TestWebhookAcceptsMaxBodySize(t *testing.T) { function TestWebhookRejectsOversizedBodyBeforeSignatureCheck (line 40) | func TestWebhookRejectsOversizedBodyBeforeSignatureCheck(t *testing.T) { function TestWebhookRejectsNonPostMethod (line 55) | func TestWebhookRejectsNonPostMethod(t *testing.T) { function TestWebhookRejectsInvalidSignature (line 68) | func TestWebhookRejectsInvalidSignature(t *testing.T) { FILE: pkg/channels/maixcam/init.go function init (line 9) | func init() { FILE: pkg/channels/maixcam/maixcam.go type MaixCamChannel (line 18) | type MaixCamChannel struct method Start (line 51) | func (c *MaixCamChannel) Start(ctx context.Context) error { method acceptConnections (line 76) | func (c *MaixCamChannel) acceptConnections() { method handleConnection (line 108) | func (c *MaixCamChannel) handleConnection(conn net.Conn) { method processMessage (line 141) | func (c *MaixCamChannel) processMessage(msg MaixCamMessage, conn net.C... method handlePersonDetection (line 156) | func (c *MaixCamChannel) handlePersonDetection(msg MaixCamMessage) { method handleStatusUpdate (line 212) | func (c *MaixCamChannel) handleStatusUpdate(msg MaixCamMessage) { method Stop (line 218) | func (c *MaixCamChannel) Stop(ctx context.Context) error { method Send (line 243) | func (c *MaixCamChannel) Send(ctx context.Context, msg bus.OutboundMes... type MaixCamMessage (line 28) | type MaixCamMessage struct function NewMaixCamChannel (line 35) | func NewMaixCamChannel(cfg config.MaixCamConfig, bus *bus.MessageBus) (*... FILE: pkg/channels/manager.go constant defaultChannelQueueSize (line 29) | defaultChannelQueueSize = 16 constant defaultRateLimit (line 30) | defaultRateLimit = 10 constant maxRetries (line 31) | maxRetries = 3 constant rateLimitDelay (line 32) | rateLimitDelay = 1 * time.Second constant baseBackoff (line 33) | baseBackoff = 500 * time.Millisecond constant maxBackoff (line 34) | maxBackoff = 8 * time.Second constant janitorInterval (line 36) | janitorInterval = 10 * time.Second constant typingStopTTL (line 37) | typingStopTTL = 5 * time.Minute constant placeholderTTL (line 38) | placeholderTTL = 10 * time.Minute type typingEntry (line 42) | type typingEntry struct type reactionEntry (line 48) | type reactionEntry struct type placeholderEntry (line 54) | type placeholderEntry struct type channelWorker (line 70) | type channelWorker struct type Manager (line 79) | type Manager struct method RecordPlaceholder (line 101) | func (m *Manager) RecordPlaceholder(channel, chatID, placeholderID str... method SendPlaceholder (line 108) | func (m *Manager) SendPlaceholder(ctx context.Context, channel, chatID... method RecordTypingStop (line 129) | func (m *Manager) RecordTypingStop(channel, chatID string, stop func()) { method InvokeTypingStop (line 143) | func (m *Manager) InvokeTypingStop(channel, chatID string) { method RecordReactionUndo (line 154) | func (m *Manager) RecordReactionUndo(channel, chatID string, undo func... method preSend (line 161) | func (m *Manager) preSend(ctx context.Context, name string, msg bus.Ou... method initChannel (line 214) | func (m *Manager) initChannel(name, displayName string) { method initChannels (line 253) | func (m *Manager) initChannels(channels *config.ChannelsConfig) error { method SetupHTTPServer (line 340) | func (m *Manager) SetupHTTPServer(addr string, healthServer *health.Se... method StartAll (line 374) | func (m *Manager) StartAll(ctx context.Context) error { method StopAll (line 430) | func (m *Manager) StopAll(ctx context.Context) error { method runWorker (line 515) | func (m *Manager) runWorker(ctx context.Context, name string, w *chann... method sendWithRetry (line 548) | func (m *Manager) sendWithRetry(ctx context.Context, name string, w *c... method dispatchOutbound (line 655) | func (m *Manager) dispatchOutbound(ctx context.Context) { method dispatchOutboundMedia (line 675) | func (m *Manager) dispatchOutboundMedia(ctx context.Context) { method runMediaWorker (line 696) | func (m *Manager) runMediaWorker(ctx context.Context, name string, w *... method sendMediaWithRetry (line 713) | func (m *Manager) sendMediaWithRetry(ctx context.Context, name string,... method runTTLJanitor (line 775) | func (m *Manager) runTTLJanitor(ctx context.Context) { method GetChannel (line 816) | func (m *Manager) GetChannel(name string) (Channel, bool) { method GetStatus (line 823) | func (m *Manager) GetStatus() map[string]any { method GetEnabledChannels (line 837) | func (m *Manager) GetEnabledChannels() []string { method Reload (line 850) | func (m *Manager) Reload(ctx context.Context, cfg *config.Config) error { method RegisterChannel (line 910) | func (m *Manager) RegisterChannel(name string, channel Channel) { method UnregisterChannel (line 916) | func (m *Manager) UnregisterChannel(name string) { method SendMessage (line 933) | func (m *Manager) SendMessage(ctx context.Context, msg bus.OutboundMes... method SendToChannel (line 962) | func (m *Manager) SendToChannel(ctx context.Context, channelName, chat... type asyncTask (line 95) | type asyncTask struct function NewManager (line 193) | func NewManager(cfg *config.Config, messageBus *bus.MessageBus, store me... function newChannelWorker (line 496) | func newChannelWorker(name string, ch Channel) *channelWorker { function dispatchLoop (line 605) | func dispatchLoop[M any]( FILE: pkg/channels/manager_channel.go function toChannelHashes (line 12) | func toChannelHashes(cfg *config.Config) map[string]string { function compareChannels (line 32) | func compareChannels(old, news map[string]string) (added, removed []stri... function toChannelConfig (line 51) | func toChannelConfig(cfg *config.Config, list []string) (*config.Channel... FILE: pkg/channels/manager_channel_test.go function TestToChannelHashes (line 12) | func TestToChannelHashes(t *testing.T) { FILE: pkg/channels/manager_test.go type mockChannel (line 18) | type mockChannel struct method Send (line 27) | func (m *mockChannel) Send(ctx context.Context, msg bus.OutboundMessag... method Start (line 32) | func (m *mockChannel) Start(ctx context.Context) error { return nil } method Stop (line 33) | func (m *mockChannel) Stop(ctx context.Context) error { return nil } method SendPlaceholder (line 35) | func (m *mockChannel) SendPlaceholder(ctx context.Context, chatID stri... method EditMessage (line 41) | func (m *mockChannel) EditMessage(ctx context.Context, chatID, message... function newTestManager (line 47) | func newTestManager() *Manager { function TestSendWithRetry_Success (line 54) | func TestSendWithRetry_Success(t *testing.T) { function TestSendWithRetry_TemporaryThenSuccess (line 78) | func TestSendWithRetry_TemporaryThenSuccess(t *testing.T) { function TestSendWithRetry_PermanentFailure (line 105) | func TestSendWithRetry_PermanentFailure(t *testing.T) { function TestSendWithRetry_NotRunning (line 129) | func TestSendWithRetry_NotRunning(t *testing.T) { function TestSendWithRetry_RateLimitRetry (line 153) | func TestSendWithRetry_RateLimitRetry(t *testing.T) { function TestSendWithRetry_MaxRetriesExhausted (line 186) | func TestSendWithRetry_MaxRetriesExhausted(t *testing.T) { function TestSendWithRetry_UnknownError (line 211) | func TestSendWithRetry_UnknownError(t *testing.T) { function TestSendWithRetry_ContextCancelled (line 238) | func TestSendWithRetry_ContextCancelled(t *testing.T) { function TestWorkerRateLimiter (line 270) | func TestWorkerRateLimiter(t *testing.T) { function TestNewChannelWorker_DefaultRate (line 322) | func TestNewChannelWorker_DefaultRate(t *testing.T) { function TestNewChannelWorker_ConfiguredRate (line 334) | func TestNewChannelWorker_ConfiguredRate(t *testing.T) { function TestRunWorker_MessageSplitting (line 345) | func TestRunWorker_MessageSplitting(t *testing.T) { type mockChannelWithLength (line 389) | type mockChannelWithLength struct method MaxMessageLength (line 394) | func (m *mockChannelWithLength) MaxMessageLength() int { function TestSendWithRetry_ExponentialBackoff (line 398) | func TestSendWithRetry_ExponentialBackoff(t *testing.T) { type mockMessageEditor (line 437) | type mockMessageEditor struct method EditMessage (line 442) | func (m *mockMessageEditor) EditMessage(ctx context.Context, chatID, m... function TestPreSend_PlaceholderEditSuccess (line 446) | func TestPreSend_PlaceholderEditSuccess(t *testing.T) { function TestPreSend_PlaceholderEditFails_FallsThrough (line 490) | func TestPreSend_PlaceholderEditFails_FallsThrough(t *testing.T) { function TestInvokeTypingStop_CallsRegisteredStop (line 514) | func TestInvokeTypingStop_CallsRegisteredStop(t *testing.T) { function TestInvokeTypingStop_NoOpWhenNoEntry (line 529) | func TestInvokeTypingStop_NoOpWhenNoEntry(t *testing.T) { function TestInvokeTypingStop_Idempotent (line 535) | func TestInvokeTypingStop_Idempotent(t *testing.T) { function TestPreSend_TypingStopCalled (line 551) | func TestPreSend_TypingStopCalled(t *testing.T) { function TestPreSend_NoRegisteredState (line 573) | func TestPreSend_NoRegisteredState(t *testing.T) { function TestPreSend_TypingAndPlaceholder (line 590) | func TestPreSend_TypingAndPlaceholder(t *testing.T) { function TestRecordPlaceholder_ConcurrentSafe (line 626) | func TestRecordPlaceholder_ConcurrentSafe(t *testing.T) { function TestRecordTypingStop_ConcurrentSafe (line 641) | func TestRecordTypingStop_ConcurrentSafe(t *testing.T) { function TestRecordTypingStop_ReplacesExistingStop (line 656) | func TestRecordTypingStop_ReplacesExistingStop(t *testing.T) { function TestSendWithRetry_PreSendEditsPlaceholder (line 687) | func TestSendWithRetry_PreSendEditsPlaceholder(t *testing.T) { function TestDispatcherExitsOnCancel (line 720) | func TestDispatcherExitsOnCancel(t *testing.T) { function TestDispatcherMediaExitsOnCancel (line 749) | func TestDispatcherMediaExitsOnCancel(t *testing.T) { function TestTypingStopJanitorEviction (line 779) | func TestTypingStopJanitorEviction(t *testing.T) { function TestPlaceholderJanitorEviction (line 821) | func TestPlaceholderJanitorEviction(t *testing.T) { function TestPreSendStillWorksWithWrappedTypes (line 847) | func TestPreSendStillWorksWithWrappedTypes(t *testing.T) { function TestLazyWorkerCreation (line 889) | func TestLazyWorkerCreation(t *testing.T) { function TestBuildMediaScope_FastIDUniqueness (line 916) | func TestBuildMediaScope_FastIDUniqueness(t *testing.T) { function TestBuildMediaScope_WithMessageID (line 940) | func TestBuildMediaScope_WithMessageID(t *testing.T) { function TestManager_PlaceholderConsumedByResponse (line 948) | func TestManager_PlaceholderConsumedByResponse(t *testing.T) { function TestSendMessage_Synchronous (line 1008) | func TestSendMessage_Synchronous(t *testing.T) { function TestSendMessage_UnknownChannel (line 1050) | func TestSendMessage_UnknownChannel(t *testing.T) { function TestSendMessage_NoWorker (line 1065) | func TestSendMessage_NoWorker(t *testing.T) { function TestSendMessage_WithRetry (line 1086) | func TestSendMessage_WithRetry(t *testing.T) { function TestSendMessage_WithSplitting (line 1123) | func TestSendMessage_WithSplitting(t *testing.T) { function TestSendMessage_PreservesOrdering (line 1160) | func TestSendMessage_PreservesOrdering(t *testing.T) { function TestManager_SendPlaceholder (line 1194) | func TestManager_SendPlaceholder(t *testing.T) { FILE: pkg/channels/matrix/init.go function init (line 9) | func init() { FILE: pkg/channels/matrix/matrix.go constant typingRefreshInterval (line 33) | typingRefreshInterval = 20 * time.Second constant typingServerTTL (line 34) | typingServerTTL = 30 * time.Second constant roomKindCacheTTL (line 35) | roomKindCacheTTL = 5 * time.Minute constant roomKindCacheCleanupPeriod (line 36) | roomKindCacheCleanupPeriod = 1 * time.Minute constant roomKindCacheMaxEntries (line 37) | roomKindCacheMaxEntries = 2048 type roomKindCacheEntry (line 42) | type roomKindCacheEntry struct type roomKindCache (line 48) | type roomKindCache struct method get (line 70) | func (c *roomKindCache) get(roomID string, now time.Time) (bool, bool) { method set (line 86) | func (c *roomKindCache) set(roomID string, isGroup bool, now time.Time) { method cleanupExpired (line 112) | func (c *roomKindCache) cleanupExpired(now time.Time) int { method cleanupExpiredLocked (line 118) | func (c *roomKindCache) cleanupExpiredLocked(now time.Time) int { method evictOldestLocked (line 129) | func (c *roomKindCache) evictOldestLocked() bool { function newRoomKindCache (line 55) | func newRoomKindCache(maxEntries int, ttl time.Duration) *roomKindCache { type typingSession (line 150) | type typingSession struct method stop (line 161) | func (s *typingSession) stop() { function newTypingSession (line 155) | func newTypingSession() *typingSession { type MatrixChannel (line 168) | type MatrixChannel struct method Start (line 236) | func (c *MatrixChannel) Start(ctx context.Context) error { method Stop (line 260) | func (c *MatrixChannel) Stop(ctx context.Context) error { method Send (line 279) | func (c *MatrixChannel) Send(ctx context.Context, msg bus.OutboundMess... method messageContent (line 301) | func (c *MatrixChannel) messageContent(text string) *event.MessageEven... method SendMedia (line 311) | func (c *MatrixChannel) SendMedia(ctx context.Context, msg bus.Outboun... method StartTyping (line 424) | func (c *MatrixChannel) StartTyping(ctx context.Context, chatID string... method SendPlaceholder (line 463) | func (c *MatrixChannel) SendPlaceholder(ctx context.Context, chatID st... method EditMessage (line 490) | func (c *MatrixChannel) EditMessage(ctx context.Context, chatID string... method handleMemberEvent (line 506) | func (c *MatrixChannel) handleMemberEvent(ctx context.Context, evt *ev... method handleMessageEvent (line 536) | func (c *MatrixChannel) handleMessageEvent(ctx context.Context, evt *e... method extractInboundContent (line 645) | func (c *MatrixChannel) extractInboundContent( method extractInboundMedia (line 663) | func (c *MatrixChannel) extractInboundMedia( method storeMedia (line 693) | func (c *MatrixChannel) storeMedia(localPath string, meta media.MediaM... method downloadMedia (line 707) | func (c *MatrixChannel) downloadMedia( method isGroupRoom (line 923) | func (c *MatrixChannel) isGroupRoom(ctx context.Context, roomID id.Roo... method isBotMentioned (line 950) | func (c *MatrixChannel) isBotMentioned(msgEvt *event.MessageEventConte... method typingLoop (line 1037) | func (c *MatrixChannel) typingLoop(ctx context.Context, roomID id.Room... method stopTypingSessions (line 1064) | func (c *MatrixChannel) stopTypingSessions(ctx context.Context) { method baseContext (line 1080) | func (c *MatrixChannel) baseContext() context.Context { method runRoomKindCacheJanitor (line 1087) | func (c *MatrixChannel) runRoomKindCacheJanitor(ctx context.Context) { method stripSelfMention (line 1101) | func (c *MatrixChannel) stripSelfMention(text string) string { function NewMatrixChannel (line 186) | func NewMatrixChannel(cfg config.MatrixConfig, messageBus *bus.MessageBu... function markdownToHTML (line 273) | func markdownToHTML(md string) string { function matrixContentType (line 781) | func matrixContentType(msgEvt *event.MessageEventContent) string { function matrixMediaURI (line 788) | func matrixMediaURI(msgEvt *event.MessageEventContent) id.ContentURIStri... function matrixMediaKind (line 801) | func matrixMediaKind(msgType event.MessageType) string { function matrixOutboundMsgType (line 814) | func matrixOutboundMsgType(partType, filename, contentType string) event... function matrixOutboundContent (line 848) | func matrixOutboundContent( function matrixMediaLabel (line 878) | func matrixMediaLabel(msgEvt *event.MessageEventContent, fallback string... function matrixMediaFilename (line 891) | func matrixMediaFilename(label, mediaKind, contentType string) string { function matrixMediaExt (line 902) | func matrixMediaExt(filename, contentType, mediaKind string) string { function mentionsUserInFormattedBody (line 980) | func mentionsUserInFormattedBody(formattedBody string, userID id.UserID)... function decodeMatrixMentionHref (line 1021) | func decodeMatrixMentionHref(v string) string { function matrixMediaTempDir (line 1105) | func matrixMediaTempDir() (string, error) { function matrixLocalpart (line 1113) | func matrixLocalpart(userID id.UserID) string { function localpartMentionRegexp (line 1119) | func localpartMentionRegexp(localpart string) *regexp.Regexp { function stripUserMention (line 1132) | func stripUserMention(text string, userID id.UserID) string { function stripUserMentionWithRegexp (line 1136) | func stripUserMentionWithRegexp(text string, userID id.UserID, mentionR ... FILE: pkg/channels/matrix/matrix_test.go function TestMatrixLocalpartMentionRegexp (line 21) | func TestMatrixLocalpartMentionRegexp(t *testing.T) { function TestStripUserMention (line 44) | func TestStripUserMention(t *testing.T) { function TestIsBotMentioned (line 63) | func TestIsBotMentioned(t *testing.T) { function TestRoomKindCache_ExpiresEntries (line 131) | func TestRoomKindCache_ExpiresEntries(t *testing.T) { function TestRoomKindCache_EvictsOldestWhenFull (line 145) | func TestRoomKindCache_EvictsOldestWhenFull(t *testing.T) { function TestMatrixMediaTempDir (line 164) | func TestMatrixMediaTempDir(t *testing.T) { function TestMatrixMediaExt (line 182) | func TestMatrixMediaExt(t *testing.T) { function TestDownloadMedia_WritesResponseToTempFile (line 203) | func TestDownloadMedia_WritesResponseToTempFile(t *testing.T) { function TestExtractInboundContent_ImageNoURLFallback (line 247) | func TestExtractInboundContent_ImageNoURLFallback(t *testing.T) { function TestExtractInboundContent_AudioNoURLFallback (line 266) | func TestExtractInboundContent_AudioNoURLFallback(t *testing.T) { function TestMatrixOutboundMsgType (line 286) | func TestMatrixOutboundMsgType(t *testing.T) { function TestMatrixOutboundContent (line 308) | func TestMatrixOutboundContent(t *testing.T) { function TestMarkdownToHTML (line 343) | func TestMarkdownToHTML(t *testing.T) { function TestMessageContent (line 366) | func TestMessageContent(t *testing.T) { FILE: pkg/channels/media.go type MediaSender (line 13) | type MediaSender interface FILE: pkg/channels/onebot/init.go function init (line 9) | func init() { FILE: pkg/channels/onebot/onebot.go type OneBotChannel (line 24) | type OneBotChannel struct method setMsgEmojiLike (line 116) | func (c *OneBotChannel) setMsgEmojiLike(messageID string, emojiID int,... method ReactToMessage (line 135) | func (c *OneBotChannel) ReactToMessage(ctx context.Context, chatID, me... method Start (line 148) | func (c *OneBotChannel) Start(ctx context.Context) error { method connect (line 182) | func (c *OneBotChannel) connect() error { method pinger (line 215) | func (c *OneBotChannel) pinger(conn *websocket.Conn) { method fetchSelfID (line 237) | func (c *OneBotChannel) fetchSelfID() { method sendAPIRequest (line 283) | func (c *OneBotChannel) sendAPIRequest(action string, params any, time... method reconnectLoop (line 339) | func (c *OneBotChannel) reconnectLoop() { method Stop (line 366) | func (c *OneBotChannel) Stop(ctx context.Context) error { method Send (line 394) | func (c *OneBotChannel) Send(ctx context.Context, msg bus.OutboundMess... method SendMedia (line 449) | func (c *OneBotChannel) SendMedia(ctx context.Context, msg bus.Outboun... method buildMessageSegments (line 559) | func (c *OneBotChannel) buildMessageSegments(chatID, content string) [... method buildSendRequest (line 579) | func (c *OneBotChannel) buildSendRequest(msg bus.OutboundMessage) (str... method listen (line 600) | func (c *OneBotChannel) listen() { method parseMessageSegments (line 713) | func (c *OneBotChannel) parseMessageSegments( method handleRawEvent (line 845) | func (c *OneBotChannel) handleRawEvent(raw *oneBotRawEvent) { method handleMetaEvent (line 894) | func (c *OneBotChannel) handleMetaEvent(raw *oneBotRawEvent) { method handleNoticeEvent (line 902) | func (c *OneBotChannel) handleNoticeEvent(raw *oneBotRawEvent) { method handleMessage (line 919) | func (c *OneBotChannel) handleMessage(raw *oneBotRawEvent) { method isDuplicate (line 1077) | func (c *OneBotChannel) isDuplicate(messageID string) bool { type oneBotRawEvent (line 42) | type oneBotRawEvent struct type BotStatus (line 62) | type BotStatus struct function isAPIResponse (line 67) | func isAPIResponse(raw json.RawMessage) bool { type oneBotSender (line 82) | type oneBotSender struct type oneBotAPIRequest (line 88) | type oneBotAPIRequest struct type oneBotMessageSegment (line 94) | type oneBotMessageSegment struct function NewOneBotChannel (line 99) | func NewOneBotChannel(cfg config.OneBotConfig, messageBus *bus.MessageBu... function parseJSONInt64 (line 677) | func parseJSONInt64(raw json.RawMessage) (int64, error) { function parseJSONString (line 694) | func parseJSONString(raw json.RawMessage) string { type parseMessageResult (line 706) | type parseMessageResult struct function truncate (line 1099) | func truncate(s string, n int) string { FILE: pkg/channels/pico/init.go function init (line 9) | func init() { FILE: pkg/channels/pico/pico.go type picoConn (line 24) | type picoConn struct method writeJSON (line 33) | func (pc *picoConn) writeJSON(v any) error { method close (line 43) | func (pc *picoConn) close() { type PicoChannel (line 51) | type PicoChannel struct method Start (line 95) | func (c *PicoChannel) Start(ctx context.Context) error { method Stop (line 104) | func (c *PicoChannel) Stop(ctx context.Context) error { method WebhookPath (line 126) | func (c *PicoChannel) WebhookPath() string { return "/pico/" } method ServeHTTP (line 129) | func (c *PicoChannel) ServeHTTP(w http.ResponseWriter, r *http.Request) { method Send (line 141) | func (c *PicoChannel) Send(ctx context.Context, msg bus.OutboundMessag... method EditMessage (line 154) | func (c *PicoChannel) EditMessage(ctx context.Context, chatID string, ... method StartTyping (line 163) | func (c *PicoChannel) StartTyping(ctx context.Context, chatID string) ... method SendPlaceholder (line 177) | func (c *PicoChannel) SendPlaceholder(ctx context.Context, chatID stri... method broadcastToSession (line 201) | func (c *PicoChannel) broadcastToSession(chatID string, msg PicoMessag... method handleWebSocket (line 232) | func (c *PicoChannel) handleWebSocket(w http.ResponseWriter, r *http.R... method authenticate (line 295) | func (c *PicoChannel) authenticate(r *http.Request) bool { method matchedSubprotocol (line 326) | func (c *PicoChannel) matchedSubprotocol(r *http.Request) string { method readLoop (line 337) | func (c *PicoChannel) readLoop(pc *picoConn) { method pingLoop (line 398) | func (c *PicoChannel) pingLoop(pc *picoConn, interval time.Duration) { method handleMessage (line 421) | func (c *PicoChannel) handleMessage(pc *picoConn, msg PicoMessage) { method handleMessageSend (line 438) | func (c *PicoChannel) handleMessageSend(pc *picoConn, msg PicoMessage) { function NewPicoChannel (line 62) | func NewPicoChannel(cfg config.PicoConfig, messageBus *bus.MessageBus) (... function truncate (line 481) | func truncate(s string, maxLen int) string { FILE: pkg/channels/pico/protocol.go constant TypeMessageSend (line 8) | TypeMessageSend = "message.send" constant TypeMediaSend (line 9) | TypeMediaSend = "media.send" constant TypePing (line 10) | TypePing = "ping" constant TypeMessageCreate (line 13) | TypeMessageCreate = "message.create" constant TypeMessageUpdate (line 14) | TypeMessageUpdate = "message.update" constant TypeMediaCreate (line 15) | TypeMediaCreate = "media.create" constant TypeTypingStart (line 16) | TypeTypingStart = "typing.start" constant TypeTypingStop (line 17) | TypeTypingStop = "typing.stop" constant TypeError (line 18) | TypeError = "error" constant TypePong (line 19) | TypePong = "pong" type PicoMessage (line 23) | type PicoMessage struct function newMessage (line 32) | func newMessage(msgType string, payload map[string]any) PicoMessage { function newError (line 41) | func newError(code, message string) PicoMessage { FILE: pkg/channels/qq/botgo_logger.go type botGoLogger (line 12) | type botGoLogger struct method Info (line 20) | func (b *botGoLogger) Info(v ...any) { method Infof (line 29) | func (b *botGoLogger) Infof(format string, v ...any) { function newBotGoLogger (line 16) | func newBotGoLogger(component string) *botGoLogger { function shouldDemoteBotGoInfo (line 38) | func shouldDemoteBotGoInfo(message string) bool { FILE: pkg/channels/qq/init.go function init (line 9) | func init() { FILE: pkg/channels/qq/qq.go constant dedupTTL (line 38) | dedupTTL = 5 * time.Minute constant dedupInterval (line 39) | dedupInterval = 60 * time.Second constant dedupMaxSize (line 40) | dedupMaxSize = 10000 constant typingResend (line 41) | typingResend = 8 * time.Second constant typingSeconds (line 42) | typingSeconds = 10 constant bytesPerMiB (line 43) | bytesPerMiB = 1024 * 1024 type qqAPI (line 46) | type qqAPI interface type QQChannel (line 57) | type QQChannel struct method Start (line 100) | func (c *QQChannel) Start(ctx context.Context) error { method Stop (line 174) | func (c *QQChannel) Stop(ctx context.Context) error { method getChatKind (line 191) | func (c *QQChannel) getChatKind(chatID string) string { method Send (line 203) | func (c *QQChannel) Send(ctx context.Context, msg bus.OutboundMessage)... method StartTyping (line 261) | func (c *QQChannel) StartTyping(ctx context.Context, chatID string) (f... method SendMedia (line 322) | func (c *QQChannel) SendMedia(ctx context.Context, msg bus.OutboundMed... method uploadMedia (line 363) | func (c *QQChannel) uploadMedia( method buildMediaUpload (line 389) | func (c *QQChannel) buildMediaUpload(part bus.MediaPart) (*qqMediaUplo... method sendUploadedMedia (line 440) | func (c *QQChannel) sendUploadedMedia( method applyPassiveReplyMetadata (line 467) | func (c *QQChannel) applyPassiveReplyMetadata(chatID string, msg *dto.... method mediaUploadURL (line 483) | func (c *QQChannel) mediaUploadURL(chatKind, chatID string) string { method maxBase64FileSizeBytes (line 504) | func (c *QQChannel) maxBase64FileSizeBytes() int64 { method handleC2CMessage (line 512) | func (c *QQChannel) handleC2CMessage() event.C2CMessageEventHandler { method handleGroupATMessage (line 581) | func (c *QQChannel) handleGroupATMessage() event.GroupATMessageEventHa... method extractInboundAttachments (line 658) | func (c *QQChannel) extractInboundAttachments( method downloadAttachment (line 702) | func (c *QQChannel) downloadAttachment(urlStr, filename string) string { method downloadHeaders (line 716) | func (c *QQChannel) downloadHeaders() map[string]string { method isDuplicate (line 811) | func (c *QQChannel) isDuplicate(messageID string) bool { method dedupJanitor (line 839) | func (c *QQChannel) dedupJanitor() { function NewQQChannel (line 85) | func NewQQChannel(cfg config.QQConfig, messageBus *bus.MessageBus) (*QQC... type qqMediaUpload (line 356) | type qqMediaUpload struct function qqFileType (line 491) | func qqFileType(partType string) uint64 { function qqAttachmentFilename (line 738) | func qqAttachmentFilename(attachment *dto.MessageAttachment) string { function qqAttachmentKind (line 765) | func qqAttachmentKind(attachment *dto.MessageAttachment) string { function qqAttachmentNote (line 794) | func qqAttachmentNote(attachment *dto.MessageAttachment) string { function isHTTPURL (line 866) | func isHTTPURL(s string) bool { function appendContent (line 870) | func appendContent(content, suffix string) string { function sanitizeURLs (line 893) | func sanitizeURLs(text string) string { FILE: pkg/channels/qq/qq_test.go function TestHandleC2CMessage_IncludesAccountIDMetadata (line 23) | func TestHandleC2CMessage_IncludesAccountIDMetadata(t *testing.T) { function TestHandleC2CMessage_AttachmentOnlyPublishesMedia (line 63) | func TestHandleC2CMessage_AttachmentOnlyPublishesMedia(t *testing.T) { function TestHandleGroupATMessage_AttachmentOnlyPublishesMedia (line 120) | func TestHandleGroupATMessage_AttachmentOnlyPublishesMedia(t *testing.T) { function TestSendMedia_UploadsLocalFileAsBase64 (line 171) | func TestSendMedia_UploadsLocalFileAsBase64(t *testing.T) { function TestSendMedia_UsesRemoteURLUploadForC2C (line 267) | func TestSendMedia_UsesRemoteURLUploadForC2C(t *testing.T) { function TestSendMedia_ReturnsSendFailedWithoutMediaStore (line 325) | func TestSendMedia_ReturnsSendFailedWithoutMediaStore(t *testing.T) { function TestSendMedia_ReturnsSendFailedWhenLocalFileExceedsBase64MiBLimit (line 349) | func TestSendMedia_ReturnsSendFailedWhenLocalFileExceedsBase64MiBLimit(t... type fakeQQAPI (line 402) | type fakeQQAPI struct method WS (line 418) | func (f *fakeQQAPI) WS( method PostGroupMessage (line 426) | func (f *fakeQQAPI) PostGroupMessage( method PostC2CMessage (line 436) | func (f *fakeQQAPI) PostC2CMessage( method Transport (line 446) | func (f *fakeQQAPI) Transport(_ context.Context, method, url string, b... type fakeTransportCall (line 412) | type fakeTransportCall struct function mustJSON (line 459) | func mustJSON(t *testing.T, v any) []byte { function waitInboundMessage (line 469) | func waitInboundMessage(t *testing.T, messageBus *bus.MessageBus) bus.In... function writeTempFile (line 488) | func writeTempFile(t *testing.T, dir, name string, content []byte) string { FILE: pkg/channels/registry.go type ChannelFactory (line 12) | type ChannelFactory function RegisterFactory (line 20) | func RegisterFactory(name string, f ChannelFactory) { function getFactory (line 27) | func getFactory(name string) (ChannelFactory, bool) { FILE: pkg/channels/slack/init.go function init (line 9) | func init() { FILE: pkg/channels/slack/slack.go type SlackChannel (line 22) | type SlackChannel struct method Start (line 65) | func (c *SlackChannel) Start(ctx context.Context) error { method Stop (line 99) | func (c *SlackChannel) Stop(ctx context.Context) error { method Send (line 111) | func (c *SlackChannel) Send(ctx context.Context, msg bus.OutboundMessa... method SendMedia (line 155) | func (c *SlackChannel) SendMedia(ctx context.Context, msg bus.Outbound... method ReactToMessage (line 211) | func (c *SlackChannel) ReactToMessage(ctx context.Context, chatID, mes... method eventLoop (line 230) | func (c *SlackChannel) eventLoop() { method handleEventsAPI (line 253) | func (c *SlackChannel) handleEventsAPI(event socketmode.Event) { method handleMessageEvent (line 271) | func (c *SlackChannel) handleMessageEvent(ev *slackevents.MessageEvent) { method handleAppMention (line 382) | func (c *SlackChannel) handleAppMention(ev *slackevents.AppMentionEven... method handleSlashCommand (line 447) | func (c *SlackChannel) handleSlashCommand(event socketmode.Event) { method downloadSlackFile (line 505) | func (c *SlackChannel) downloadSlackFile(file slack.File) string { method stripBotMention (line 523) | func (c *SlackChannel) stripBotMention(text string) string { type slackMessageRef (line 34) | type slackMessageRef struct function NewSlackChannel (line 39) | func NewSlackChannel(cfg config.SlackConfig, messageBus *bus.MessageBus)... function parseSlackChatID (line 529) | func parseSlackChatID(chatID string) (channelID, threadTS string) { FILE: pkg/channels/slack/slack_test.go function TestParseSlackChatID (line 10) | func TestParseSlackChatID(t *testing.T) { function TestStripBotMention (line 56) | func TestStripBotMention(t *testing.T) { function TestNewSlackChannel (line 101) | func TestNewSlackChannel(t *testing.T) { function TestSlackChannelIsAllowed (line 145) | func TestSlackChannelIsAllowed(t *testing.T) { FILE: pkg/channels/split.go function SplitMessage (line 13) | func SplitMessage(content string, maxLen int) []string { function findLastUnclosedCodeBlockInRange (line 144) | func findLastUnclosedCodeBlockInRange(runes []rune, start, end int) int { function findNextClosingCodeBlockInRange (line 166) | func findNextClosingCodeBlockInRange(runes []rune, startIdx, end int) int { function findNewlineFrom (line 177) | func findNewlineFrom(runes []rune, from int) int { function findLastNewlineInRange (line 188) | func findLastNewlineInRange(runes []rune, start, end, searchWindow int) ... function findLastSpaceInRange (line 200) | func findLastSpaceInRange(runes []rune, start, end, searchWindow int) int { FILE: pkg/channels/split_test.go function TestSplitMessage (line 8) | func TestSplitMessage(t *testing.T) { function TestFindLastNewlineInRange (line 152) | func TestFindLastNewlineInRange(t *testing.T) { function TestFindLastSpaceInRange (line 181) | func TestFindLastSpaceInRange(t *testing.T) { function TestFindNewlineFrom (line 208) | func TestFindNewlineFrom(t *testing.T) { function TestFindLastUnclosedCodeBlockInRange (line 232) | func TestFindLastUnclosedCodeBlockInRange(t *testing.T) { function TestFindNextClosingCodeBlockInRange (line 289) | func TestFindNextClosingCodeBlockInRange(t *testing.T) { function TestSplitMessage_CodeBlockIntegrity (line 335) | func TestSplitMessage_CodeBlockIntegrity(t *testing.T) { FILE: pkg/channels/telegram/command_registration.go function commandRegistrationDelay (line 23) | func commandRegistrationDelay(attempt int) time.Duration { method RegisterCommands (line 33) | func (c *TelegramChannel) RegisterCommands(ctx context.Context, defs []c... method startCommandRegistration (line 60) | func (c *TelegramChannel) startCommandRegistration(ctx context.Context, ... FILE: pkg/channels/telegram/command_registration_test.go function TestStartCommandRegistration_DoesNotBlock (line 13) | func TestStartCommandRegistration_DoesNotBlock(t *testing.T) { function TestStartCommandRegistration_RetriesUntilSuccessThenStops (line 33) | func TestStartCommandRegistration_RetriesUntilSuccessThenStops(t *testin... function TestStartCommandRegistration_StopsAfterCancel (line 71) | func TestStartCommandRegistration_StopsAfterCancel(t *testing.T) { FILE: pkg/channels/telegram/init.go function init (line 9) | func init() { FILE: pkg/channels/telegram/parse_markdown_to_md_v2.go type entityPattern (line 33) | type entityPattern struct function markdownToTelegramMarkdownV2 (line 91) | func markdownToTelegramMarkdownV2(text string) string { function processText (line 113) | func processText(text string) string { function escapeMarkdownV2 (line 178) | func escapeMarkdownV2(s string) string { FILE: pkg/channels/telegram/parse_markdown_to_md_v2_test.go function Test_markdownToTelegramMarkdownV2 (line 13) | func Test_markdownToTelegramMarkdownV2(t *testing.T) { FILE: pkg/channels/telegram/parser_markdown_to_html.go function markdownToTelegramHTML (line 8) | func markdownToTelegramHTML(text string) string { type codeBlockMatch (line 60) | type codeBlockMatch struct function extractCodeBlocks (line 65) | func extractCodeBlocks(text string) codeBlockMatch { type inlineCodeMatch (line 83) | type inlineCodeMatch struct function extractInlineCodes (line 88) | func extractInlineCodes(text string) inlineCodeMatch { function escapeHTML (line 106) | func escapeHTML(text string) string { FILE: pkg/channels/telegram/telegram.go type TelegramChannel (line 42) | type TelegramChannel struct method Start (line 106) | func (c *TelegramChannel) Start(ctx context.Context) error { method Stop (line 148) | func (c *TelegramChannel) Stop(ctx context.Context) error { method Send (line 168) | func (c *TelegramChannel) Send(ctx context.Context, msg bus.OutboundMe... method sendChunk (line 272) | func (c *TelegramChannel) sendChunk( method StartTyping (line 316) | func (c *TelegramChannel) StartTyping(ctx context.Context, chatID stri... method EditMessage (line 351) | func (c *TelegramChannel) EditMessage(ctx context.Context, chatID stri... method SendPlaceholder (line 380) | func (c *TelegramChannel) SendPlaceholder(ctx context.Context, chatID ... method SendMedia (line 407) | func (c *TelegramChannel) SendMedia(ctx context.Context, msg bus.Outbo... method handleMessage (line 504) | func (c *TelegramChannel) handleMessage(ctx context.Context, message *... method downloadPhoto (line 682) | func (c *TelegramChannel) downloadPhoto(ctx context.Context, fileID st... method downloadFileWithInfo (line 694) | func (c *TelegramChannel) downloadFileWithInfo(file *telego.File, ext ... method downloadFile (line 709) | func (c *TelegramChannel) downloadFile(ctx context.Context, fileID, ex... method isBotMentioned (line 763) | func (c *TelegramChannel) isBotMentioned(message *telego.Message) bool { method stripBotMention (line 840) | func (c *TelegramChannel) stripBotMention(content string) string { function NewTelegramChannel (line 55) | func NewTelegramChannel(cfg *config.Config, bus *bus.MessageBus) (*Teleg... type sendChunkParams (line 261) | type sendChunkParams struct constant maxTypingDuration (line 308) | maxTypingDuration = 5 * time.Minute function parseContent (line 721) | func parseContent(text string, useMarkdownV2 bool) string { function parseTelegramChatID (line 731) | func parseTelegramChatID(chatID string) (int64, int, error) { function logParseFailed (line 748) | func logParseFailed(err error, useMarkdownV2 bool) { function telegramEntityTextAndList (line 799) | func telegramEntityTextAndList(message *telego.Message) (string, []teleg... function telegramEntityText (line 806) | func telegramEntityText(runes []rune, entity telego.MessageEntity) (stri... function isBotCommandEntityForThisBot (line 817) | func isBotCommandEntityForThisBot(entityText, botUsername string) bool { FILE: pkg/channels/telegram/telegram_dispatch_test.go function TestHandleMessage_DoesNotConsumeGenericCommandsLocally (line 13) | func TestHandleMessage_DoesNotConsumeGenericCommandsLocally(t *testing.T) { FILE: pkg/channels/telegram/telegram_group_command_filter_test.go type getMeCaller (line 18) | type getMeCaller struct method Call (line 22) | func (c getMeCaller) Call(_ context.Context, url string, _ *ta.Request... function newTestTelegramBot (line 30) | func newTestTelegramBot(t *testing.T, username string) *telego.Bot { function newGroupMentionOnlyChannel (line 44) | func newGroupMentionOnlyChannel(t *testing.T, botUsername string) (*Tele... function TestHandleMessage_GroupMentionOnly_BotCommandEntity (line 59) | func TestHandleMessage_GroupMentionOnly_BotCommandEntity(t *testing.T) { function TestIsBotMentioned_MentionEntityUnaffected (line 134) | func TestIsBotMentioned_MentionEntityUnaffected(t *testing.T) { FILE: pkg/channels/telegram/telegram_test.go constant testToken (line 24) | testToken = "1234567890:aaaabbbbaaaabbbbaaaabbbbaaaabbbbccc" type stubCaller (line 27) | type stubCaller struct method Call (line 37) | func (s *stubCaller) Call(ctx context.Context, url string, data *ta.Re... type stubCall (line 32) | type stubCall struct type stubConstructor (line 43) | type stubConstructor struct method JSONRequest (line 50) | func (s *stubConstructor) JSONRequest(parameters any) (*ta.RequestData... method MultipartRequest (line 61) | func (s *stubConstructor) MultipartRequest( type multipartCall (line 45) | type multipartCall struct type multipartRecordingConstructor (line 68) | type multipartRecordingConstructor struct method MultipartRequest (line 73) | func (s *multipartRecordingConstructor) MultipartRequest( function successResponse (line 99) | func successResponse(t *testing.T) *ta.Response { function newTestChannel (line 108) | func newTestChannel(t *testing.T, caller *stubCaller) *TelegramChannel { function newTestChannelWithConstructor (line 112) | func newTestChannelWithConstructor( function TestSendMedia_ImageFallbacksToDocumentOnInvalidDimensions (line 139) | func TestSendMedia_ImageFallbacksToDocumentOnInvalidDimensions(t *testin... function TestSendMedia_ImageNonDimensionErrorDoesNotFallback (line 190) | func TestSendMedia_ImageNonDimensionErrorDoesNotFallback(t *testing.T) { function TestSend_EmptyContent (line 225) | func TestSend_EmptyContent(t *testing.T) { function TestSend_ShortMessage_SingleCall (line 243) | func TestSend_ShortMessage_SingleCall(t *testing.T) { function TestSend_LongMessage_SingleCall (line 260) | func TestSend_LongMessage_SingleCall(t *testing.T) { function TestSend_HTMLFallback_PerChunk (line 283) | func TestSend_HTMLFallback_PerChunk(t *testing.T) { function TestSend_HTMLFallback_BothFail (line 307) | func TestSend_HTMLFallback_BothFail(t *testing.T) { function TestSend_LongMessage_HTMLFallback_StopsOnError (line 325) | func TestSend_LongMessage_HTMLFallback_StopsOnError(t *testing.T) { function TestSend_MarkdownShortButHTMLLong_MultipleCalls (line 347) | func TestSend_MarkdownShortButHTMLLong_MultipleCalls(t *testing.T) { function TestSend_HTMLOverflow_WordBoundary (line 379) | func TestSend_HTMLOverflow_WordBoundary(t *testing.T) { function TestSend_NotRunning (line 428) | func TestSend_NotRunning(t *testing.T) { function TestSend_InvalidChatID (line 447) | func TestSend_InvalidChatID(t *testing.T) { function TestParseTelegramChatID_Plain (line 466) | func TestParseTelegramChatID_Plain(t *testing.T) { function TestParseTelegramChatID_NegativeGroup (line 473) | func TestParseTelegramChatID_NegativeGroup(t *testing.T) { function TestParseTelegramChatID_WithThreadID (line 480) | func TestParseTelegramChatID_WithThreadID(t *testing.T) { function TestParseTelegramChatID_GeneralTopic (line 487) | func TestParseTelegramChatID_GeneralTopic(t *testing.T) { function TestParseTelegramChatID_Invalid (line 494) | func TestParseTelegramChatID_Invalid(t *testing.T) { function TestParseTelegramChatID_InvalidThreadID (line 499) | func TestParseTelegramChatID_InvalidThreadID(t *testing.T) { function TestSend_WithForumThreadID (line 505) | func TestSend_WithForumThreadID(t *testing.T) { function TestHandleMessage_ForumTopic_SetsMetadata (line 522) | func TestHandleMessage_ForumTopic_SetsMetadata(t *testing.T) { function TestHandleMessage_NoForum_NoThreadMetadata (line 563) | func TestHandleMessage_NoForum_NoThreadMetadata(t *testing.T) { function TestHandleMessage_ReplyThread_NonForum_NoIsolation (line 602) | func TestHandleMessage_ReplyThread_NonForum_NoIsolation(t *testing.T) { FILE: pkg/channels/webhook.go type WebhookHandler (line 8) | type WebhookHandler interface type HealthChecker (line 17) | type HealthChecker interface FILE: pkg/channels/wecom/aibot.go type WeComAIBotChannel (line 30) | type WeComAIBotChannel struct method Name (line 179) | func (c *WeComAIBotChannel) Name() string { method Start (line 184) | func (c *WeComAIBotChannel) Start(ctx context.Context) error { method Stop (line 199) | func (c *WeComAIBotChannel) Stop(ctx context.Context) error { method Send (line 214) | func (c *WeComAIBotChannel) Send(ctx context.Context, msg bus.Outbound... method WebhookPath (line 290) | func (c *WeComAIBotChannel) WebhookPath() string { method ServeHTTP (line 298) | func (c *WeComAIBotChannel) ServeHTTP(w http.ResponseWriter, r *http.R... method HealthPath (line 303) | func (c *WeComAIBotChannel) HealthPath() string { method HealthHandler (line 308) | func (c *WeComAIBotChannel) HealthHandler(w http.ResponseWriter, r *ht... method handleWebhook (line 313) | func (c *WeComAIBotChannel) handleWebhook(w http.ResponseWriter, r *ht... method handleVerification (line 336) | func (c *WeComAIBotChannel) handleVerification( method handleMessageCallback (line 381) | func (c *WeComAIBotChannel) handleMessageCallback( method processMessage (line 467) | func (c *WeComAIBotChannel) processMessage( method handleTextMessage (line 503) | func (c *WeComAIBotChannel) handleTextMessage( method handleStreamMessage (line 585) | func (c *WeComAIBotChannel) handleStreamMessage( method handleImageMessage (line 624) | func (c *WeComAIBotChannel) handleImageMessage( method handleMixedMessage (line 652) | func (c *WeComAIBotChannel) handleMixedMessage( method handleEventMessage (line 669) | func (c *WeComAIBotChannel) handleEventMessage( method getStreamResponse (line 702) | func (c *WeComAIBotChannel) getStreamResponse(task *streamTask, timest... method removeTask (line 758) | func (c *WeComAIBotChannel) removeTask(task *streamTask) { method sendViaResponseURL (line 783) | func (c *WeComAIBotChannel) sendViaResponseURL(responseURL, content st... method encryptResponse (line 833) | func (c *WeComAIBotChannel) encryptResponse( method encryptEmptyResponse (line 888) | func (c *WeComAIBotChannel) encryptEmptyResponse(timestamp, nonce stri... method encryptMessage (line 896) | func (c *WeComAIBotChannel) encryptMessage(plaintext, receiveid string... method generateStreamID (line 987) | func (c *WeComAIBotChannel) generateStreamID() string { method cleanupLoop (line 992) | func (c *WeComAIBotChannel) cleanupLoop() { method cleanupOldTasks (line 1018) | func (c *WeComAIBotChannel) cleanupOldTasks() { method handleHealth (line 1088) | func (c *WeComAIBotChannel) handleHealth(w http.ResponseWriter, r *htt... type streamTask (line 46) | type streamTask struct type WeComAIBotMessage (line 66) | type WeComAIBotMessage struct type WeComAIBotMsgItemImage (line 107) | type WeComAIBotMsgItemImage struct type WeComAIBotMsgItem (line 113) | type WeComAIBotMsgItem struct type WeComAIBotStreamInfo (line 119) | type WeComAIBotStreamInfo struct type WeComAIBotStreamResponse (line 127) | type WeComAIBotStreamResponse struct type WeComAIBotEncryptedResponse (line 134) | type WeComAIBotEncryptedResponse struct function NewWeComAIBotChannel (line 146) | func NewWeComAIBotChannel( function generateRandomID (line 976) | func generateRandomID(n int) string { constant streamClosedGracePeriod (line 1014) | streamClosedGracePeriod = 10 * time.Minute constant taskMaxLifetime (line 1015) | taskMaxLifetime = 1 * time.Hour FILE: pkg/channels/wecom/aibot_test.go function TestNewWeComAIBotChannel_WebhookMode (line 16) | func TestNewWeComAIBotChannel_WebhookMode(t *testing.T) { function TestWeComAIBotWebhookChannelStartStop (line 67) | func TestWeComAIBotWebhookChannelStartStop(t *testing.T) { function TestWeComAIBotChannelWebhookPath (line 97) | func TestWeComAIBotChannelWebhookPath(t *testing.T) { function TestWeComAIBotChannelGetStreamResponseProcessingMessage (line 138) | func TestWeComAIBotChannelGetStreamResponseProcessingMessage(t *testing.... function TestGenerateStreamID (line 219) | func TestGenerateStreamID(t *testing.T) { function TestEncryptDecrypt (line 245) | func TestEncryptDecrypt(t *testing.T) { function TestGenerateSignature (line 278) | func TestGenerateSignature(t *testing.T) { function decodeStreamResponse (line 293) | func decodeStreamResponse(t *testing.T, ch *WeComAIBotChannel, encrypted... function TestNewWeComAIBotChannel_WSMode (line 316) | func TestNewWeComAIBotChannel_WSMode(t *testing.T) { function TestWeComAIBotWSChannelStartStop (line 384) | func TestWeComAIBotWSChannelStartStop(t *testing.T) { function TestGenerateRandomID (line 415) | func TestGenerateRandomID(t *testing.T) { function TestWSGenerateID (line 429) | func TestWSGenerateID(t *testing.T) { function makeWebhookChannel (line 446) | func makeWebhookChannel(t *testing.T) *WeComAIBotChannel { function makeStreamTask (line 463) | func makeStreamTask(t *testing.T, ch *WeComAIBotChannel, streamID, chatI... function TestGetStreamResponse_ImmediateAnswer (line 482) | func TestGetStreamResponse_ImmediateAnswer(t *testing.T) { function TestGetStreamResponse_DeadlinePassed (line 508) | func TestGetStreamResponse_DeadlinePassed(t *testing.T) { function TestGetStreamResponse_StillPending (line 536) | func TestGetStreamResponse_StillPending(t *testing.T) { FILE: pkg/channels/wecom/aibot_ws.go constant wsEndpoint (line 30) | wsEndpoint = "wss://openws.work.weixin.qq.com" constant wsHeartbeatInterval (line 31) | wsHeartbeatInterval = 30 * time.Second constant wsConnectTimeout (line 32) | wsConnectTimeout = 15 * time.Second constant wsSubscribeTimeout (line 33) | wsSubscribeTimeout = 10 * time.Second constant wsSendMsgTimeout (line 34) | wsSendMsgTimeout = 10 * time.Second constant wsRespondMsgTimeout (line 35) | wsRespondMsgTimeout = 10 * time.Second constant wsWelcomeMsgTimeout (line 36) | wsWelcomeMsgTimeout = 5 * time.Second constant wsMaxReconnectWait (line 37) | wsMaxReconnectWait = 60 * time.Second constant wsInitialReconnect (line 38) | wsInitialReconnect = time.Second constant wsStreamTickInterval (line 43) | wsStreamTickInterval = 30 * time.Second constant wsStreamMaxDuration (line 44) | wsStreamMaxDuration = 5*time.Minute + 30*time.Second constant wsImageDownloadTimeout (line 47) | wsImageDownloadTimeout = 30 * time.Second constant wsLateReplyRouteTTL (line 50) | wsLateReplyRouteTTL = 30 * time.Minute constant wsStreamMaxContentBytes (line 55) | wsStreamMaxContentBytes = 20480 type WeComAIBotWSChannel (line 66) | type WeComAIBotWSChannel struct method Name (line 248) | func (c *WeComAIBotWSChannel) Name() string { return "wecom_aibot" } method Start (line 251) | func (c *WeComAIBotWSChannel) Start(ctx context.Context) error { method Stop (line 261) | func (c *WeComAIBotWSChannel) Stop(_ context.Context) error { method Send (line 279) | func (c *WeComAIBotWSChannel) Send(ctx context.Context, msg bus.Outbou... method connectLoop (line 350) | func (c *WeComAIBotWSChannel) connectLoop() { method runConnection (line 395) | func (c *WeComAIBotWSChannel) runConnection() error { method sendAndWait (line 468) | func (c *WeComAIBotWSChannel) sendAndWait( method heartbeatLoop (line 515) | func (c *WeComAIBotWSChannel) heartbeatLoop(conn *websocket.Conn) { method readLoop (line 547) | func (c *WeComAIBotWSChannel) readLoop(conn *websocket.Conn) error { method handleEnvelope (line 591) | func (c *WeComAIBotWSChannel) handleEnvelope(env wsEnvelope) { method handleMsgCallback (line 604) | func (c *WeComAIBotWSChannel) handleMsgCallback(env wsEnvelope) { method handleEventCallback (line 642) | func (c *WeComAIBotWSChannel) handleEventCallback(env wsEnvelope) { method handleWSTextMessage (line 682) | func (c *WeComAIBotWSChannel) handleWSTextMessage(reqID string, msg We... method handleWSImageMessage (line 692) | func (c *WeComAIBotWSChannel) handleWSImageMessage(reqID string, msg W... method wsHandleMediaMessage (line 703) | func (c *WeComAIBotWSChannel) wsHandleMediaMessage( method handleWSMixedMessage (line 727) | func (c *WeComAIBotWSChannel) handleWSMixedMessage(reqID string, msg W... method dispatchWSAgentTask (line 781) | func (c *WeComAIBotWSChannel) dispatchWSAgentTask( method handleWSVoiceMessage (line 923) | func (c *WeComAIBotWSChannel) handleWSVoiceMessage(reqID string, msg W... method handleWSFileMessage (line 932) | func (c *WeComAIBotWSChannel) handleWSFileMessage(reqID string, msg We... method handleWSVideoMessage (line 942) | func (c *WeComAIBotWSChannel) handleWSVideoMessage(reqID string, msg W... method wsSendStreamChunk (line 954) | func (c *WeComAIBotWSChannel) wsSendStreamChunk(reqID, streamID string... method wsSendStreamFinish (line 983) | func (c *WeComAIBotWSChannel) wsSendStreamFinish(reqID, streamID, cont... method wsSendWelcomeMsg (line 988) | func (c *WeComAIBotWSChannel) wsSendWelcomeMsg(reqID, content string) { method wsSendActivePush (line 1008) | func (c *WeComAIBotWSChannel) wsSendActivePush(chatID string, chatType... method writeWSAndWait (line 1031) | func (c *WeComAIBotWSChannel) writeWSAndWait(cmd wsCommand, timeout ti... method cancelAllTasks (line 1057) | func (c *WeComAIBotWSChannel) cancelAllTasks() { method setReqState (line 1071) | func (c *WeComAIBotWSChannel) setReqState(reqID string, state *wsReqSt... method getReqState (line 1083) | func (c *WeComAIBotWSChannel) getReqState(reqID string) (*wsTask, wsLa... method deleteReqState (line 1097) | func (c *WeComAIBotWSChannel) deleteReqState(reqID string) { method clearReqTask (line 1103) | func (c *WeComAIBotWSChannel) clearReqTask(reqID string, task *wsTask) { method storeWSMedia (line 1143) | func (c *WeComAIBotWSChannel) storeWSMedia( type wsTask (line 92) | type wsTask struct type wsReqState (line 102) | type wsReqState struct type wsLateReplyRoute (line 107) | type wsLateReplyRoute struct type wsEnvelope (line 117) | type wsEnvelope struct type wsHeaders (line 125) | type wsHeaders struct type wsCommand (line 130) | type wsCommand struct type wsSendMsgBody (line 136) | type wsSendMsgBody struct type wsRespondMsgBody (line 144) | type wsRespondMsgBody struct type wsStreamContent (line 152) | type wsStreamContent struct type wsImageContent (line 159) | type wsImageContent struct type wsTextContent (line 164) | type wsTextContent struct type wsMarkdownContent (line 168) | type wsMarkdownContent struct type WeComAIBotWSMessage (line 176) | type WeComAIBotWSMessage struct function newWeComAIBotWSChannel (line 224) | func newWeComAIBotWSChannel( constant wsBackoffResetDuration (line 346) | wsBackoffResetDuration = time.Minute function wsChatTypeValue (line 1115) | func wsChatTypeValue(chatType string) uint32 { function wsChatID (line 1124) | func wsChatID(msg WeComAIBotWSMessage) string { function wsGenerateID (line 1133) | func wsGenerateID() string { function wsMediaExtFromContentType (line 1233) | func wsMediaExtFromContentType(contentType string) string { function wsLabelToDefaultExt (line 1288) | func wsLabelToDefaultExt(label string) string { function splitWSContent (line 1305) | func splitWSContent(content string, maxBytes int) []string { function splitAtByteBoundary (line 1328) | func splitAtByteBoundary(s string, maxBytes int) []string { FILE: pkg/channels/wecom/aibot_ws_test.go function newTestWSChannel (line 19) | func newTestWSChannel(t *testing.T) *WeComAIBotWSChannel { function TestStoreWSMedia_NilStore (line 35) | func TestStoreWSMedia_NilStore(t *testing.T) { function TestStoreWSMedia_HTTPError (line 45) | func TestStoreWSMedia_HTTPError(t *testing.T) { function TestStoreWSMedia_ServerUnavailable (line 62) | func TestStoreWSMedia_ServerUnavailable(t *testing.T) { function TestStoreWSMedia_Success_NoAES (line 76) | func TestStoreWSMedia_Success_NoAES(t *testing.T) { function TestStoreWSMedia_MultipleMessages (line 121) | func TestStoreWSMedia_MultipleMessages(t *testing.T) { function TestStoreWSMedia_ContentTypeExt (line 171) | func TestStoreWSMedia_ContentTypeExt(t *testing.T) { function TestSplitWSContent (line 222) | func TestSplitWSContent(t *testing.T) { function TestSplitAtByteBoundary (line 271) | func TestSplitAtByteBoundary(t *testing.T) { FILE: pkg/channels/wecom/app.go constant wecomAPIBase (line 28) | wecomAPIBase = "https://qyapi.weixin.qq.com" type WeComAppChannel (line 32) | type WeComAppChannel struct method Name (line 151) | func (c *WeComAppChannel) Name() string { method Start (line 156) | func (c *WeComAppChannel) Start(ctx context.Context) error { method Stop (line 182) | func (c *WeComAppChannel) Stop(ctx context.Context) error { method Send (line 195) | func (c *WeComAppChannel) Send(ctx context.Context, msg bus.OutboundMe... method SendMedia (line 214) | func (c *WeComAppChannel) SendMedia(ctx context.Context, msg bus.Outbo... method uploadMedia (line 287) | func (c *WeComAppChannel) uploadMedia(ctx context.Context, accessToken... method sendWeComMessage (line 354) | func (c *WeComAppChannel) sendWeComMessage(ctx context.Context, access... method sendImageMessage (line 414) | func (c *WeComAppChannel) sendImageMessage(ctx context.Context, access... method WebhookPath (line 425) | func (c *WeComAppChannel) WebhookPath() string { method ServeHTTP (line 433) | func (c *WeComAppChannel) ServeHTTP(w http.ResponseWriter, r *http.Req... method HealthPath (line 438) | func (c *WeComAppChannel) HealthPath() string { method HealthHandler (line 443) | func (c *WeComAppChannel) HealthHandler(w http.ResponseWriter, r *http... method handleWebhook (line 448) | func (c *WeComAppChannel) handleWebhook(w http.ResponseWriter, r *http... method handleVerification (line 478) | func (c *WeComAppChannel) handleVerification(ctx context.Context, w ht... method handleMessageCallback (line 542) | func (c *WeComAppChannel) handleMessageCallback(ctx context.Context, w... method processMessage (line 615) | func (c *WeComAppChannel) processMessage(ctx context.Context, msg WeCo... method tokenRefreshLoop (line 671) | func (c *WeComAppChannel) tokenRefreshLoop() { method refreshAccessToken (line 690) | func (c *WeComAppChannel) refreshAccessToken() error { method getAccessToken (line 724) | func (c *WeComAppChannel) getAccessToken() string { method sendTextMessage (line 736) | func (c *WeComAppChannel) sendTextMessage(ctx context.Context, accessT... method handleHealth (line 747) | func (c *WeComAppChannel) handleHealth(w http.ResponseWriter, r *http.... type WeComXMLMessage (line 45) | type WeComXMLMessage struct type WeComTextMessage (line 70) | type WeComTextMessage struct type WeComMarkdownMessage (line 81) | type WeComMarkdownMessage struct type WeComImageMessage (line 91) | type WeComImageMessage struct type WeComAccessTokenResponse (line 101) | type WeComAccessTokenResponse struct type WeComSendMessageResponse (line 109) | type WeComSendMessageResponse struct type PKCS7Padding (line 118) | type PKCS7Padding struct function NewWeComAppChannel (line 121) | func NewWeComAppChannel(cfg config.WeComAppConfig, messageBus *bus.Messa... FILE: pkg/channels/wecom/app_test.go function generateTestAESKeyApp (line 26) | func generateTestAESKeyApp() string { function encryptTestMessageApp (line 37) | func encryptTestMessageApp(message, aesKey string) (string, error) { function generateSignatureApp (line 81) | func generateSignatureApp(token, timestamp, nonce, msgEncrypt string) st... function TestNewWeComAppChannel (line 89) | func TestNewWeComAppChannel(t *testing.T) { function TestWeComAppChannelIsAllowed (line 148) | func TestWeComAppChannelIsAllowed(t *testing.T) { function TestWeComAppVerifySignature (line 181) | func TestWeComAppVerifySignature(t *testing.T) { function TestWeComAppDecryptMessage (line 227) | func TestWeComAppDecryptMessage(t *testing.T) { function TestWeComAppHandleVerification (line 326) | func TestWeComAppHandleVerification(t *testing.T) { function TestWeComAppHandleMessageCallback (line 394) | func TestWeComAppHandleMessageCallback(t *testing.T) { function TestWeComAppProcessMessage (line 509) | func TestWeComAppProcessMessage(t *testing.T) { function TestWeComAppHandleWebhook (line 595) | func TestWeComAppHandleWebhook(t *testing.T) { function TestWeComAppHandleHealth (line 666) | func TestWeComAppHandleHealth(t *testing.T) { function TestWeComAppAccessToken (line 695) | func TestWeComAppAccessToken(t *testing.T) { function TestWeComAppMessageStructures (line 736) | func TestWeComAppMessageStructures(t *testing.T) { function TestWeComAppXMLMessageStructure (line 872) | func TestWeComAppXMLMessageStructure(t *testing.T) { function TestWeComAppXMLMessageImage (line 913) | func TestWeComAppXMLMessageImage(t *testing.T) { function TestWeComAppXMLMessageVoice (line 943) | func TestWeComAppXMLMessageVoice(t *testing.T) { function TestWeComAppXMLMessageLocation (line 970) | func TestWeComAppXMLMessageLocation(t *testing.T) { function TestWeComAppXMLMessageLink (line 1008) | func TestWeComAppXMLMessageLink(t *testing.T) { function TestWeComAppXMLMessageEvent (line 1042) | func TestWeComAppXMLMessageEvent(t *testing.T) { FILE: pkg/channels/wecom/bot.go type WeComBotChannel (line 24) | type WeComBotChannel struct method Name (line 114) | func (c *WeComBotChannel) Name() string { method Start (line 119) | func (c *WeComBotChannel) Start(ctx context.Context) error { method Stop (line 135) | func (c *WeComBotChannel) Stop(ctx context.Context) error { method Send (line 150) | func (c *WeComBotChannel) Send(ctx context.Context, msg bus.OutboundMe... method WebhookPath (line 164) | func (c *WeComBotChannel) WebhookPath() string { method ServeHTTP (line 172) | func (c *WeComBotChannel) ServeHTTP(w http.ResponseWriter, r *http.Req... method HealthPath (line 177) | func (c *WeComBotChannel) HealthPath() string { method HealthHandler (line 182) | func (c *WeComBotChannel) HealthHandler(w http.ResponseWriter, r *http... method handleWebhook (line 187) | func (c *WeComBotChannel) handleWebhook(w http.ResponseWriter, r *http... method handleVerification (line 206) | func (c *WeComBotChannel) handleVerification(ctx context.Context, w ht... method handleMessageCallback (line 245) | func (c *WeComBotChannel) handleMessageCallback(ctx context.Context, w... method processMessage (line 319) | func (c *WeComBotChannel) processMessage(ctx context.Context, msg WeCo... method sendWebhookReply (line 423) | func (c *WeComBotChannel) sendWebhookReply(ctx context.Context, userID... method handleHealth (line 491) | func (c *WeComBotChannel) handleHealth(w http.ResponseWriter, r *http.... type WeComBotMessage (line 34) | type WeComBotMessage struct type WeComBotReplyMessage (line 76) | type WeComBotReplyMessage struct function NewWeComBotChannel (line 84) | func NewWeComBotChannel(cfg config.WeComConfig, messageBus *bus.MessageB... FILE: pkg/channels/wecom/bot_test.go function generateTestAESKey (line 25) | func generateTestAESKey() string { function encryptTestMessage (line 36) | func encryptTestMessage(message, aesKey string) (string, error) { function generateSignature (line 80) | func generateSignature(token, timestamp, nonce, msgEncrypt string) string { function TestNewWeComBotChannel (line 88) | func TestNewWeComBotChannel(t *testing.T) { function TestWeComBotChannelIsAllowed (line 132) | func TestWeComBotChannelIsAllowed(t *testing.T) { function TestWeComBotVerifySignature (line 163) | func TestWeComBotVerifySignature(t *testing.T) { function TestWeComBotDecryptMessage (line 207) | func TestWeComBotDecryptMessage(t *testing.T) { function TestWeComBotPKCS7Unpad (line 284) | func TestWeComBotPKCS7Unpad(t *testing.T) { function TestWeComBotHandleVerification (line 338) | func TestWeComBotHandleVerification(t *testing.T) { function TestWeComBotHandleMessageCallback (line 404) | func TestWeComBotHandleMessageCallback(t *testing.T) { function TestWeComBotProcessMessage (line 531) | func TestWeComBotProcessMessage(t *testing.T) { function TestWeComBotHandleWebhook (line 600) | func TestWeComBotHandleWebhook(t *testing.T) { function TestWeComBotHandleHealth (line 669) | func TestWeComBotHandleHealth(t *testing.T) { function TestWeComBotReplyMessage (line 697) | func TestWeComBotReplyMessage(t *testing.T) { function TestWeComBotMessageStructure (line 711) | func TestWeComBotMessageStructure(t *testing.T) { FILE: pkg/channels/wecom/common.go constant blockSize (line 18) | blockSize = 32 function computeSignature (line 22) | func computeSignature(token, timestamp, nonce, encrypt string) string { function verifySignature (line 32) | func verifySignature(token, msgSignature, timestamp, nonce, msgEncrypt s... function decryptMessage (line 41) | func decryptMessage(encryptedMsg, encodingAESKey string) (string, error) { function decryptMessageWithVerify (line 47) | func decryptMessageWithVerify(encryptedMsg, encodingAESKey, receiveid st... function decodeWeComAESKey (line 78) | func decodeWeComAESKey(encodingAESKey string) ([]byte, error) { function encryptAESCBC (line 92) | func encryptAESCBC(aesKey, plaintext []byte) ([]byte, error) { function packWeComFrame (line 106) | func packWeComFrame(msg, receiveid string) ([]byte, error) { function unpackWeComFrame (line 128) | func unpackWeComFrame(data []byte, receiveid string) (string, error) { function decryptAESCBC (line 148) | func decryptAESCBC(aesKey, ciphertext []byte) ([]byte, error) { function pkcs7Pad (line 170) | func pkcs7Pad(data []byte, blockSize int) []byte { function pkcs7Unpad (line 180) | func pkcs7Unpad(data []byte) ([]byte, error) { FILE: pkg/channels/wecom/dedupe.go constant wecomMaxProcessedMessages (line 5) | wecomMaxProcessedMessages = 1000 type MessageDeduplicator (line 10) | type MessageDeduplicator struct method MarkMessageProcessed (line 31) | func (d *MessageDeduplicator) MarkMessageProcessed(msgID string) bool { function NewMessageDeduplicator (line 19) | func NewMessageDeduplicator(maxEntries int) *MessageDeduplicator { FILE: pkg/channels/wecom/dedupe_test.go function TestMessageDeduplicator_DuplicateDetection (line 8) | func TestMessageDeduplicator_DuplicateDetection(t *testing.T) { function TestMessageDeduplicator_ConcurrentSameMessage (line 20) | func TestMessageDeduplicator_ConcurrentSameMessage(t *testing.T) { function TestMessageDeduplicator_CircularQueueEviction (line 50) | func TestMessageDeduplicator_CircularQueueEviction(t *testing.T) { FILE: pkg/channels/wecom/init.go function init (line 9) | func init() { FILE: pkg/channels/whatsapp/init.go function init (line 9) | func init() { FILE: pkg/channels/whatsapp/whatsapp.go type WhatsAppChannel (line 20) | type WhatsAppChannel struct method Start (line 49) | func (c *WhatsAppChannel) Start(ctx context.Context) error { method Stop (line 81) | func (c *WhatsAppChannel) Stop(ctx context.Context) error { method Send (line 107) | func (c *WhatsAppChannel) Send(ctx context.Context, msg bus.OutboundMe... method listen (line 147) | func (c *WhatsAppChannel) listen() { method handleIncomingMessage (line 191) | func (c *WhatsAppChannel) handleIncomingMessage(msg map[string]any) { function NewWhatsAppChannel (line 31) | func NewWhatsAppChannel(cfg config.WhatsAppConfig, bus *bus.MessageBus) ... FILE: pkg/channels/whatsapp/whatsapp_command_test.go function TestHandleIncomingMessage_DoesNotConsumeGenericCommandsLocally (line 12) | func TestHandleIncomingMessage_DoesNotConsumeGenericCommandsLocally(t *t... FILE: pkg/channels/whatsapp_native/init.go function init (line 11) | func init() { FILE: pkg/channels/whatsapp_native/whatsapp_command_test.go function TestHandleIncoming_DoesNotConsumeGenericCommandsLocally (line 20) | func TestHandleIncoming_DoesNotConsumeGenericCommandsLocally(t *testing.... FILE: pkg/channels/whatsapp_native/whatsapp_native.go constant sqliteDriver (line 40) | sqliteDriver = "sqlite" constant whatsappDBName (line 41) | whatsappDBName = "store.db" constant reconnectInitial (line 43) | reconnectInitial = 5 * time.Second constant reconnectMax (line 44) | reconnectMax = 5 * time.Minute constant reconnectMultiplier (line 45) | reconnectMultiplier = 2.0 type WhatsAppNativeChannel (line 49) | type WhatsAppNativeChannel struct method Start (line 83) | func (c *WhatsAppNativeChannel) Start(ctx context.Context) error { method Stop (line 213) | func (c *WhatsAppNativeChannel) Stop(ctx context.Context) error { method eventHandler (line 269) | func (c *WhatsAppNativeChannel) eventHandler(evt any) { method reconnectWithBackoff (line 297) | func (c *WhatsAppNativeChannel) reconnectWithBackoff() { method handleIncoming (line 343) | func (c *WhatsAppNativeChannel) handleIncoming(evt *events.Message) { method Send (line 399) | func (c *WhatsAppNativeChannel) Send(ctx context.Context, msg bus.Outb... function NewWhatsAppNativeChannel (line 66) | func NewWhatsAppNativeChannel( function parseJID (line 439) | func parseJID(s string) (types.JID, error) { FILE: pkg/channels/whatsapp_native/whatsapp_native_stub.go function NewWhatsAppNativeChannel (line 15) | func NewWhatsAppNativeChannel( FILE: pkg/commands/builtin.go function BuiltinDefinitions (line 7) | func BuiltinDefinitions() []Definition { FILE: pkg/commands/builtin_test.go function findDefinitionByName (line 9) | func findDefinitionByName(t *testing.T, defs []Definition, name string) ... function TestBuiltinHelpHandler_ReturnsFormattedMessage (line 20) | func TestBuiltinHelpHandler_ReturnsFormattedMessage(t *testing.T) { function TestBuiltinShowChannel_PreservesUserVisibleBehavior (line 47) | func TestBuiltinShowChannel_PreservesUserVisibleBehavior(t *testing.T) { function TestBuiltinListChannels_UsesGetEnabledChannels (line 72) | func TestBuiltinListChannels_UsesGetEnabledChannels(t *testing.T) { function TestBuiltinShowAgents_RestoresOldBehavior (line 97) | func TestBuiltinShowAgents_RestoresOldBehavior(t *testing.T) { function TestBuiltinListAgents_RestoresOldBehavior (line 122) | func TestBuiltinListAgents_RestoresOldBehavior(t *testing.T) { FILE: pkg/commands/cmd_check.go function checkCommand (line 8) | func checkCommand() Definition { FILE: pkg/commands/cmd_clear.go function clearCommand (line 5) | func clearCommand() Definition { FILE: pkg/commands/cmd_help.go function helpCommand (line 9) | func helpCommand() Definition { function formatHelpMessage (line 26) | func formatHelpMessage(defs []Definition) string { FILE: pkg/commands/cmd_list.go function listCommand (line 9) | func listCommand() Definition { FILE: pkg/commands/cmd_reload.go function reloadCommand (line 5) | func reloadCommand() Definition { FILE: pkg/commands/cmd_show.go function showCommand (line 8) | func showCommand() Definition { FILE: pkg/commands/cmd_start.go function startCommand (line 5) | func startCommand() Definition { FILE: pkg/commands/cmd_switch.go function switchCommand (line 8) | func switchCommand() Definition { FILE: pkg/commands/cmd_switch_test.go function TestSwitchModel_Success (line 9) | func TestSwitchModel_Success(t *testing.T) { function TestSwitchModel_MissingToKeyword (line 34) | func TestSwitchModel_MissingToKeyword(t *testing.T) { function TestSwitchModel_MissingValue (line 58) | func TestSwitchModel_MissingValue(t *testing.T) { function TestSwitchModel_Error (line 82) | func TestSwitchModel_Error(t *testing.T) { function TestSwitchModel_NilDep (line 106) | func TestSwitchModel_NilDep(t *testing.T) { function TestSwitchChannel_Redirect (line 125) | func TestSwitchChannel_Redirect(t *testing.T) { function TestCheckChannel_Success (line 145) | func TestCheckChannel_Success(t *testing.T) { function TestCheckChannel_Error (line 170) | func TestCheckChannel_Error(t *testing.T) { function TestCheckChannel_NilDep (line 194) | func TestCheckChannel_NilDep(t *testing.T) { function TestCheckChannel_MissingValue (line 213) | func TestCheckChannel_MissingValue(t *testing.T) { function TestSwitch_BangPrefix (line 237) | func TestSwitch_BangPrefix(t *testing.T) { function TestSwitch_NoSubCommand (line 261) | func TestSwitch_NoSubCommand(t *testing.T) { FILE: pkg/commands/definition.go type SubCommand (line 9) | type SubCommand struct type Definition (line 23) | type Definition struct method EffectiveUsage (line 35) | func (d Definition) EffectiveUsage() string { FILE: pkg/commands/definition_test.go function TestDefinition_EffectiveUsage_NoSubCommands (line 7) | func TestDefinition_EffectiveUsage_NoSubCommands(t *testing.T) { function TestDefinition_EffectiveUsage_WithSubCommands (line 14) | func TestDefinition_EffectiveUsage_WithSubCommands(t *testing.T) { function TestDefinition_EffectiveUsage_WithArgsUsage (line 29) | func TestDefinition_EffectiveUsage_WithArgsUsage(t *testing.T) { FILE: pkg/commands/executor.go type Outcome (line 8) | type Outcome constant OutcomePassthrough (line 12) | OutcomePassthrough Outcome = iota constant OutcomeHandled (line 14) | OutcomeHandled type ExecuteResult (line 17) | type ExecuteResult struct type Executor (line 23) | type Executor struct method Execute (line 35) | func (e *Executor) Execute(ctx context.Context, req Request) ExecuteRe... method executeDefinition (line 53) | func (e *Executor) executeDefinition(ctx context.Context, req Request,... function NewExecutor (line 28) | func NewExecutor(reg *Registry, rt *Runtime) *Executor { FILE: pkg/commands/executor_test.go function TestExecutor_RegisteredWithoutHandler_ReturnsPassthrough (line 10) | func TestExecutor_RegisteredWithoutHandler_ReturnsPassthrough(t *testing... function TestExecutor_UnknownSlashCommand_ReturnsPassthrough (line 20) | func TestExecutor_UnknownSlashCommand_ReturnsPassthrough(t *testing.T) { function TestExecutor_SupportedCommandWithHandler_ReturnsHandled (line 30) | func TestExecutor_SupportedCommandWithHandler_ReturnsHandled(t *testing.... function TestExecutor_AliasWithoutHandler_ReturnsPassthrough (line 52) | func TestExecutor_AliasWithoutHandler_ReturnsPassthrough(t *testing.T) { function TestExecutor_AliasWithHandler_ReturnsHandled (line 70) | func TestExecutor_AliasWithHandler_ReturnsHandled(t *testing.T) { function TestExecutor_SupportedCommandWithNilHandler_ReturnsPassthrough (line 96) | func TestExecutor_SupportedCommandWithNilHandler_ReturnsPassthrough(t *t... function TestExecutor_NilHandlerDoesNotMaskLaterHandler (line 111) | func TestExecutor_NilHandlerDoesNotMaskLaterHandler(t *testing.T) { function TestExecutor_HandlerErrorIsPropagated (line 128) | func TestExecutor_HandlerErrorIsPropagated(t *testing.T) { function TestExecutor_SupportsBangPrefixAndCaseInsensitiveCommand (line 149) | func TestExecutor_SupportsBangPrefixAndCaseInsensitiveCommand(t *testing... function TestExecutor_SubCommand_RoutesToCorrectHandler (line 171) | func TestExecutor_SubCommand_RoutesToCorrectHandler(t *testing.T) { function TestExecutor_SubCommand_NoArg_RepliesUsage (line 196) | func TestExecutor_SubCommand_NoArg_RepliesUsage(t *testing.T) { function TestExecutor_SubCommand_UnknownArg_RepliesError (line 221) | func TestExecutor_SubCommand_UnknownArg_RepliesError(t *testing.T) { function TestExecutor_SubCommand_NilHandler_ReturnsPassthrough (line 245) | func TestExecutor_SubCommand_NilHandler_ReturnsPassthrough(t *testing.T) { FILE: pkg/commands/handler_agents.go function agentsHandler (line 10) | func agentsHandler() Handler { FILE: pkg/commands/registry.go type Registry (line 3) | type Registry struct method Definitions (line 27) | func (r *Registry) Definitions() []Definition { method Lookup (line 34) | func (r *Registry) Lookup(name string) (Definition, bool) { function NewRegistry (line 10) | func NewRegistry(defs []Definition) *Registry { function registerCommandName (line 46) | func registerCommandName(index map[string]int, name string, defIndex int) { FILE: pkg/commands/registry_test.go function TestRegistry_Definitions_ReturnsCopy (line 5) | func TestRegistry_Definitions_ReturnsCopy(t *testing.T) { function TestRegistry_Lookup_MatchesByLowercaseNameAndAlias (line 24) | func TestRegistry_Lookup_MatchesByLowercaseNameAndAlias(t *testing.T) { FILE: pkg/commands/request.go type Handler (line 8) | type Handler type Request (line 10) | type Request struct constant unavailableMsg (line 18) | unavailableMsg = "Command unavailable in current context." function parseCommandName (line 24) | func parseCommandName(input string) (string, bool) { function trimCommandPrefix (line 44) | func trimCommandPrefix(token string) (string, bool) { function HasCommandPrefix (line 55) | func HasCommandPrefix(input string) bool { function nthToken (line 65) | func nthToken(input string, n int) string { function normalizeCommandName (line 73) | func normalizeCommandName(name string) string { FILE: pkg/commands/request_test.go function TestHasCommandPrefix (line 5) | func TestHasCommandPrefix(t *testing.T) { FILE: pkg/commands/runtime.go type Runtime (line 8) | type Runtime struct FILE: pkg/commands/show_list_handlers_test.go function TestShowListHandlers_ChannelPolicy (line 9) | func TestShowListHandlers_ChannelPolicy(t *testing.T) { function TestShowListHandlers_ListHandledOnAllChannels (line 59) | func TestShowListHandlers_ListHandledOnAllChannels(t *testing.T) { FILE: pkg/config/config.go type FlexibleStringSlice (line 24) | type FlexibleStringSlice method UnmarshalJSON (line 26) | func (f *FlexibleStringSlice) UnmarshalJSON(data []byte) error { method UnmarshalText (line 57) | func (f *FlexibleStringSlice) UnmarshalText(text []byte) error { type Config (line 79) | type Config struct method MarshalJSON (line 105) | func (c Config) MarshalJSON() ([]byte, error) { method migrateChannelConfigs (line 993) | func (c *Config) migrateChannelConfigs() { method WorkspacePath (line 1026) | func (c *Config) WorkspacePath() string { method GetAPIKey (line 1030) | func (c *Config) GetAPIKey() string { method GetAPIBase (line 1061) | func (c *Config) GetAPIBase() string { method GetModelConfig (line 1094) | func (c *Config) GetModelConfig(modelName string) (*ModelConfig, error) { method findMatches (line 1109) | func (c *Config) findMatches(modelName string) []ModelConfig { method HasProvidersConfig (line 1120) | func (c *Config) HasProvidersConfig() bool { method ValidateModelList (line 1127) | func (c *Config) ValidateModelList() error { type BuildInfo (line 96) | type BuildInfo struct type AgentsConfig (line 128) | type AgentsConfig struct type AgentModelConfig (line 136) | type AgentModelConfig struct method UnmarshalJSON (line 141) | func (m *AgentModelConfig) UnmarshalJSON(data []byte) error { method MarshalJSON (line 161) | func (m AgentModelConfig) MarshalJSON() ([]byte, error) { type AgentConfig (line 172) | type AgentConfig struct type SubagentsConfig (line 182) | type SubagentsConfig struct type PeerMatch (line 187) | type PeerMatch struct type BindingMatch (line 192) | type BindingMatch struct type AgentBinding (line 200) | type AgentBinding struct type SessionConfig (line 205) | type SessionConfig struct type RoutingConfig (line 216) | type RoutingConfig struct type ToolFeedbackConfig (line 225) | type ToolFeedbackConfig struct type AgentDefaults (line 230) | type AgentDefaults struct method GetMaxMediaSize (line 255) | func (d *AgentDefaults) GetMaxMediaSize() int { method GetToolFeedbackMaxArgsLength (line 263) | func (d *AgentDefaults) GetToolFeedbackMaxArgsLength() int { method IsToolFeedbackEnabled (line 271) | func (d *AgentDefaults) IsToolFeedbackEnabled() bool { method GetModelName (line 277) | func (d *AgentDefaults) GetModelName() string { constant DefaultMaxMediaSize (line 251) | DefaultMaxMediaSize = 20 * 1024 * 1024 constant DefaultWeComAIBotProcessingMessage (line 252) | DefaultWeComAIBotProcessingMessage = "⏳ Processing, please wait. The res... type ChannelsConfig (line 284) | type ChannelsConfig struct type GroupTriggerConfig (line 304) | type GroupTriggerConfig struct type TypingConfig (line 310) | type TypingConfig struct type PlaceholderConfig (line 315) | type PlaceholderConfig struct type WhatsAppConfig (line 320) | type WhatsAppConfig struct type TelegramConfig (line 329) | type TelegramConfig struct type FeishuConfig (line 342) | type FeishuConfig struct type DiscordConfig (line 356) | type DiscordConfig struct type MaixCamConfig (line 368) | type MaixCamConfig struct type QQConfig (line 376) | type QQConfig struct type DingTalkConfig (line 388) | type DingTalkConfig struct type SlackConfig (line 397) | type SlackConfig struct type MatrixConfig (line 408) | type MatrixConfig struct type LINEConfig (line 422) | type LINEConfig struct type OneBotConfig (line 436) | type OneBotConfig struct type WeComConfig (line 449) | type WeComConfig struct type WeComAppConfig (line 463) | type WeComAppConfig struct type WeComAIBotConfig (line 479) | type WeComAIBotConfig struct type PicoConfig (line 494) | type PicoConfig struct type IRCConfig (line 507) | type IRCConfig struct type HeartbeatConfig (line 526) | type HeartbeatConfig struct type DevicesConfig (line 531) | type DevicesConfig struct type VoiceConfig (line 536) | type VoiceConfig struct type ProvidersConfig (line 540) | type ProvidersConfig struct method IsEmpty (line 570) | func (p ProvidersConfig) IsEmpty() bool { method MarshalJSON (line 600) | func (p ProvidersConfig) MarshalJSON() ([]byte, error) { type ProviderConfig (line 608) | type ProviderConfig struct type OpenAIProviderConfig (line 617) | type OpenAIProviderConfig struct type ModelConfig (line 629) | type ModelConfig struct method Validate (line 654) | func (c *ModelConfig) Validate() error { type GatewayConfig (line 664) | type GatewayConfig struct type ToolDiscoveryConfig (line 670) | type ToolDiscoveryConfig struct type ToolConfig (line 678) | type ToolConfig struct type BraveConfig (line 682) | type BraveConfig struct type TavilyConfig (line 689) | type TavilyConfig struct type DuckDuckGoConfig (line 697) | type DuckDuckGoConfig struct type PerplexityConfig (line 702) | type PerplexityConfig struct type SearXNGConfig (line 709) | type SearXNGConfig struct type GLMSearchConfig (line 715) | type GLMSearchConfig struct type WebToolsConfig (line 725) | type WebToolsConfig struct type CronToolsConfig (line 747) | type CronToolsConfig struct type ExecConfig (line 753) | type ExecConfig struct type SkillsToolsConfig (line 762) | type SkillsToolsConfig struct type MediaCleanupConfig (line 770) | type MediaCleanupConfig struct type ReadFileToolConfig (line 776) | type ReadFileToolConfig struct type ToolsConfig (line 781) | type ToolsConfig struct method IsToolEnabled (line 1242) | func (t *ToolsConfig) IsToolEnabled(name string) bool { type SearchCacheConfig (line 807) | type SearchCacheConfig struct type SkillsRegistriesConfig (line 812) | type SkillsRegistriesConfig struct type SkillsGithubConfig (line 816) | type SkillsGithubConfig struct type ClawHubRegistryConfig (line 821) | type ClawHubRegistryConfig struct type MCPServerConfig (line 834) | type MCPServerConfig struct type MCPConfig (line 858) | type MCPConfig struct function LoadConfig (line 865) | func LoadConfig(path string) (*Config, error) { function encryptPlaintextAPIKeys (line 946) | func encryptPlaintextAPIKeys(models []ModelConfig, passphrase string) ([... function resolveAPIKeys (line 971) | func resolveAPIKeys(models []ModelConfig, configDir string) error { function SaveConfig (line 1006) | func SaveConfig(path string, cfg *Config) error { function expandHome (line 1077) | func expandHome(path string) string { function MergeAPIKeys (line 1136) | func MergeAPIKeys(apiKey string, apiKeys []string) []string { function ExpandMultiKeyModels (line 1168) | func ExpandMultiKeyModels(models []ModelConfig) []ModelConfig { FILE: pkg/config/config_test.go function mustSetupSSHKey (line 17) | func mustSetupSSHKey(t *testing.T) { function TestAgentModelConfig_UnmarshalString (line 26) | func TestAgentModelConfig_UnmarshalString(t *testing.T) { function TestAgentModelConfig_UnmarshalObject (line 39) | func TestAgentModelConfig_UnmarshalObject(t *testing.T) { function TestAgentModelConfig_MarshalString (line 56) | func TestAgentModelConfig_MarshalString(t *testing.T) { function TestAgentModelConfig_MarshalObject (line 67) | func TestAgentModelConfig_MarshalObject(t *testing.T) { function TestProvidersConfig_IsEmpty (line 80) | func TestProvidersConfig_IsEmpty(t *testing.T) { function TestAgentConfig_FullParse (line 96) | func TestAgentConfig_FullParse(t *testing.T) { function TestConfig_BackwardCompat_NoAgentsList (line 197) | func TestConfig_BackwardCompat_NoAgentsList(t *testing.T) { function TestDefaultConfig_HeartbeatEnabled (line 223) | func TestDefaultConfig_HeartbeatEnabled(t *testing.T) { function TestDefaultConfig_WorkspacePath (line 232) | func TestDefaultConfig_WorkspacePath(t *testing.T) { function TestDefaultConfig_Model (line 241) | func TestDefaultConfig_Model(t *testing.T) { function TestDefaultConfig_MaxTokens (line 250) | func TestDefaultConfig_MaxTokens(t *testing.T) { function TestDefaultConfig_MaxToolIterations (line 259) | func TestDefaultConfig_MaxToolIterations(t *testing.T) { function TestDefaultConfig_Temperature (line 268) | func TestDefaultConfig_Temperature(t *testing.T) { function TestDefaultConfig_Gateway (line 277) | func TestDefaultConfig_Gateway(t *testing.T) { function TestDefaultConfig_Providers (line 292) | func TestDefaultConfig_Providers(t *testing.T) { function TestDefaultConfig_Channels (line 307) | func TestDefaultConfig_Channels(t *testing.T) { function TestDefaultConfig_WebTools (line 325) | func TestDefaultConfig_WebTools(t *testing.T) { function TestSaveConfig_FilePermissions (line 340) | func TestSaveConfig_FilePermissions(t *testing.T) { function TestSaveConfig_IncludesEmptyLegacyModelField (line 364) | func TestSaveConfig_IncludesEmptyLegacyModelField(t *testing.T) { function TestConfig_Complete (line 384) | func TestConfig_Complete(t *testing.T) { function TestDefaultConfig_OpenAIWebSearchEnabled (line 413) | func TestDefaultConfig_OpenAIWebSearchEnabled(t *testing.T) { function TestDefaultConfig_WebPreferNativeEnabled (line 420) | func TestDefaultConfig_WebPreferNativeEnabled(t *testing.T) { function TestLoadConfig_WebPreferNativeDefaultsTrueWhenUnset (line 427) | func TestLoadConfig_WebPreferNativeDefaultsTrueWhenUnset(t *testing.T) { function TestLoadConfig_WebPreferNativeCanBeDisabled (line 443) | func TestLoadConfig_WebPreferNativeCanBeDisabled(t *testing.T) { function TestDefaultConfig_ExecAllowRemoteEnabled (line 459) | func TestDefaultConfig_ExecAllowRemoteEnabled(t *testing.T) { function TestDefaultConfig_CronAllowCommandEnabled (line 466) | func TestDefaultConfig_CronAllowCommandEnabled(t *testing.T) { function TestLoadConfig_OpenAIWebSearchDefaultsTrueWhenUnset (line 473) | func TestLoadConfig_OpenAIWebSearchDefaultsTrueWhenUnset(t *testing.T) { function TestLoadConfig_ExecAllowRemoteDefaultsTrueWhenUnset (line 489) | func TestLoadConfig_ExecAllowRemoteDefaultsTrueWhenUnset(t *testing.T) { function TestLoadConfig_CronAllowCommandDefaultsTrueWhenUnset (line 505) | func TestLoadConfig_CronAllowCommandDefaultsTrueWhenUnset(t *testing.T) { function TestLoadConfig_OpenAIWebSearchCanBeDisabled (line 521) | func TestLoadConfig_OpenAIWebSearchCanBeDisabled(t *testing.T) { function TestLoadConfig_WebToolsProxy (line 537) | func TestLoadConfig_WebToolsProxy(t *testing.T) { function TestDefaultConfig_SummarizationThresholds (line 560) | func TestDefaultConfig_SummarizationThresholds(t *testing.T) { function TestDefaultConfig_DMScope (line 571) | func TestDefaultConfig_DMScope(t *testing.T) { function TestDefaultConfig_WorkspacePath_Default (line 579) | func TestDefaultConfig_WorkspacePath_Default(t *testing.T) { function TestDefaultConfig_WorkspacePath_WithPicoclawHome (line 599) | func TestDefaultConfig_WorkspacePath_WithPicoclawHome(t *testing.T) { function TestFlexibleStringSlice_UnmarshalText (line 611) | func TestFlexibleStringSlice_UnmarshalText(t *testing.T) { function TestFlexibleStringSlice_UnmarshalText_EmptySliceConsistency (line 699) | func TestFlexibleStringSlice_UnmarshalText_EmptySliceConsistency(t *test... function TestLoadConfig_WarnsForPlaintextAPIKey (line 729) | func TestLoadConfig_WarnsForPlaintextAPIKey(t *testing.T) { function TestSaveConfig_EncryptsPlaintextAPIKey (line 757) | func TestSaveConfig_EncryptsPlaintextAPIKey(t *testing.T) { function TestLoadConfig_NoSealWithoutPassphrase (line 793) | func TestLoadConfig_NoSealWithoutPassphrase(t *testing.T) { function TestLoadConfig_FileRefNotSealed (line 816) | func TestLoadConfig_FileRefNotSealed(t *testing.T) { function TestSaveConfig_MixedKeys (line 846) | func TestSaveConfig_MixedKeys(t *testing.T) { function TestLoadConfig_MixedKeys_NoPassphrase (line 934) | func TestLoadConfig_MixedKeys_NoPassphrase(t *testing.T) { function TestSaveConfig_UsesPassphraseProvider (line 991) | func TestSaveConfig_UsesPassphraseProvider(t *testing.T) { function TestLoadConfig_UsesPassphraseProvider (line 1021) | func TestLoadConfig_UsesPassphraseProvider(t *testing.T) { FILE: pkg/config/defaults.go function DefaultConfig (line 14) | func DefaultConfig() *Config { FILE: pkg/config/envkeys.go constant EnvHome (line 18) | EnvHome = "PICOCLAW_HOME" constant EnvConfig (line 22) | EnvConfig = "PICOCLAW_CONFIG" constant EnvBuiltinSkills (line 27) | EnvBuiltinSkills = "PICOCLAW_BUILTIN_SKILLS" constant EnvBinary (line 32) | EnvBinary = "PICOCLAW_BINARY" constant EnvGatewayHost (line 36) | EnvGatewayHost = "PICOCLAW_GATEWAY_HOST" FILE: pkg/config/migration.go function buildModelWithProtocol (line 16) | func buildModelWithProtocol(protocol, model string) string { type providerMigrationConfig (line 25) | type providerMigrationConfig struct function ConvertProvidersToModelList (line 37) | func ConvertProvidersToModelList(cfg *Config) []ModelConfig { function InheritProviderCredentials (line 514) | func InheritProviderCredentials(models []ModelConfig, providers Provider... FILE: pkg/config/migration_test.go function TestConvertProvidersToModelList_OpenAI (line 13) | func TestConvertProvidersToModelList_OpenAI(t *testing.T) { function TestConvertProvidersToModelList_Anthropic (line 42) | func TestConvertProvidersToModelList_Anthropic(t *testing.T) { function TestConvertProvidersToModelList_LiteLLM (line 66) | func TestConvertProvidersToModelList_LiteLLM(t *testing.T) { function TestConvertProvidersToModelList_Multiple (line 93) | func TestConvertProvidersToModelList_Multiple(t *testing.T) { function TestConvertProvidersToModelList_Empty (line 121) | func TestConvertProvidersToModelList_Empty(t *testing.T) { function TestConvertProvidersToModelList_Nil (line 133) | func TestConvertProvidersToModelList_Nil(t *testing.T) { function TestConvertProvidersToModelList_AllProviders (line 141) | func TestConvertProvidersToModelList_AllProviders(t *testing.T) { function TestConvertProvidersToModelList_Proxy (line 178) | func TestConvertProvidersToModelList_Proxy(t *testing.T) { function TestConvertProvidersToModelList_RequestTimeout (line 201) | func TestConvertProvidersToModelList_RequestTimeout(t *testing.T) { function TestConvertProvidersToModelList_AuthMethod (line 222) | func TestConvertProvidersToModelList_AuthMethod(t *testing.T) { function TestConvertProvidersToModelList_PreservesUserModel_DeepSeek (line 242) | func TestConvertProvidersToModelList_PreservesUserModel_DeepSeek(t *test... function TestConvertProvidersToModelList_PreservesUserModel_OpenAI (line 267) | func TestConvertProvidersToModelList_PreservesUserModel_OpenAI(t *testin... function TestConvertProvidersToModelList_PreservesUserModel_Anthropic (line 291) | func TestConvertProvidersToModelList_PreservesUserModel_Anthropic(t *tes... function TestConvertProvidersToModelList_PreservesUserModel_Qwen (line 315) | func TestConvertProvidersToModelList_PreservesUserModel_Qwen(t *testing.... function TestConvertProvidersToModelList_UsesDefaultWhenNoUserModel (line 339) | func TestConvertProvidersToModelList_UsesDefaultWhenNoUserModel(t *testi... function TestConvertProvidersToModelList_MultipleProviders_PreservesUserModel (line 364) | func TestConvertProvidersToModelList_MultipleProviders_PreservesUserMode... function TestConvertProvidersToModelList_ProviderNameAliases (line 399) | func TestConvertProvidersToModelList_ProviderNameAliases(t *testing.T) { function TestConvertProvidersToModelList_NoProviderField_SingleProvider (line 464) | func TestConvertProvidersToModelList_NoProviderField_SingleProvider(t *t... function TestConvertProvidersToModelList_NoProviderField_MultipleProviders (line 498) | func TestConvertProvidersToModelList_NoProviderField_MultipleProviders(t... function TestConvertProvidersToModelList_NoProviderField_NoModel (line 533) | func TestConvertProvidersToModelList_NoProviderField_NoModel(t *testing.... function TestBuildModelWithProtocol_NoPrefix (line 561) | func TestBuildModelWithProtocol_NoPrefix(t *testing.T) { function TestBuildModelWithProtocol_AlreadyHasPrefix (line 568) | func TestBuildModelWithProtocol_AlreadyHasPrefix(t *testing.T) { function TestBuildModelWithProtocol_DifferentPrefix (line 575) | func TestBuildModelWithProtocol_DifferentPrefix(t *testing.T) { function TestConvertProvidersToModelList_LegacyModelWithProtocolPrefix (line 587) | func TestConvertProvidersToModelList_LegacyModelWithProtocolPrefix(t *te... function TestInheritProviderCredentials_FillsMissingAPIKey (line 619) | func TestInheritProviderCredentials_FillsMissingAPIKey(t *testing.T) { function TestInheritProviderCredentials_ExplicitValuesTakePrecedence (line 640) | func TestInheritProviderCredentials_ExplicitValuesTakePrecedence(t *test... function TestInheritProviderCredentials_MultipleModels (line 668) | func TestInheritProviderCredentials_MultipleModels(t *testing.T) { function TestInheritProviderCredentials_NoMatchingProvider (line 706) | func TestInheritProviderCredentials_NoMatchingProvider(t *testing.T) { function TestInheritProviderCredentials_EmptyProviders (line 722) | func TestInheritProviderCredentials_EmptyProviders(t *testing.T) { function TestInheritProviderCredentials_InheritsRequestTimeout (line 736) | func TestInheritProviderCredentials_InheritsRequestTimeout(t *testing.T) { FILE: pkg/config/model_config_test.go function TestGetModelConfig_Found (line 15) | func TestGetModelConfig_Found(t *testing.T) { function TestGetModelConfig_NotFound (line 32) | func TestGetModelConfig_NotFound(t *testing.T) { function TestGetModelConfig_EmptyList (line 45) | func TestGetModelConfig_EmptyList(t *testing.T) { function TestGetModelConfig_RoundRobin (line 56) | func TestGetModelConfig_RoundRobin(t *testing.T) { function TestGetModelConfig_RoundRobinStartsFromFirstMatch (line 83) | func TestGetModelConfig_RoundRobinStartsFromFirstMatch(t *testing.T) { function TestGetModelConfig_Concurrent (line 113) | func TestGetModelConfig_Concurrent(t *testing.T) { function TestAgentDefaults_GetModelName_BackwardCompat (line 146) | func TestAgentDefaults_GetModelName_BackwardCompat(t *testing.T) { function TestAgentDefaults_JSON_BackwardCompat (line 178) | func TestAgentDefaults_JSON_BackwardCompat(t *testing.T) { function TestFullConfig_JSON_BackwardCompat (line 214) | func TestFullConfig_JSON_BackwardCompat(t *testing.T) { function TestModelConfig_Validate (line 277) | func TestModelConfig_Validate(t *testing.T) { function TestConfig_ValidateModelList (line 322) | func TestConfig_ValidateModelList(t *testing.T) { function TestModelConfig_RequestTimeoutParsing (line 397) | func TestModelConfig_RequestTimeoutParsing(t *testing.T) { function TestModelConfig_RequestTimeoutDefaultZeroValue (line 415) | func TestModelConfig_RequestTimeoutDefaultZeroValue(t *testing.T) { FILE: pkg/config/multikey_test.go function TestExpandMultiKeyModels_SingleKey (line 7) | func TestExpandMultiKeyModels_SingleKey(t *testing.T) { function TestExpandMultiKeyModels_APIKeysOnly (line 35) | func TestExpandMultiKeyModels_APIKeysOnly(t *testing.T) { function TestExpandMultiKeyModels_APIKeyAndAPIKeys (line 89) | func TestExpandMultiKeyModels_APIKeyAndAPIKeys(t *testing.T) { function TestExpandMultiKeyModels_WithExistingFallbacks (line 116) | func TestExpandMultiKeyModels_WithExistingFallbacks(t *testing.T) { function TestExpandMultiKeyModels_EmptyAPIKeys (line 143) | func TestExpandMultiKeyModels_EmptyAPIKeys(t *testing.T) { function TestExpandMultiKeyModels_Deduplication (line 165) | func TestExpandMultiKeyModels_Deduplication(t *testing.T) { function TestExpandMultiKeyModels_PreservesOtherFields (line 191) | func TestExpandMultiKeyModels_PreservesOtherFields(t *testing.T) { function TestMergeAPIKeys (line 239) | func TestMergeAPIKeys(t *testing.T) { FILE: pkg/config/version.go function FormatVersion (line 23) | func FormatVersion() string { function FormatBuildInfo (line 32) | func FormatBuildInfo() (string, string) { function GetVersion (line 42) | func GetVersion() string { FILE: pkg/config/version_test.go function TestFormatVersion_NoGitCommit (line 10) | func TestFormatVersion_NoGitCommit(t *testing.T) { function TestFormatVersion_WithGitCommit (line 20) | func TestFormatVersion_WithGitCommit(t *testing.T) { function TestFormatBuildInfo_UsesBuildTimeAndGoVersion_WhenSet (line 30) | func TestFormatBuildInfo_UsesBuildTimeAndGoVersion_WhenSet(t *testing.T) { function TestFormatBuildInfo_EmptyBuildTime_ReturnsEmptyBuild (line 43) | func TestFormatBuildInfo_EmptyBuildTime_ReturnsEmptyBuild(t *testing.T) { function TestFormatBuildInfo_EmptyGoVersion_FallsBackToRuntimeVersion (line 56) | func TestFormatBuildInfo_EmptyGoVersion_FallsBackToRuntimeVersion(t *tes... function TestGetVersion (line 69) | func TestGetVersion(t *testing.T) { function TestGetVersion_Custom (line 77) | func TestGetVersion_Custom(t *testing.T) { function TestVersion_DefaultIsDev (line 85) | func TestVersion_DefaultIsDev(t *testing.T) { FILE: pkg/constants/channels.go function IsInternalChannel (line 13) | func IsInternalChannel(channel string) bool { FILE: pkg/credential/credential.go constant PassphraseEnvVar (line 45) | PassphraseEnvVar = "PICOCLAW_KEY_PASSPHRASE" constant SSHKeyPathEnvVar (line 71) | SSHKeyPathEnvVar = "PICOCLAW_SSH_KEY_PATH" constant picoclawHome (line 75) | picoclawHome = "PICOCLAW_HOME" constant fileScheme (line 78) | fileScheme = "file://" constant encScheme (line 79) | encScheme = "enc://" constant hkdfInfo (line 80) | hkdfInfo = "picoclaw-credential-v1" constant saltLen (line 81) | saltLen = 16 constant nonceLen (line 82) | nonceLen = 12 constant keyLen (line 83) | keyLen = 32 type Resolver (line 88) | type Resolver struct method Resolve (line 110) | func (r *Resolver) Resolve(raw string) (string, error) { function NewResolver (line 95) | func NewResolver(configDir string) *Resolver { function resolveEncrypted (line 156) | func resolveEncrypted(raw string) (string, error) { function Encrypt (line 203) | func Encrypt(passphrase, sshKeyPath, plaintext string) (string, error) { function isWithinDir (line 242) | func isWithinDir(path, dir string) bool { function allowedSSHKeyPath (line 251) | func allowedSSHKeyPath(path string) bool { function deriveKey (line 286) | func deriveKey(passphrase, sshKeyPath string, salt []byte) ([]byte, erro... function pickSSHKeyPath (line 322) | func pickSSHKeyPath(override string) string { function findDefaultSSHKey (line 333) | func findDefaultSSHKey() string { FILE: pkg/credential/credential_test.go function TestResolve_PlainKey (line 11) | func TestResolve_PlainKey(t *testing.T) { function TestResolve_FileKey_Success (line 22) | func TestResolve_FileKey_Success(t *testing.T) { function TestResolve_FileKey_NotFound (line 39) | func TestResolve_FileKey_NotFound(t *testing.T) { function TestResolve_FileKey_Empty (line 47) | func TestResolve_FileKey_Empty(t *testing.T) { function TestResolve_EncKey_RoundTrip (line 62) | func TestResolve_EncKey_RoundTrip(t *testing.T) { function TestResolve_EncKey_WithSSHKey (line 92) | func TestResolve_EncKey_WithSSHKey(t *testing.T) { function TestResolve_EncKey_NoPassphrase (line 121) | func TestResolve_EncKey_NoPassphrase(t *testing.T) { function TestResolve_EncKey_BadCiphertext (line 143) | func TestResolve_EncKey_BadCiphertext(t *testing.T) { function TestResolve_EncKey_PayloadTooShort (line 154) | func TestResolve_EncKey_PayloadTooShort(t *testing.T) { function TestResolve_EncKey_WrongPassphrase (line 167) | func TestResolve_EncKey_WrongPassphrase(t *testing.T) { function TestEncrypt_EmptyPassphrase (line 189) | func TestEncrypt_EmptyPassphrase(t *testing.T) { function TestDeriveKey_SSHKeyNotFound (line 196) | func TestDeriveKey_SSHKeyNotFound(t *testing.T) { function TestResolve_FileRef_PathTraversal (line 226) | func TestResolve_FileRef_PathTraversal(t *testing.T) { function TestResolve_FileRef_withinConfigDir (line 251) | func TestResolve_FileRef_withinConfigDir(t *testing.T) { function TestEncrypt_SSHKeyOutsideAllowedDirs (line 268) | func TestEncrypt_SSHKeyOutsideAllowedDirs(t *testing.T) { FILE: pkg/credential/keygen.go function DefaultSSHKeyPath (line 16) | func DefaultSSHKeyPath() (string, error) { function GenerateSSHKey (line 28) | func GenerateSSHKey(path string) error { FILE: pkg/credential/keygen_test.go function TestGenerateSSHKey_CreatesFiles (line 13) | func TestGenerateSSHKey_CreatesFiles(t *testing.T) { function TestGenerateSSHKey_OverwritesExisting (line 76) | func TestGenerateSSHKey_OverwritesExisting(t *testing.T) { function TestGenerateSSHKey_CreatesDirectory (line 103) | func TestGenerateSSHKey_CreatesDirectory(t *testing.T) { FILE: pkg/credential/store.go type SecureStore (line 10) | type SecureStore struct method SetString (line 20) | func (s *SecureStore) SetString(passphrase string) { method Get (line 29) | func (s *SecureStore) Get() string { method IsSet (line 37) | func (s *SecureStore) IsSet() bool { method Clear (line 42) | func (s *SecureStore) Clear() { function NewSecureStore (line 15) | func NewSecureStore() *SecureStore { FILE: pkg/credential/store_test.go function TestSecureStore_SetGet (line 8) | func TestSecureStore_SetGet(t *testing.T) { function TestSecureStore_Clear (line 23) | func TestSecureStore_Clear(t *testing.T) { function TestSecureStore_SetOverwrites (line 36) | func TestSecureStore_SetOverwrites(t *testing.T) { function TestSecureStore_EmptyPassphrase (line 46) | func TestSecureStore_EmptyPassphrase(t *testing.T) { function TestSecureStore_ConcurrentSetGet (line 55) | func TestSecureStore_ConcurrentSetGet(t *testing.T) { FILE: pkg/cron/service.go type CronSchedule (line 18) | type CronSchedule struct type CronPayload (line 26) | type CronPayload struct type CronJobState (line 35) | type CronJobState struct type CronJob (line 42) | type CronJob struct type CronStore (line 54) | type CronStore struct type JobHandler (line 59) | type JobHandler type CronService (line 61) | type CronService struct method Start (line 84) | func (cs *CronService) Start() error { method Stop (line 111) | func (cs *CronService) Stop() { method runLoop (line 126) | func (cs *CronService) runLoop(stopChan chan struct{}) { method checkJobs (line 173) | func (cs *CronService) checkJobs() { method executeJobByID (line 215) | func (cs *CronService) executeJobByID(jobID string) { method computeNextRun (line 304) | func (cs *CronService) computeNextRun(schedule *CronSchedule, nowMS in... method notify (line 339) | func (cs *CronService) notify() { method recomputeNextRuns (line 347) | func (cs *CronService) recomputeNextRuns() { method getNextWakeMS (line 357) | func (cs *CronService) getNextWakeMS() *int64 { method Load (line 369) | func (cs *CronService) Load() error { method SetOnJob (line 375) | func (cs *CronService) SetOnJob(handler JobHandler) { method loadStore (line 381) | func (cs *CronService) loadStore() error { method saveStoreUnsafe (line 398) | func (cs *CronService) saveStoreUnsafe() error { method AddJob (line 408) | func (cs *CronService) AddJob( method UpdateJob (line 453) | func (cs *CronService) UpdateJob(job *CronJob) error { method RemoveJob (line 470) | func (cs *CronService) RemoveJob(jobID string) bool { method removeJobUnsafe (line 477) | func (cs *CronService) removeJobUnsafe(jobID string) bool { method EnableJob (line 499) | func (cs *CronService) EnableJob(jobID string, enabled bool) *CronJob { method ListJobs (line 528) | func (cs *CronService) ListJobs(includeDisabled bool) []CronJob { method Status (line 546) | func (cs *CronService) Status() map[string]any { function NewCronService (line 72) | func NewCronService(storePath string, onJob JobHandler) *CronService { function generateID (line 564) | func generateID() string { FILE: pkg/cron/service_test.go function TestSaveStore_FilePermissions (line 13) | func TestSaveStore_FilePermissions(t *testing.T) { function int64Ptr (line 39) | func int64Ptr(v int64) *int64 { function setupService (line 43) | func setupService(handler JobHandler) (*CronService, string) { function TestCronService_CRUD (line 49) | func TestCronService_CRUD(t *testing.T) { function TestCronService_ComputeNextRun (line 86) | func TestCronService_ComputeNextRun(t *testing.T) { function TestCronService_ExecutionFlow (line 115) | func TestCronService_ExecutionFlow(t *testing.T) { function TestCronService_PersistenceIntegrity (line 163) | func TestCronService_PersistenceIntegrity(t *testing.T) { function TestCronService_ConcurrentAccess (line 197) | func TestCronService_ConcurrentAccess(t *testing.T) { FILE: pkg/devices/events/events.go type EventSource (line 5) | type EventSource interface type Action (line 11) | type Action constant ActionAdd (line 14) | ActionAdd Action = "add" constant ActionRemove (line 15) | ActionRemove Action = "remove" constant ActionChange (line 16) | ActionChange Action = "change" type Kind (line 19) | type Kind constant KindUSB (line 22) | KindUSB Kind = "usb" constant KindBluetooth (line 23) | KindBluetooth Kind = "bluetooth" constant KindPCI (line 24) | KindPCI Kind = "pci" constant KindGeneric (line 25) | KindGeneric Kind = "generic" type DeviceEvent (line 28) | type DeviceEvent struct method FormatMessage (line 39) | func (e *DeviceEvent) FormatMessage() string { FILE: pkg/devices/service.go type Service (line 17) | type Service struct method SetBus (line 47) | func (s *Service) SetBus(msgBus *bus.MessageBus) { method Start (line 53) | func (s *Service) Start(ctx context.Context) error { method Stop (line 83) | func (s *Service) Stop() { method handleEvents (line 99) | func (s *Service) handleEvents(kind events.Kind, eventCh <-chan *event... method sendNotification (line 108) | func (s *Service) sendNotification(ev *events.DeviceEvent) { type Config (line 27) | type Config struct function NewService (line 33) | func NewService(cfg Config, stateMgr *state.Manager) *Service { function parseLastChannel (line 146) | func parseLastChannel(lastChannel string) (platform, userID string) { FILE: pkg/devices/sources/usb_linux.go type USBMonitor (line 37) | type USBMonitor struct method Kind (line 46) | func (m *USBMonitor) Kind() events.Kind { method Start (line 50) | func (m *USBMonitor) Start(ctx context.Context) (<-chan *events.Device... method Stop (line 125) | func (m *USBMonitor) Stop() error { function NewUSBMonitor (line 42) | func NewUSBMonitor() *USBMonitor { function parseUSBEvent (line 135) | func parseUSBEvent(action string, props map[string]string) *events.Devic... FILE: pkg/devices/sources/usb_stub.go type USBMonitor (line 11) | type USBMonitor struct method Kind (line 17) | func (m *USBMonitor) Kind() events.Kind { method Start (line 21) | func (m *USBMonitor) Start(ctx context.Context) (<-chan *events.Device... method Stop (line 27) | func (m *USBMonitor) Stop() error { function NewUSBMonitor (line 13) | func NewUSBMonitor() *USBMonitor { FILE: pkg/fileutil/file.go function WriteFileAtomic (line 52) | func WriteFileAtomic(path string, data []byte, perm os.FileMode) error { FILE: pkg/gateway/gateway.go constant serviceShutdownTimeout (line 46) | serviceShutdownTimeout = 30 * time.Second constant providerReloadTimeout (line 47) | providerReloadTimeout = 30 * time.Second constant gracefulShutdownTimeout (line 48) | gracefulShutdownTimeout = 15 * time.Second type services (line 51) | type services struct type startupBlockedProvider (line 62) | type startupBlockedProvider struct method Chat (line 66) | func (p *startupBlockedProvider) Chat( method GetDefaultModel (line 76) | func (p *startupBlockedProvider) GetDefaultModel() string { function Run (line 81) | func Run(debug bool, configPath string, allowEmptyStartup bool) error { function executeReload (line 199) | func executeReload( function createStartupProvider (line 212) | func createStartupProvider( function setupAndStartServices (line 229) | func setupAndStartServices( function stopAndCleanupServices (line 327) | func stopAndCleanupServices(runningServices *services, shutdownTimeout t... function shutdownGateway (line 351) | func shutdownGateway( function handleConfigReload (line 369) | func handleConfigReload( function restartServices (line 431) | func restartServices( function setupConfigWatcherPolling (line 526) | func setupConfigWatcherPolling(configPath string, debug bool) (chan *con... function getFileModTime (line 592) | func getFileModTime(path string) time.Time { function getFileSize (line 600) | func getFileSize(path string) int64 { function setupCronTool (line 608) | func setupCronTool( function createHeartbeatHandler (line 641) | func createHeartbeatHandler(agentLoop *agent.AgentLoop) func(prompt, cha... FILE: pkg/health/server.go type Server (line 14) | type Server struct method Start (line 60) | func (s *Server) Start() error { method StartContext (line 67) | func (s *Server) StartContext(ctx context.Context) error { method Stop (line 85) | func (s *Server) Stop(ctx context.Context) error { method SetReady (line 92) | func (s *Server) SetReady(ready bool) { method RegisterCheck (line 98) | func (s *Server) RegisterCheck(name string, checkFn func() (bool, stri... method SetReloadFunc (line 112) | func (s *Server) SetReloadFunc(fn func() error) { method reloadHandler (line 118) | func (s *Server) reloadHandler(w http.ResponseWriter, r *http.Request) { method healthHandler (line 149) | func (s *Server) healthHandler(w http.ResponseWriter, r *http.Request) { method readyHandler (line 163) | func (s *Server) readyHandler(w http.ResponseWriter, r *http.Request) { method RegisterOnMux (line 203) | func (s *Server) RegisterOnMux(mux *http.ServeMux) { type Check (line 23) | type Check struct type StatusResponse (line 30) | type StatusResponse struct function NewServer (line 37) | func NewServer(host string, port int) *Server { function statusString (line 209) | func statusString(ok bool) string { FILE: pkg/heartbeat/service.go constant minIntervalMinutes (line 27) | minIntervalMinutes = 5 constant defaultIntervalMinutes (line 28) | defaultIntervalMinutes = 30 type HeartbeatHandler (line 34) | type HeartbeatHandler type HeartbeatService (line 37) | type HeartbeatService struct method SetBus (line 68) | func (hs *HeartbeatService) SetBus(msgBus *bus.MessageBus) { method SetHandler (line 75) | func (hs *HeartbeatService) SetHandler(handler HeartbeatHandler) { method Start (line 82) | func (hs *HeartbeatService) Start() error { method Stop (line 107) | func (hs *HeartbeatService) Stop() { method IsRunning (line 121) | func (hs *HeartbeatService) IsRunning() bool { method runLoop (line 128) | func (hs *HeartbeatService) runLoop(stopChan chan struct{}) { method executeHeartbeat (line 148) | func (hs *HeartbeatService) executeHeartbeat() { method buildPrompt (line 221) | func (hs *HeartbeatService) buildPrompt() string { method createDefaultHeartbeatTemplate (line 253) | func (hs *HeartbeatService) createDefaultHeartbeatTemplate() { method sendResponse (line 288) | func (hs *HeartbeatService) sendResponse(response string) { method parseLastChannel (line 325) | func (hs *HeartbeatService) parseLastChannel(lastChannel string) (plat... method logInfof (line 349) | func (hs *HeartbeatService) logInfof(format string, args ...any) { method logErrorf (line 354) | func (hs *HeartbeatService) logErrorf(format string, args ...any) { method logf (line 359) | func (hs *HeartbeatService) logf(level, format string, args ...any) { function NewHeartbeatService (line 49) | func NewHeartbeatService(workspace string, intervalMinutes int, enabled ... FILE: pkg/heartbeat/service_test.go function TestExecuteHeartbeat_Async (line 12) | func TestExecuteHeartbeat_Async(t *testing.T) { function TestExecuteHeartbeat_ResultLogging (line 50) | func TestExecuteHeartbeat_ResultLogging(t *testing.T) { function TestHeartbeatService_StartStop (line 110) | func TestHeartbeatService_StartStop(t *testing.T) { function TestHeartbeatService_Disabled (line 129) | func TestHeartbeatService_Disabled(t *testing.T) { function TestExecuteHeartbeat_NilResult (line 146) | func TestExecuteHeartbeat_NilResult(t *testing.T) { function TestLogPath (line 168) | func TestLogPath(t *testing.T) { function TestHeartbeatFilePath (line 188) | func TestHeartbeatFilePath(t *testing.T) { FILE: pkg/identity/identity.go function BuildCanonicalID (line 14) | func BuildCanonicalID(platform, platformID string) string { function ParseCanonicalID (line 25) | func ParseCanonicalID(canonical string) (platform, id string, ok bool) { function MatchAllowed (line 41) | func MatchAllowed(sender bus.SenderInfo, allowed string) bool { function isNumeric (line 98) | func isNumeric(s string) bool { FILE: pkg/identity/identity_test.go function TestBuildCanonicalID (line 9) | func TestBuildCanonicalID(t *testing.T) { function TestParseCanonicalID (line 32) | func TestParseCanonicalID(t *testing.T) { function TestMatchAllowed (line 58) | func TestMatchAllowed(t *testing.T) { function TestIsNumeric (line 230) | func TestIsNumeric(t *testing.T) { FILE: pkg/logger/logger.go constant DEBUG (line 18) | DEBUG = zerolog.DebugLevel constant INFO (line 19) | INFO = zerolog.InfoLevel constant WARN (line 20) | WARN = zerolog.WarnLevel constant ERROR (line 21) | ERROR = zerolog.ErrorLevel constant FATAL (line 22) | FATAL = zerolog.FatalLevel function init (line 42) | func init() { function formatFieldValue (line 59) | func formatFieldValue(i any) string { function SetLevel (line 90) | func SetLevel(level LogLevel) { function SetConsoleLevel (line 97) | func SetConsoleLevel(level LogLevel) { function GetLevel (line 103) | func GetLevel() LogLevel { function EnableFileLogging (line 109) | func EnableFileLogging(filePath string) error { function DisableFileLogging (line 132) | func DisableFileLogging() { function getCallerSkip (line 143) | func getCallerSkip() int { function getEvent (line 174) | func getEvent(logger zerolog.Logger, level LogLevel) *zerolog.Event { function logMessage (line 191) | func logMessage(level LogLevel, component string, message string, fields... function appendFields (line 225) | func appendFields(event *zerolog.Event, fields map[string]any) { function Debug (line 245) | func Debug(message string) { function DebugC (line 249) | func DebugC(component string, message string) { function Debugf (line 253) | func Debugf(message string, ss ...any) { function DebugF (line 257) | func DebugF(message string, fields map[string]any) { function DebugCF (line 261) | func DebugCF(component string, message string, fields map[string]any) { function Info (line 265) | func Info(message string) { function InfoC (line 269) | func InfoC(component string, message string) { function InfoF (line 273) | func InfoF(message string, fields map[string]any) { function Infof (line 277) | func Infof(message string, ss ...any) { function InfoCF (line 281) | func InfoCF(component string, message string, fields map[string]any) { function Warn (line 285) | func Warn(message string) { function WarnC (line 289) | func WarnC(component string, message string) { function WarnF (line 293) | func WarnF(message string, fields map[string]any) { function WarnCF (line 297) | func WarnCF(component string, message string, fields map[string]any) { function Error (line 301) | func Error(message string) { function ErrorC (line 305) | func ErrorC(component string, message string) { function Errorf (line 309) | func Errorf(message string, ss ...any) { function ErrorF (line 313) | func ErrorF(message string, fields map[string]any) { function ErrorCF (line 317) | func ErrorCF(component string, message string, fields map[string]any) { function Fatal (line 321) | func Fatal(message string) { function FatalC (line 325) | func FatalC(component string, message string) { function Fatalf (line 329) | func Fatalf(message string, ss ...any) { function FatalF (line 333) | func FatalF(message string, fields map[string]any) { function FatalCF (line 337) | func FatalCF(component string, message string, fields map[string]any) { FILE: pkg/logger/logger_3rd_party.go function maskSecrets (line 16) | func maskSecrets(s string) string { type Logger (line 21) | type Logger struct method Debug (line 27) | func (b *Logger) Debug(v ...any) { method Info (line 32) | func (b *Logger) Info(v ...any) { method Warn (line 37) | func (b *Logger) Warn(v ...any) { method Error (line 42) | func (b *Logger) Error(v ...any) { method Debugf (line 47) | func (b *Logger) Debugf(format string, v ...any) { method Infof (line 52) | func (b *Logger) Infof(format string, v ...any) { method Warnf (line 57) | func (b *Logger) Warnf(format string, v ...any) { method Warningf (line 62) | func (b *Logger) Warningf(format string, v ...any) { method Errorf (line 67) | func (b *Logger) Errorf(format string, v ...any) { method Fatalf (line 72) | func (b *Logger) Fatalf(format string, v ...any) { method Log (line 84) | func (b *Logger) Log(msgL, caller int, format string, a ...any) { method Sync (line 95) | func (b *Logger) Sync() error { method WithLevels (line 100) | func (b *Logger) WithLevels(levels map[int]LogLevel) *Logger { function NewLogger (line 106) | func NewLogger(component string) *Logger { FILE: pkg/logger/logger_test.go function TestLogLevelFiltering (line 7) | func TestLogLevelFiltering(t *testing.T) { function TestLoggerWithComponent (line 47) | func TestLoggerWithComponent(t *testing.T) { function TestLogLevels (line 83) | func TestLogLevels(t *testing.T) { function TestSetGetLevel (line 105) | func TestSetGetLevel(t *testing.T) { function TestLoggerHelperFunctions (line 119) | func TestLoggerHelperFunctions(t *testing.T) { function TestFormatFieldValue (line 145) | func TestFormatFieldValue(t *testing.T) { FILE: pkg/mcp/manager.go type headerTransport (line 23) | type headerTransport struct method RoundTrip (line 28) | func (t *headerTransport) RoundTrip(req *http.Request) (*http.Response... function loadEnvFile (line 49) | func loadEnvFile(path string) (map[string]string, error) { type ServerConnection (line 101) | type ServerConnection struct type Manager (line 109) | type Manager struct method LoadFromConfig (line 124) | func (m *Manager) LoadFromConfig(ctx context.Context, cfg *config.Conf... method LoadFromMCPConfig (line 130) | func (m *Manager) LoadFromMCPConfig( method ConnectServer (line 240) | func (m *Manager) ConnectServer( method GetServers (line 418) | func (m *Manager) GetServers() map[string]*ServerConnection { method GetServer (line 430) | func (m *Manager) GetServer(name string) (*ServerConnection, bool) { method CallTool (line 439) | func (m *Manager) CallTool( method Close (line 480) | func (m *Manager) Close() error { method GetAllTools (line 521) | func (m *Manager) GetAllTools() map[string][]*mcp.Tool { function NewManager (line 117) | func NewManager() *Manager { FILE: pkg/mcp/manager_test.go function TestLoadEnvFile (line 15) | func TestLoadEnvFile(t *testing.T) { function TestLoadEnvFileNotFound (line 132) | func TestLoadEnvFileNotFound(t *testing.T) { function TestEnvFilePriority (line 139) | func TestEnvFilePriority(t *testing.T) { function TestLoadFromMCPConfig_EmptyWorkspaceWithRelativeEnvFile (line 193) | func TestLoadFromMCPConfig_EmptyWorkspaceWithRelativeEnvFile(t *testing.... function TestNewManager_InitialState (line 220) | func TestNewManager_InitialState(t *testing.T) { function TestLoadFromMCPConfig_DisabledOrEmptyServers (line 230) | func TestLoadFromMCPConfig_DisabledOrEmptyServers(t *testing.T) { function TestGetServers_ReturnsCopy (line 252) | func TestGetServers_ReturnsCopy(t *testing.T) { function TestGetAllTools_FiltersEmptyTools (line 264) | func TestGetAllTools_FiltersEmptyTools(t *testing.T) { function TestCallTool_ErrorsForClosedOrMissingServer (line 278) | func TestCallTool_ErrorsForClosedOrMissingServer(t *testing.T) { function TestClose_IdempotentOnEmptyManager (line 299) | func TestClose_IdempotentOnEmptyManager(t *testing.T) { FILE: pkg/media/store.go type MediaMeta (line 15) | type MediaMeta struct type MediaStore (line 22) | type MediaStore interface type mediaEntry (line 40) | type mediaEntry struct type MediaCleanerConfig (line 47) | type MediaCleanerConfig struct type FileMediaStore (line 55) | type FileMediaStore struct method Store (line 91) | func (s *FileMediaStore) Store(localPath string, meta MediaMeta, scope... method Resolve (line 112) | func (s *FileMediaStore) Resolve(ref string) (string, error) { method ResolveWithMeta (line 124) | func (s *FileMediaStore) ResolveWithMeta(ref string) (string, MediaMet... method ReleaseAll (line 138) | func (s *FileMediaStore) ReleaseAll(scope string) error { method CleanExpired (line 175) | func (s *FileMediaStore) CleanExpired() int { method Start (line 224) | func (s *FileMediaStore) Start() { method Stop (line 264) | func (s *FileMediaStore) Stop() { function NewFileMediaStore (line 69) | func NewFileMediaStore() *FileMediaStore { function NewFileMediaStoreWithCleanup (line 79) | func NewFileMediaStoreWithCleanup(cfg MediaCleanerConfig) *FileMediaStore { FILE: pkg/media/store_test.go function createTempFile (line 13) | func createTempFile(t *testing.T, dir, name string) string { function TestStoreAndResolve (line 22) | func TestStoreAndResolve(t *testing.T) { function TestReleaseAll (line 46) | func TestReleaseAll(t *testing.T) { function TestMultiScopeIsolation (line 80) | func TestMultiScopeIsolation(t *testing.T) { function TestReleaseAllIdempotent (line 116) | func TestReleaseAllIdempotent(t *testing.T) { function TestReleaseAllCleansMappingsIfRefsMissing (line 137) | func TestReleaseAllCleansMappingsIfRefsMissing(t *testing.T) { function TestStoreNonexistentFile (line 167) | func TestStoreNonexistentFile(t *testing.T) { function TestResolveWithMeta (line 181) | func TestResolveWithMeta(t *testing.T) { function TestConcurrentSafety (line 221) | func TestConcurrentSafety(t *testing.T) { function newTestStoreWithCleanup (line 260) | func newTestStoreWithCleanup(maxAge time.Duration) *FileMediaStore { function TestCleanExpiredRemovesOldEntries (line 269) | func TestCleanExpiredRemovesOldEntries(t *testing.T) { function TestCleanExpiredKeepsNonExpired (line 296) | func TestCleanExpiredKeepsNonExpired(t *testing.T) { function TestCleanExpiredMixedAges (line 321) | func TestCleanExpiredMixedAges(t *testing.T) { function TestCleanExpiredCleansEmptyScopes (line 349) | func TestCleanExpiredCleansEmptyScopes(t *testing.T) { function TestStartStopLifecycle (line 369) | func TestStartStopLifecycle(t *testing.T) { function TestCleanExpiredZeroMaxAge (line 387) | func TestCleanExpiredZeroMaxAge(t *testing.T) { function TestStartDisabledIsNoop (line 408) | func TestStartDisabledIsNoop(t *testing.T) { function TestStartZeroIntervalNoPanic (line 419) | func TestStartZeroIntervalNoPanic(t *testing.T) { function TestStartZeroMaxAgeNoPanic (line 430) | func TestStartZeroMaxAgeNoPanic(t *testing.T) { function TestConcurrentCleanupSafety (line 440) | func TestConcurrentCleanupSafety(t *testing.T) { function TestRefToScopeConsistency (line 495) | func TestRefToScopeConsistency(t *testing.T) { FILE: pkg/media/tempdir.go constant TempDirName (line 8) | TempDirName = "picoclaw_media" function TempDir (line 11) | func TempDir() string { FILE: pkg/memory/jsonl.go constant numLockShards (line 26) | numLockShards = 64 constant maxLineSize (line 32) | maxLineSize = 10 * 1024 * 1024 type sessionMeta (line 36) | type sessionMeta struct type JSONLStore (line 56) | type JSONLStore struct method sessionLock (line 73) | func (s *JSONLStore) sessionLock(key string) *sync.Mutex { method jsonlPath (line 79) | func (s *JSONLStore) jsonlPath(key string) string { method metaPath (line 83) | func (s *JSONLStore) metaPath(key string) string { method readMeta (line 101) | func (s *JSONLStore) readMeta(key string) (sessionMeta, error) { method writeMeta (line 119) | func (s *JSONLStore) writeMeta(key string, meta sessionMeta) error { method AddMessage (line 202) | func (s *JSONLStore) AddMessage( method AddFullMessage (line 211) | func (s *JSONLStore) AddFullMessage( method addMsg (line 218) | func (s *JSONLStore) addMsg(sessionKey string, msg providers.Message) ... method GetHistory (line 270) | func (s *JSONLStore) GetHistory( method GetSummary (line 292) | func (s *JSONLStore) GetSummary( method SetSummary (line 306) | func (s *JSONLStore) SetSummary( method TruncateHistory (line 327) | func (s *JSONLStore) TruncateHistory( method SetHistory (line 363) | func (s *JSONLStore) SetHistory( method Compact (line 402) | func (s *JSONLStore) Compact( method rewriteJSONL (line 443) | func (s *JSONLStore) rewriteJSONL( method Close (line 458) | func (s *JSONLStore) Close() error { function NewJSONLStore (line 62) | func NewJSONLStore(dir string) (*JSONLStore, error) { function sanitizeKey (line 92) | func sanitizeKey(key string) string { function readMessages (line 131) | func readMessages(path string, skip int) ([]providers.Message, error) { function countLines (line 181) | func countLines(path string) (int, error) { FILE: pkg/memory/jsonl_test.go function newTestStore (line 13) | func newTestStore(t *testing.T) *JSONLStore { function TestNewJSONLStore_CreatesDirectory (line 22) | func TestNewJSONLStore_CreatesDirectory(t *testing.T) { function TestAddMessage_BasicRoundtrip (line 39) | func TestAddMessage_BasicRoundtrip(t *testing.T) { function TestAddMessage_AutoCreatesSession (line 67) | func TestAddMessage_AutoCreatesSession(t *testing.T) { function TestAddFullMessage_WithToolCalls (line 86) | func TestAddFullMessage_WithToolCalls(t *testing.T) { function TestAddFullMessage_ToolCallID (line 129) | func TestAddFullMessage_ToolCallID(t *testing.T) { function TestGetHistory_EmptySession (line 156) | func TestGetHistory_EmptySession(t *testing.T) { function TestGetHistory_Ordering (line 172) | func TestGetHistory_Ordering(t *testing.T) { function TestSetSummary_GetSummary (line 202) | func TestSetSummary_GetSummary(t *testing.T) { function TestTruncateHistory_KeepLast (line 244) | func TestTruncateHistory_KeepLast(t *testing.T) { function TestTruncateHistory_KeepZero (line 280) | func TestTruncateHistory_KeepZero(t *testing.T) { function TestTruncateHistory_KeepMoreThanExists (line 305) | func TestTruncateHistory_KeepMoreThanExists(t *testing.T) { function TestSetHistory_ReplacesAll (line 331) | func TestSetHistory_ReplacesAll(t *testing.T) { function TestSetHistory_ResetsSkip (line 365) | func TestSetHistory_ResetsSkip(t *testing.T) { function TestColonInKey (line 402) | func TestColonInKey(t *testing.T) { function TestCompact_RemovesSkippedMessages (line 426) | func TestCompact_RemovesSkippedMessages(t *testing.T) { function TestCompact_NoOpWhenNoSkip (line 479) | func TestCompact_NoOpWhenNoSkip(t *testing.T) { function TestCompact_ThenAppend (line 505) | func TestCompact_ThenAppend(t *testing.T) { function TestTruncateHistory_StaleMetaCount (line 547) | func TestTruncateHistory_StaleMetaCount(t *testing.T) { function TestCrashRecovery_PartialLine (line 598) | func TestCrashRecovery_PartialLine(t *testing.T) { function TestPersistence_AcrossInstances (line 633) | func TestPersistence_AcrossInstances(t *testing.T) { function TestConcurrent_AddAndRead (line 676) | func TestConcurrent_AddAndRead(t *testing.T) { function TestConcurrent_SummarizeRace (line 706) | func TestConcurrent_SummarizeRace(t *testing.T) { function TestMultipleSessions_Isolation (line 754) | func TestMultipleSessions_Isolation(t *testing.T) { function BenchmarkAddMessage (line 784) | func BenchmarkAddMessage(b *testing.B) { function BenchmarkGetHistory_100 (line 799) | func BenchmarkGetHistory_100(b *testing.B) { function BenchmarkGetHistory_1000 (line 818) | func BenchmarkGetHistory_1000(b *testing.B) { FILE: pkg/memory/migration.go type jsonSession (line 17) | type jsonSession struct function MigrateFromJSON (line 31) | func MigrateFromJSON( FILE: pkg/memory/migration_test.go function writeJSONSession (line 14) | func writeJSONSession( function TestMigrateFromJSON_Basic (line 28) | func TestMigrateFromJSON_Basic(t *testing.T) { function TestMigrateFromJSON_WithToolCalls (line 72) | func TestMigrateFromJSON_WithToolCalls(t *testing.T) { function TestMigrateFromJSON_MultipleFiles (line 130) | func TestMigrateFromJSON_MultipleFiles(t *testing.T) { function TestMigrateFromJSON_InvalidJSON (line 165) | func TestMigrateFromJSON_InvalidJSON(t *testing.T) { function TestMigrateFromJSON_RenamesFiles (line 203) | func TestMigrateFromJSON_RenamesFiles(t *testing.T) { function TestMigrateFromJSON_Idempotent (line 234) | func TestMigrateFromJSON_Idempotent(t *testing.T) { function TestMigrateFromJSON_ColonInKey (line 272) | func TestMigrateFromJSON_ColonInKey(t *testing.T) { function TestMigrateFromJSON_RetryAfterCrash (line 317) | func TestMigrateFromJSON_RetryAfterCrash(t *testing.T) { function TestMigrateFromJSON_NonexistentDir (line 373) | func TestMigrateFromJSON_NonexistentDir(t *testing.T) { function TestMigrateFromJSON_SkipsMetaJSONFiles (line 386) | func TestMigrateFromJSON_SkipsMetaJSONFiles(t *testing.T) { FILE: pkg/memory/store.go type Store (line 11) | type Store interface FILE: pkg/migrate/internal/common.go function ResolveTargetHome (line 12) | func ResolveTargetHome(override string) (string, error) { function ExpandHome (line 26) | func ExpandHome(path string) string { function ResolveWorkspace (line 40) | func ResolveWorkspace(homeDir string) string { function PlanWorkspaceMigration (line 44) | func PlanWorkspaceMigration( function planFileCopy (line 76) | func planFileCopy(src, dst string, force bool) Action { function planDirCopy (line 104) | func planDirCopy(srcDir, dstDir string, force bool) ([]Action, error) { function RelPath (line 136) | func RelPath(path, base string) string { function CopyFile (line 144) | func CopyFile(src, dst string) error { FILE: pkg/migrate/internal/common_test.go function TestExpandHome (line 12) | func TestExpandHome(t *testing.T) { function TestExpandHomeWithTilde (line 28) | func TestExpandHomeWithTilde(t *testing.T) { function TestResolveWorkspace (line 39) | func TestResolveWorkspace(t *testing.T) { function TestRelPath (line 44) | func TestRelPath(t *testing.T) { function TestRelPathError (line 49) | func TestRelPathError(t *testing.T) { function TestResolveTargetHome (line 54) | func TestResolveTargetHome(t *testing.T) { function TestResolveTargetHomeWithOverride (line 63) | func TestResolveTargetHomeWithOverride(t *testing.T) { function TestCopyFile (line 69) | func TestCopyFile(t *testing.T) { function TestCopyFileSourceNotFound (line 85) | func TestCopyFileSourceNotFound(t *testing.T) { function TestPlanWorkspaceMigration (line 92) | func TestPlanWorkspaceMigration(t *testing.T) { function TestPlanWorkspaceMigrationExistingFile (line 121) | func TestPlanWorkspaceMigrationExistingFile(t *testing.T) { function TestPlanWorkspaceMigrationNonExistentSource (line 172) | func TestPlanWorkspaceMigrationNonExistentSource(t *testing.T) { FILE: pkg/migrate/internal/types.go type Options (line 3) | type Options struct type Operation (line 14) | type Operation interface type HandlerFactory (line 24) | type HandlerFactory type ActionType (line 26) | type ActionType constant ActionCopy (line 29) | ActionCopy ActionType = iota constant ActionSkip (line 30) | ActionSkip constant ActionBackup (line 31) | ActionBackup constant ActionConvertConfig (line 32) | ActionConvertConfig constant ActionCreateDir (line 33) | ActionCreateDir constant ActionMergeConfig (line 34) | ActionMergeConfig type Action (line 37) | type Action struct type Result (line 44) | type Result struct FILE: pkg/migrate/migrate.go constant ActionCopy (line 23) | ActionCopy = internal.ActionCopy constant ActionSkip (line 24) | ActionSkip = internal.ActionSkip constant ActionBackup (line 25) | ActionBackup = internal.ActionBackup constant ActionConvertConfig (line 26) | ActionConvertConfig = internal.ActionConvertConfig constant ActionCreateDir (line 27) | ActionCreateDir = internal.ActionCreateDir constant ActionMergeConfig (line 28) | ActionMergeConfig = internal.ActionMergeConfig type MigrateInstance (line 31) | type MigrateInstance struct method Register (line 50) | func (m *MigrateInstance) Register(moduleName string, module Operation) { method getCurrentHandler (line 54) | func (m *MigrateInstance) getCurrentHandler() (Operation, error) { method Run (line 66) | func (m *MigrateInstance) Run(opts Options) (*Result, error) { method Plan (line 123) | func (m *MigrateInstance) Plan(opts Options, sourceHome, targetHome st... method Execute (line 174) | func (m *MigrateInstance) Execute(actions []Action, sourceHome, target... method PrintSummary (line 249) | func (m *MigrateInstance) PrintSummary(result *Result) { function NewMigrateInstance (line 36) | func NewMigrateInstance(opts Options) *MigrateInstance { function Confirm (line 242) | func Confirm() bool { function PrintPlan (line 280) | func PrintPlan(actions []Action, warnings []string) { FILE: pkg/migrate/migrate_test.go function TestNewMigrateInstance (line 12) | func TestNewMigrateInstance(t *testing.T) { function TestMigrateInstanceRegister (line 21) | func TestMigrateInstanceRegister(t *testing.T) { function TestMigrateInstanceGetCurrentHandler (line 33) | func TestMigrateInstanceGetCurrentHandler(t *testing.T) { function TestMigrateInstanceGetCurrentHandlerWithSource (line 48) | func TestMigrateInstanceGetCurrentHandlerWithSource(t *testing.T) { function TestMigrateInstanceGetCurrentHandlerNotFound (line 66) | func TestMigrateInstanceGetCurrentHandlerNotFound(t *testing.T) { function TestMigrateInstancePlanWithInvalidSource (line 77) | func TestMigrateInstancePlanWithInvalidSource(t *testing.T) { function TestMigrateInstancePlanConfigOnlyAndWorkspaceOnlyMutuallyExclusive (line 87) | func TestMigrateInstancePlanConfigOnlyAndWorkspaceOnlyMutuallyExclusive(... function TestMigrateInstancePlanRefreshSetsWorkspaceOnly (line 104) | func TestMigrateInstancePlanRefreshSetsWorkspaceOnly(t *testing.T) { function TestMigrateInstancePlanSourceNotFound (line 117) | func TestMigrateInstancePlanSourceNotFound(t *testing.T) { function TestMigrateInstanceExecute (line 128) | func TestMigrateInstanceExecute(t *testing.T) { function TestMigrateInstanceExecuteWithInvalidSource (line 163) | func TestMigrateInstanceExecuteWithInvalidSource(t *testing.T) { function TestMigrateInstanceExecuteCreateDir (line 190) | func TestMigrateInstanceExecuteCreateDir(t *testing.T) { function TestMigrateInstanceExecuteBackup (line 215) | func TestMigrateInstanceExecuteBackup(t *testing.T) { function TestMigrateInstanceExecuteSkip (line 256) | func TestMigrateInstanceExecuteSkip(t *testing.T) { function TestMigrateInstancePrintSummary (line 277) | func TestMigrateInstancePrintSummary(t *testing.T) { function TestMigrateInstancePrintSummaryWithErrors (line 292) | func TestMigrateInstancePrintSummaryWithErrors(t *testing.T) { function TestMigrateInstancePrintSummaryNoActions (line 307) | func TestMigrateInstancePrintSummaryNoActions(t *testing.T) { function TestPrintPlan (line 322) | func TestPrintPlan(t *testing.T) { function TestPrintPlanEmpty (line 362) | func TestPrintPlanEmpty(t *testing.T) { type mockOperation (line 366) | type mockOperation struct method GetSourceName (line 374) | func (m *mockOperation) GetSourceName() string { return "mock" } method GetSourceHome (line 375) | func (m *mockOperation) GetSourceHome() (string, error) { method GetSourceWorkspace (line 382) | func (m *mockOperation) GetSourceWorkspace() (string, error) { method GetSourceConfigFile (line 392) | func (m *mockOperation) GetSourceConfigFile() (string, error) { method ExecuteConfigMigration (line 398) | func (m *mockOperation) ExecuteConfigMigration(src, dst string) error ... method GetMigrateableFiles (line 399) | func (m *mockOperation) GetMigrateableFiles() []string { method GetMigrateableDirs (line 406) | func (m *mockOperation) GetMigrateableDirs() []string { FILE: pkg/migrate/sources/openclaw/openclaw_config.go type OpenClawConfig (line 13) | type OpenClawConfig struct method GetEnabled (line 288) | func (c *OpenClawConfig) GetEnabled() bool { method IsChannelEnabled (line 367) | func (c *OpenClawConfig) IsChannelEnabled(name string) bool { method GetDefaultModel (line 423) | func (c *OpenClawConfig) GetDefaultModel() (provider, model string) { method GetDefaultWorkspace (line 441) | func (c *OpenClawConfig) GetDefaultWorkspace() string { method GetAgents (line 448) | func (c *OpenClawConfig) GetAgents() []OpenClawAgentEntry { method HasSkills (line 455) | func (c *OpenClawConfig) HasSkills() bool { method HasMemory (line 459) | func (c *OpenClawConfig) HasMemory() bool { method HasCron (line 463) | func (c *OpenClawConfig) HasCron() bool { method HasHooks (line 467) | func (c *OpenClawConfig) HasHooks() bool { method HasSession (line 471) | func (c *OpenClawConfig) HasSession() bool { method HasAuthProfiles (line 475) | func (c *OpenClawConfig) HasAuthProfiles() bool { method ConvertToPicoClaw (line 479) | func (c *OpenClawConfig) ConvertToPicoClaw(sourceHome string) (*PicoCl... method convertChannels (line 773) | func (c *OpenClawConfig) convertChannels(warnings *[]string) ChannelsC... method convertAgents (line 927) | func (c *OpenClawConfig) convertAgents(warnings *[]string) []AgentConf... type OpenClawAuth (line 26) | type OpenClawAuth struct type OpenClawModels (line 31) | type OpenClawModels struct type ProviderConfig (line 35) | type ProviderConfig struct type OpenClawModelConfig (line 42) | type OpenClawModelConfig struct type Cost (line 53) | type Cost struct type OpenClawTools (line 60) | type OpenClawTools struct type OpenClawAgents (line 66) | type OpenClawAgents struct type OpenClawAgentDefaults (line 71) | type OpenClawAgentDefaults struct type OpenClawAgentModel (line 78) | type OpenClawAgentModel struct method GetPrimary (line 84) | func (m *OpenClawAgentModel) GetPrimary() string { method GetFallbacks (line 94) | func (m *OpenClawAgentModel) GetFallbacks() []string { type OpenClawAgentEntry (line 98) | type OpenClawAgentEntry struct type OpenClawAgentTools (line 108) | type OpenClawAgentTools struct type OpenClawChannels (line 115) | type OpenClawChannels struct type OpenClawTelegramConfig (line 134) | type OpenClawTelegramConfig struct type OpenClawDiscordConfig (line 143) | type OpenClawDiscordConfig struct type OpenClawSlackConfig (line 152) | type OpenClawSlackConfig struct type OpenClawWhatsAppConfig (line 161) | type OpenClawWhatsAppConfig struct type OpenClawSignalConfig (line 170) | type OpenClawSignalConfig struct type OpenClawMatrixConfig (line 180) | type OpenClawMatrixConfig struct type OpenClawGoogleChatConfig (line 190) | type OpenClawGoogleChatConfig struct type OpenClawTeamsConfig (line 198) | type OpenClawTeamsConfig struct type OpenClawIrcConfig (line 207) | type OpenClawIrcConfig struct type OpenClawMattermostConfig (line 219) | type OpenClawMattermostConfig struct type OpenClawFeishuConfig (line 227) | type OpenClawFeishuConfig struct type OpenClawIMessageConfig (line 238) | type OpenClawIMessageConfig struct type OpenClawBlueBubblesConfig (line 246) | type OpenClawBlueBubblesConfig struct type OpenClawQQConfig (line 254) | type OpenClawQQConfig struct type OpenClawDingTalkConfig (line 262) | type OpenClawDingTalkConfig struct type OpenClawMaixCamConfig (line 270) | type OpenClawMaixCamConfig struct type OpenClawSkills (line 278) | type OpenClawSkills struct type OpenClawProviderConfig (line 283) | type OpenClawProviderConfig struct function LoadOpenClawConfig (line 292) | func LoadOpenClawConfig(path string) (*OpenClawConfig, error) { function LoadOpenClawConfigFromDir (line 306) | func LoadOpenClawConfigFromDir(dir string) (*OpenClawConfig, error) { function GetProviderConfig (line 321) | func GetProviderConfig(models *OpenClawModels) map[string]OpenClawProvid... function GetProviderConfigFromDir (line 339) | func GetProviderConfigFromDir(dir string) map[string]ProviderConfig { function GetChannelAllowFrom (line 386) | func GetChannelAllowFrom(ch any) []string { type ModelConfig (line 561) | type ModelConfig struct type PicoClawConfig (line 569) | type PicoClawConfig struct method ToStandardConfig (line 975) | func (c *PicoClawConfig) ToStandardConfig() *config.Config { type AgentsConfig (line 578) | type AgentsConfig struct type AgentDefaults (line 583) | type AgentDefaults struct type AgentConfig (line 597) | type AgentConfig struct type AgentModelConfig (line 606) | type AgentModelConfig struct type AgentBinding (line 611) | type AgentBinding struct type BindingMatch (line 616) | type BindingMatch struct type PeerMatch (line 624) | type PeerMatch struct type ChannelsConfig (line 629) | type ChannelsConfig struct method ToStandardChannels (line 1017) | func (c ChannelsConfig) ToStandardChannels() config.ChannelsConfig { type WhatsAppConfig (line 642) | type WhatsAppConfig struct type TelegramConfig (line 648) | type TelegramConfig struct type FeishuConfig (line 656) | type FeishuConfig struct type DiscordConfig (line 665) | type DiscordConfig struct type MaixCamConfig (line 672) | type MaixCamConfig struct type QQConfig (line 679) | type QQConfig struct type DingTalkConfig (line 686) | type DingTalkConfig struct type SlackConfig (line 693) | type SlackConfig struct type MatrixConfig (line 700) | type MatrixConfig struct type LINEConfig (line 708) | type LINEConfig struct type GatewayConfig (line 718) | type GatewayConfig struct method ToStandardGateway (line 1079) | func (c GatewayConfig) ToStandardGateway() config.GatewayConfig { type ToolsConfig (line 723) | type ToolsConfig struct method ToStandardTools (line 1086) | func (c ToolsConfig) ToStandardTools() config.ToolsConfig { type WebToolsConfig (line 729) | type WebToolsConfig struct type BraveConfig (line 737) | type BraveConfig struct type TavilyConfig (line 744) | type TavilyConfig struct type DuckDuckGoConfig (line 752) | type DuckDuckGoConfig struct type PerplexityConfig (line 757) | type PerplexityConfig struct type CronConfig (line 764) | type CronConfig struct type ExecConfig (line 768) | type ExecConfig struct FILE: pkg/migrate/sources/openclaw/openclaw_config_test.go function TestLoadOpenClawConfig (line 11) | func TestLoadOpenClawConfig(t *testing.T) { function TestGetProviderConfig (line 108) | func TestGetProviderConfig(t *testing.T) { function TestConvertToPicoClaw (line 163) | func TestConvertToPicoClaw(t *testing.T) { function TestToStandardConfig_ExecAllowRemoteDefaultsTrue (line 293) | func TestToStandardConfig_ExecAllowRemoteDefaultsTrue(t *testing.T) { function TestConvertToPicoClawWithQQAndDingTalk (line 307) | func TestConvertToPicoClawWithQQAndDingTalk(t *testing.T) { function TestConvertToPicoClawWithMatrix (line 393) | func TestConvertToPicoClawWithMatrix(t *testing.T) { function TestConvertToPicoClawWithMatrixDisabled (line 448) | func TestConvertToPicoClawWithMatrixDisabled(t *testing.T) { function TestOpenClawAgentModel (line 483) | func TestOpenClawAgentModel(t *testing.T) { function TestChannelEnabled (line 509) | func TestChannelEnabled(t *testing.T) { function TestGetDefaultModel (line 541) | func TestGetDefaultModel(t *testing.T) { function TestGetDefaultModelWithNoDefaults (line 561) | func TestGetDefaultModelWithNoDefaults(t *testing.T) { function TestHasFunctions (line 573) | func TestHasFunctions(t *testing.T) { function TestLoadOpenClawConfigFromDir (line 611) | func TestLoadOpenClawConfigFromDir(t *testing.T) { function TestToStandardConfig (line 636) | func TestToStandardConfig(t *testing.T) { function TestLoadProviderConfigFromAgentsDir (line 723) | func TestLoadProviderConfigFromAgentsDir(t *testing.T) { function TestGetProviderConfigFromDirNotExist (line 809) | func TestGetProviderConfigFromDirNotExist(t *testing.T) { function strPtr (line 816) | func strPtr(s string) *string { function boolPtr (line 820) | func boolPtr(b bool) *bool { FILE: pkg/migrate/sources/openclaw/openclaw_handler.go constant OpenclawHomeEnvVar (line 16) | OpenclawHomeEnvVar = "OPENCLAW_HOME" type OpenclawHandler (line 38) | type OpenclawHandler struct method GetSourceName (line 69) | func (o *OpenclawHandler) GetSourceName() string { method GetSourceHome (line 73) | func (o *OpenclawHandler) GetSourceHome() (string, error) { method GetSourceWorkspace (line 77) | func (o *OpenclawHandler) GetSourceWorkspace() (string, error) { method GetSourceConfigFile (line 81) | func (o *OpenclawHandler) GetSourceConfigFile() (string, error) { method GetMigrateableFiles (line 85) | func (o *OpenclawHandler) GetMigrateableFiles() []string { method GetMigrateableDirs (line 89) | func (o *OpenclawHandler) GetMigrateableDirs() []string { method ExecuteConfigMigration (line 93) | func (o *OpenclawHandler) ExecuteConfigMigration(srcConfigPath, dstCon... function NewOpenclawHandler (line 51) | func NewOpenclawHandler(opts Options) (Operation, error) { function resolveSourceHome (line 116) | func resolveSourceHome(override string) (string, error) { function findSourceConfig (line 130) | func findSourceConfig(sourceHome string) (string, error) { function rewriteWorkspacePath (line 143) | func rewriteWorkspacePath(path string) string { function mapProvider (line 148) | func mapProvider(provider string) string { FILE: pkg/migrate/sources/openclaw/openclaw_handler_test.go function TestNewOpenclawHandler (line 12) | func TestNewOpenclawHandler(t *testing.T) { function TestNewOpenclawHandlerNoConfig (line 25) | func TestNewOpenclawHandlerNoConfig(t *testing.T) { function TestOpenclawHandlerGetSourceName (line 34) | func TestOpenclawHandlerGetSourceName(t *testing.T) { function TestOpenclawHandlerGetSourceHome (line 48) | func TestOpenclawHandlerGetSourceHome(t *testing.T) { function TestOpenclawHandlerGetSourceWorkspace (line 64) | func TestOpenclawHandlerGetSourceWorkspace(t *testing.T) { function TestOpenclawHandlerGetSourceConfigFile (line 80) | func TestOpenclawHandlerGetSourceConfigFile(t *testing.T) { function TestOpenclawHandlerGetSourceConfigFileWithConfigJson (line 96) | func TestOpenclawHandlerGetSourceConfigFileWithConfigJson(t *testing.T) { function TestOpenclawHandlerGetMigrateableFiles (line 112) | func TestOpenclawHandlerGetMigrateableFiles(t *testing.T) { function TestOpenclawHandlerGetMigrateableDirs (line 130) | func TestOpenclawHandlerGetMigrateableDirs(t *testing.T) { function TestResolveSourceHome (line 147) | func TestResolveSourceHome(t *testing.T) { function TestResolveSourceHomeWithEnvVar (line 153) | func TestResolveSourceHomeWithEnvVar(t *testing.T) { function TestResolveSourceHomeWithTilde (line 161) | func TestResolveSourceHomeWithTilde(t *testing.T) { function TestFindSourceConfig (line 170) | func TestFindSourceConfig(t *testing.T) { function TestFindSourceConfigWithConfigJson (line 181) | func TestFindSourceConfigWithConfigJson(t *testing.T) { function TestFindSourceConfigNotFound (line 192) | func TestFindSourceConfigNotFound(t *testing.T) { function TestMapProvider (line 200) | func TestMapProvider(t *testing.T) { function TestRewriteWorkspacePath (line 232) | func TestRewriteWorkspacePath(t *testing.T) { FILE: pkg/providers/anthropic/provider.go constant defaultBaseURL (line 27) | defaultBaseURL = "https://api.anthropic.com" constant anthropicBetaHeader (line 28) | anthropicBetaHeader = "oauth-2025-04-20" type Provider (line 31) | type Provider struct method SupportsThinking (line 38) | func (p *Provider) SupportsThinking() bool { return true } method Chat (line 73) | func (p *Provider) Chat( method chatStreaming (line 110) | func (p *Provider) chatStreaming( method GetDefaultModel (line 132) | func (p *Provider) GetDefaultModel() string { method BaseURL (line 136) | func (p *Provider) BaseURL() string { function NewProvider (line 40) | func NewProvider(token string) *Provider { function NewProviderWithBaseURL (line 44) | func NewProviderWithBaseURL(token, apiBase string) *Provider { function NewProviderWithClient (line 56) | func NewProviderWithClient(client *anthropic.Client) *Provider { function NewProviderWithTokenSource (line 63) | func NewProviderWithTokenSource(token string, tokenSource func() (string... function NewProviderWithTokenSourceAndBaseURL (line 67) | func NewProviderWithTokenSourceAndBaseURL(token string, tokenSource func... function buildParams (line 140) | func buildParams( function applyThinkingConfig (line 255) | func applyThinkingConfig(params *anthropic.MessageNewParams, level strin... function levelToBudget (line 297) | func levelToBudget(level string) int { function translateTools (line 312) | func translateTools(tools []ToolDefinition) []anthropic.ToolUnionParam { function parseResponse (line 338) | func parseResponse(resp *anthropic.Message) *LLMResponse { function normalizeBaseURL (line 389) | func normalizeBaseURL(apiBase string) string { FILE: pkg/providers/anthropic/provider_test.go function TestBuildParams_BasicMessage (line 14) | func TestBuildParams_BasicMessage(t *testing.T) { function TestBuildParams_SystemMessage (line 35) | func TestBuildParams_SystemMessage(t *testing.T) { function TestBuildParams_ToolCallMessage (line 55) | func TestBuildParams_ToolCallMessage(t *testing.T) { function TestBuildParams_WithTools (line 80) | func TestBuildParams_WithTools(t *testing.T) { function TestParseResponse_TextOnly (line 106) | func TestParseResponse_TextOnly(t *testing.T) { function TestParseResponse_StopReasons (line 126) | func TestParseResponse_StopReasons(t *testing.T) { function TestProvider_ChatRoundTrip (line 146) | func TestProvider_ChatRoundTrip(t *testing.T) { function TestProvider_GetDefaultModel (line 196) | func TestProvider_GetDefaultModel(t *testing.T) { function TestProvider_NewProviderWithBaseURL_NormalizesV1Suffix (line 203) | func TestProvider_NewProviderWithBaseURL_NormalizesV1Suffix(t *testing.T) { function TestProvider_ChatUsesTokenSource (line 210) | func TestProvider_ChatUsesTokenSource(t *testing.T) { function TestProvider_ChatStreamingRoundTrip (line 265) | func TestProvider_ChatStreamingRoundTrip(t *testing.T) { function createAnthropicTestClient (line 324) | func createAnthropicTestClient(baseURL, token string) *anthropic.Client { FILE: pkg/providers/anthropic/thinking_test.go function TestApplyThinkingConfig_Adaptive (line 10) | func TestApplyThinkingConfig_Adaptive(t *testing.T) { function TestApplyThinkingConfig_BudgetLevels (line 31) | func TestApplyThinkingConfig_BudgetLevels(t *testing.T) { function TestApplyThinkingConfig_BudgetClamp (line 69) | func TestApplyThinkingConfig_BudgetClamp(t *testing.T) { function TestApplyThinkingConfig_UnknownLevel (line 85) | func TestApplyThinkingConfig_UnknownLevel(t *testing.T) { function TestLevelToBudget (line 97) | func TestLevelToBudget(t *testing.T) { function TestBuildParams_ThinkingClearsTemperature (line 120) | func TestBuildParams_ThinkingClearsTemperature(t *testing.T) { function unmarshalBlocks (line 146) | func unmarshalBlocks(t *testing.T, jsonStr string) []anthropic.ContentBl... function TestParseResponse_ThinkingBlock (line 155) | func TestParseResponse_ThinkingBlock(t *testing.T) { function TestParseResponse_NoThinkingBlock (line 177) | func TestParseResponse_NoThinkingBlock(t *testing.T) { function TestBuildParams_NoThinkingKeepsTemperature (line 195) | func TestBuildParams_NoThinkingKeepsTemperature(t *testing.T) { FILE: pkg/providers/anthropic_messages/provider.go constant defaultAPIVersion (line 33) | defaultAPIVersion = "2023-06-01" constant defaultBaseURL (line 34) | defaultBaseURL = "https://api.anthropic.com/v1" constant defaultRequestTimeout (line 35) | defaultRequestTimeout = 120 * time.Second type Provider (line 40) | type Provider struct method Chat (line 69) | func (p *Provider) Chat( method GetDefaultModel (line 147) | func (p *Provider) GetDefaultModel() string { function NewProvider (line 47) | func NewProvider(apiKey, apiBase string) *Provider { function NewProviderWithTimeout (line 52) | func NewProviderWithTimeout(apiKey, apiBase string, timeoutSeconds int) ... function buildRequestBody (line 152) | func buildRequestBody( function buildTools (line 280) | func buildTools(tools []ToolDefinition) []any { function parseResponseBody (line 294) | func parseResponseBody(body []byte) (*LLMResponse, error) { function normalizeBaseURL (line 350) | func normalizeBaseURL(apiBase string) string { function asInt (line 376) | func asInt(v any) (int, bool) { function asFloat (line 389) | func asFloat(v any) (float64, bool) { type anthropicMessageResponse (line 404) | type anthropicMessageResponse struct type contentBlock (line 414) | type contentBlock struct type usageInfo (line 422) | type usageInfo struct FILE: pkg/providers/anthropic_messages/provider_test.go function TestBuildRequestBody (line 16) | func TestBuildRequestBody(t *testing.T) { function TestParseResponseBody (line 200) | func TestParseResponseBody(t *testing.T) { function TestNormalizeBaseURL (line 375) | func TestNormalizeBaseURL(t *testing.T) { function TestNewProvider (line 413) | func TestNewProvider(t *testing.T) { function TestGetDefaultModel (line 426) | func TestGetDefaultModel(t *testing.T) { function TestBuildRequestBodyEdgeCases (line 436) | func TestBuildRequestBodyEdgeCases(t *testing.T) { function TestParseResponseBodyEdgeCases (line 566) | func TestParseResponseBodyEdgeCases(t *testing.T) { function TestProviderChatErrors (line 638) | func TestProviderChatErrors(t *testing.T) { FILE: pkg/providers/antigravity_provider.go constant antigravityBaseURL (line 20) | antigravityBaseURL = "https://cloudcode-pa.googleapis.com" constant antigravityDefaultModel (line 21) | antigravityDefaultModel = "gemini-3-flash" constant antigravityUserAgent (line 22) | antigravityUserAgent = "antigravity" constant antigravityXGoogClient (line 23) | antigravityXGoogClient = "google-cloud-sdk vscode_cloudshelleditor/0.1" constant antigravityVersion (line 24) | antigravityVersion = "1.15.8" type AntigravityProvider (line 30) | type AntigravityProvider struct method Chat (line 48) | func (p *AntigravityProvider) Chat( method GetDefaultModel (line 151) | func (p *AntigravityProvider) GetDefaultModel() string { method buildRequest (line 206) | func (p *AntigravityProvider) buildRequest( method parseSSEResponse (line 407) | func (p *AntigravityProvider) parseSSEResponse(body string) (*LLMRespo... method parseAntigravityError (line 773) | func (p *AntigravityProvider) parseAntigravityError(statusCode int, bo... function NewAntigravityProvider (line 36) | func NewAntigravityProvider() *AntigravityProvider { type antigravityRequest (line 157) | type antigravityRequest struct type antigravityContent (line 164) | type antigravityContent struct type antigravityPart (line 169) | type antigravityPart struct type antigravityFunctionCall (line 177) | type antigravityFunctionCall struct type antigravityFunctionResponse (line 182) | type antigravityFunctionResponse struct type antigravityTool (line 187) | type antigravityTool struct type antigravityFuncDecl (line 191) | type antigravityFuncDecl struct type antigravitySystemPrompt (line 197) | type antigravitySystemPrompt struct type antigravityGenConfig (line 201) | type antigravityGenConfig struct function normalizeStoredToolCall (line 331) | func normalizeStoredToolCall(tc ToolCall) (string, map[string]any, strin... function resolveToolResponseName (line 357) | func resolveToolResponseName(toolCallID string, toolCallNames map[string... function inferToolNameFromCallID (line 369) | func inferToolNameFromCallID(toolCallID string) string { type antigravityJSONResponse (line 387) | type antigravityJSONResponse struct function extractPartThoughtSignature (line 485) | func extractPartThoughtSignature(thoughtSignature string, thoughtSignatu... function sanitizeSchemaForGemini (line 521) | func sanitizeSchemaForGemini(schema map[string]any) map[string]any { function createAntigravityTokenSource (line 562) | func createAntigravityTokenSource() func() (string, string, error) { function FetchAntigravityProjectID (line 618) | func FetchAntigravityProjectID(accessToken string) (string, error) { function FetchAntigravityModels (line 666) | func FetchAntigravityModels(accessToken, projectID string) ([]Antigravit... type AntigravityModelInfo (line 749) | type AntigravityModelInfo struct function truncateString (line 757) | func truncateString(s string, maxLen int) string { function randomString (line 764) | func randomString(n int) string { FILE: pkg/providers/antigravity_provider_test.go function TestBuildRequestUsesFunctionFieldsWhenToolCallNameMissing (line 5) | func TestBuildRequestUsesFunctionFieldsWhenToolCallNameMissing(t *testin... function TestResolveToolResponseNameInfersNameFromGeneratedCallID (line 51) | func TestResolveToolResponseNameInfersNameFromGeneratedCallID(t *testing... FILE: pkg/providers/azure/provider.go constant azureAPIVersion (line 25) | azureAPIVersion = "2024-10-21" constant defaultRequestTimeout (line 26) | defaultRequestTimeout = common.DefaultRequestTimeout type Provider (line 32) | type Provider struct method Chat (line 77) | func (p *Provider) Chat( method GetDefaultModel (line 148) | func (p *Provider) GetDefaultModel() string { type Option (line 39) | type Option function WithRequestTimeout (line 42) | func WithRequestTimeout(timeout time.Duration) Option { function NewProvider (line 51) | func NewProvider(apiKey, apiBase, proxy string, opts ...Option) *Provider { function NewProviderWithTimeout (line 68) | func NewProviderWithTimeout(apiKey, apiBase, proxy string, requestTimeou... FILE: pkg/providers/azure/provider_test.go function writeValidResponse (line 12) | func writeValidResponse(w http.ResponseWriter) { function TestProviderChat_AzureURLConstruction (line 25) | func TestProviderChat_AzureURLConstruction(t *testing.T) { function TestProviderChat_AzureAuthHeader (line 51) | func TestProviderChat_AzureAuthHeader(t *testing.T) { function TestProviderChat_AzureOmitsModelFromBody (line 76) | func TestProviderChat_AzureOmitsModelFromBody(t *testing.T) { function TestProviderChat_AzureUsesMaxCompletionTokens (line 96) | func TestProviderChat_AzureUsesMaxCompletionTokens(t *testing.T) { function TestProviderChat_AzureHTTPError (line 125) | func TestProviderChat_AzureHTTPError(t *testing.T) { function TestProviderChat_AzureParseToolCalls (line 138) | func TestProviderChat_AzureParseToolCalls(t *testing.T) { function TestProvider_AzureEmptyAPIBase (line 179) | func TestProvider_AzureEmptyAPIBase(t *testing.T) { function TestProvider_AzureRequestTimeoutDefault (line 187) | func TestProvider_AzureRequestTimeoutDefault(t *testing.T) { function TestProvider_AzureRequestTimeoutOverride (line 194) | func TestProvider_AzureRequestTimeoutOverride(t *testing.T) { function TestProvider_AzureNewProviderWithTimeout (line 201) | func TestProvider_AzureNewProviderWithTimeout(t *testing.T) { function TestProviderChat_AzureDeploymentNameEscaped (line 208) | func TestProviderChat_AzureDeploymentNameEscaped(t *testing.T) { FILE: pkg/providers/claude_cli_provider.go type ClaudeCliProvider (line 13) | type ClaudeCliProvider struct method Chat (line 27) | func (p *ClaudeCliProvider) Chat( method GetDefaultModel (line 71) | func (p *ClaudeCliProvider) GetDefaultModel() string { method messagesToPrompt (line 76) | func (p *ClaudeCliProvider) messagesToPrompt(messages []Message) string { method buildSystemPrompt (line 101) | func (p *ClaudeCliProvider) buildSystemPrompt(messages []Message, tool... method parseClaudeCliResponse (line 118) | func (p *ClaudeCliProvider) parseClaudeCliResponse(output string) (*LL... method extractToolCalls (line 155) | func (p *ClaudeCliProvider) extractToolCalls(text string) []ToolCall { method stripToolCallsJSON (line 160) | func (p *ClaudeCliProvider) stripToolCallsJSON(text string) string { function NewClaudeCliProvider (line 19) | func NewClaudeCliProvider(workspace string) *ClaudeCliProvider { function findMatchingBrace (line 165) | func findMatchingBrace(text string, pos int) int { type claudeCliJSONResponse (line 182) | type claudeCliJSONResponse struct type claudeCliUsageInfo (line 196) | type claudeCliUsageInfo struct FILE: pkg/providers/claude_cli_provider_integration_test.go function TestIntegration_RealClaudeCLI (line 15) | func TestIntegration_RealClaudeCLI(t *testing.T) { function TestIntegration_RealClaudeCLI_WithSystemPrompt (line 63) | func TestIntegration_RealClaudeCLI_WithSystemPrompt(t *testing.T) { function TestIntegration_RealClaudeCLI_ParsesRealJSON (line 88) | func TestIntegration_RealClaudeCLI_ParsesRealJSON(t *testing.T) { FILE: pkg/providers/claude_cli_provider_test.go function createMockCLI (line 24) | func createMockCLI(t *testing.T, stdout, stderr string, exitCode int) st... function createSlowMockCLI (line 61) | func createSlowMockCLI(t *testing.T, sleepSeconds int) string { function createArgCaptureCLI (line 77) | func createArgCaptureCLI(t *testing.T, argsFile string) string { function TestNewClaudeCliProvider (line 99) | func TestNewClaudeCliProvider(t *testing.T) { function TestNewClaudeCliProvider_EmptyWorkspace (line 112) | func TestNewClaudeCliProvider_EmptyWorkspace(t *testing.T) { function TestClaudeCliProvider_GetDefaultModel (line 121) | func TestClaudeCliProvider_GetDefaultModel(t *testing.T) { function TestChat_Success (line 130) | func TestChat_Success(t *testing.T) { function TestChat_IsErrorResponse (line 166) | func TestChat_IsErrorResponse(t *testing.T) { function TestChat_WithToolCallsInResponse (line 185) | func TestChat_WithToolCallsInResponse(t *testing.T) { function TestChat_StderrError (line 212) | func TestChat_StderrError(t *testing.T) { function TestChat_NonZeroExitNoStderr (line 230) | func TestChat_NonZeroExitNoStderr(t *testing.T) { function TestChat_CommandNotFound (line 248) | func TestChat_CommandNotFound(t *testing.T) { function TestChat_InvalidResponseJSON (line 261) | func TestChat_InvalidResponseJSON(t *testing.T) { function TestChat_ContextCancellation (line 279) | func TestChat_ContextCancellation(t *testing.T) { function TestChat_PassesSystemPromptFlag (line 303) | func TestChat_PassesSystemPromptFlag(t *testing.T) { function TestChat_PassesModelFlag (line 328) | func TestChat_PassesModelFlag(t *testing.T) { function TestChat_SkipsModelFlagForClaudeCode (line 352) | func TestChat_SkipsModelFlagForClaudeCode(t *testing.T) { function TestChat_SkipsModelFlagForEmptyModel (line 373) | func TestChat_SkipsModelFlagForEmptyModel(t *testing.T) { function TestChat_EmptyWorkspaceDoesNotSetDir (line 394) | func TestChat_EmptyWorkspaceDoesNotSetDir(t *testing.T) { function TestCreateProvider_ClaudeCli (line 414) | func TestCreateProvider_ClaudeCli(t *testing.T) { function TestCreateProvider_ClaudeCode (line 435) | func TestCreateProvider_ClaudeCode(t *testing.T) { function TestCreateProvider_ClaudeCodec (line 451) | func TestCreateProvider_ClaudeCodec(t *testing.T) { function TestCreateProvider_ClaudeCliDefaultWorkspace (line 467) | func TestCreateProvider_ClaudeCliDefaultWorkspace(t *testing.T) { function TestMessagesToPrompt_SingleUser (line 491) | func TestMessagesToPrompt_SingleUser(t *testing.T) { function TestMessagesToPrompt_Conversation (line 503) | func TestMessagesToPrompt_Conversation(t *testing.T) { function TestMessagesToPrompt_WithSystemMessage (line 517) | func TestMessagesToPrompt_WithSystemMessage(t *testing.T) { function TestMessagesToPrompt_WithToolResults (line 530) | func TestMessagesToPrompt_WithToolResults(t *testing.T) { function TestMessagesToPrompt_EmptyMessages (line 545) | func TestMessagesToPrompt_EmptyMessages(t *testing.T) { function TestMessagesToPrompt_OnlySystemMessages (line 553) | func TestMessagesToPrompt_OnlySystemMessages(t *testing.T) { function TestBuildSystemPrompt_NoSystemNoTools (line 567) | func TestBuildSystemPrompt_NoSystemNoTools(t *testing.T) { function TestBuildSystemPrompt_SystemOnly (line 578) | func TestBuildSystemPrompt_SystemOnly(t *testing.T) { function TestBuildSystemPrompt_MultipleSystemMessages (line 590) | func TestBuildSystemPrompt_MultipleSystemMessages(t *testing.T) { function TestBuildSystemPrompt_WithTools (line 611) | func TestBuildSystemPrompt_WithTools(t *testing.T) { function TestBuildSystemPrompt_ToolsOnlyNoSystem (line 643) | func TestBuildSystemPrompt_ToolsOnlyNoSystem(t *testing.T) { function TestBuildToolsPrompt_SkipsNonFunction (line 662) | func TestBuildToolsPrompt_SkipsNonFunction(t *testing.T) { function TestBuildToolsPrompt_NoDescription (line 676) | func TestBuildToolsPrompt_NoDescription(t *testing.T) { function TestBuildToolsPrompt_NoParameters (line 689) | func TestBuildToolsPrompt_NoParameters(t *testing.T) { function TestParseClaudeCliResponse_TextOnly (line 704) | func TestParseClaudeCliResponse_TextOnly(t *testing.T) { function TestParseClaudeCliResponse_EmptyResult (line 732) | func TestParseClaudeCliResponse_EmptyResult(t *testing.T) { function TestParseClaudeCliResponse_IsError (line 748) | func TestParseClaudeCliResponse_IsError(t *testing.T) { function TestParseClaudeCliResponse_NoUsage (line 761) | func TestParseClaudeCliResponse_NoUsage(t *testing.T) { function TestParseClaudeCliResponse_InvalidJSON (line 774) | func TestParseClaudeCliResponse_InvalidJSON(t *testing.T) { function TestParseClaudeCliResponse_WithToolCalls (line 785) | func TestParseClaudeCliResponse_WithToolCalls(t *testing.T) { function TestParseClaudeCliResponse_WhitespaceResult (line 820) | func TestParseClaudeCliResponse_WhitespaceResult(t *testing.T) { function TestExtractToolCalls_NoToolCalls (line 835) | func TestExtractToolCalls_NoToolCalls(t *testing.T) { function TestExtractToolCalls_WithToolCalls (line 843) | func TestExtractToolCalls_WithToolCalls(t *testing.T) { function TestExtractToolCalls_InvalidJSON (line 863) | func TestExtractToolCalls_InvalidJSON(t *testing.T) { function TestExtractToolCalls_MultipleToolCalls (line 871) | func TestExtractToolCalls_MultipleToolCalls(t *testing.T) { function TestExtractToolCalls_UnmatchedBrace (line 894) | func TestExtractToolCalls_UnmatchedBrace(t *testing.T) { function TestExtractToolCalls_ToolCallArgumentsParsing (line 902) | func TestExtractToolCalls_ToolCallArgumentsParsing(t *testing.T) { function TestStripToolCallsJSON (line 928) | func TestStripToolCallsJSON(t *testing.T) { function TestStripToolCallsJSON_NoToolCalls (line 946) | func TestStripToolCallsJSON_NoToolCalls(t *testing.T) { function TestStripToolCallsJSON_OnlyToolCalls (line 955) | func TestStripToolCallsJSON_OnlyToolCalls(t *testing.T) { function TestFindMatchingBrace (line 966) | func TestFindMatchingBrace(t *testing.T) { FILE: pkg/providers/claude_provider.go type ClaudeProvider (line 10) | type ClaudeProvider struct method Chat (line 44) | func (p *ClaudeProvider) Chat( method GetDefaultModel (line 54) | func (p *ClaudeProvider) GetDefaultModel() string { function NewClaudeProvider (line 14) | func NewClaudeProvider(token string) *ClaudeProvider { function NewClaudeProviderWithBaseURL (line 20) | func NewClaudeProviderWithBaseURL(token, apiBase string) *ClaudeProvider { function NewClaudeProviderWithTokenSource (line 26) | func NewClaudeProviderWithTokenSource(token string, tokenSource func() (... function NewClaudeProviderWithTokenSourceAndBaseURL (line 32) | func NewClaudeProviderWithTokenSourceAndBaseURL( function newClaudeProviderWithDelegate (line 40) | func newClaudeProviderWithDelegate(delegate *anthropicprovider.Provider)... function createClaudeTokenSource (line 58) | func createClaudeTokenSource() func() (string, error) { FILE: pkg/providers/claude_provider_test.go function TestClaudeProvider_ChatRoundTrip (line 15) | func TestClaudeProvider_ChatRoundTrip(t *testing.T) { function TestClaudeProvider_GetDefaultModel (line 67) | func TestClaudeProvider_GetDefaultModel(t *testing.T) { function createAnthropicTestClient (line 74) | func createAnthropicTestClient(baseURL, token string) *anthropic.Client { FILE: pkg/providers/codex_cli_credentials.go constant CodexHomeEnvVar (line 14) | CodexHomeEnvVar = "CODEX_HOME" type CodexCliAuth (line 17) | type CodexCliAuth struct function ReadCodexCliCredentials (line 27) | func ReadCodexCliCredentials() (accessToken, accountID string, expiresAt... function CreateCodexCliTokenSource (line 59) | func CreateCodexCliTokenSource() func() (string, string, error) { function resolveCodexAuthPath (line 76) | func resolveCodexAuthPath() (string, error) { FILE: pkg/providers/codex_cli_credentials_test.go function TestReadCodexCliCredentials_Valid (line 10) | func TestReadCodexCliCredentials_Valid(t *testing.T) { function readCodexCliCredentialsErr (line 48) | func readCodexCliCredentialsErr() error { function TestReadCodexCliCredentials_MissingFile (line 53) | func TestReadCodexCliCredentials_MissingFile(t *testing.T) { function TestReadCodexCliCredentials_EmptyToken (line 62) | func TestReadCodexCliCredentials_EmptyToken(t *testing.T) { function TestReadCodexCliCredentials_InvalidJSON (line 78) | func TestReadCodexCliCredentials_InvalidJSON(t *testing.T) { function TestReadCodexCliCredentials_NoAccountID (line 93) | func TestReadCodexCliCredentials_NoAccountID(t *testing.T) { function TestReadCodexCliCredentials_CodexHomeEnv (line 116) | func TestReadCodexCliCredentials_CodexHomeEnv(t *testing.T) { function TestCreateCodexCliTokenSource_Valid (line 139) | func TestCreateCodexCliTokenSource_Valid(t *testing.T) { function TestCreateCodexCliTokenSource_Expired (line 163) | func TestCreateCodexCliTokenSource_Expired(t *testing.T) { FILE: pkg/providers/codex_cli_provider.go type CodexCliProvider (line 14) | type CodexCliProvider struct method Chat (line 28) | func (p *CodexCliProvider) Chat( method GetDefaultModel (line 85) | func (p *CodexCliProvider) GetDefaultModel() string { method buildPrompt (line 91) | func (p *CodexCliProvider) buildPrompt(messages []Message, tools []Too... method parseJSONLEvents (line 162) | func (p *CodexCliProvider) parseJSONLEvents(output string) (*LLMRespon... function NewCodexCliProvider (line 20) | func NewCodexCliProvider(workspace string) *CodexCliProvider { type codexEvent (line 132) | type codexEvent struct type codexEventItem (line 141) | type codexEventItem struct type codexUsage (line 151) | type codexUsage struct type codexEventErr (line 157) | type codexEventErr struct FILE: pkg/providers/codex_cli_provider_integration_test.go function TestIntegration_RealCodexCLI (line 15) | func TestIntegration_RealCodexCLI(t *testing.T) { function TestIntegration_RealCodexCLI_WithSystemPrompt (line 52) | func TestIntegration_RealCodexCLI_WithSystemPrompt(t *testing.T) { function TestIntegration_RealCodexCLI_ParsesRealJSONL (line 77) | func TestIntegration_RealCodexCLI_ParsesRealJSONL(t *testing.T) { FILE: pkg/providers/codex_cli_provider_test.go function TestParseJSONLEvents_AgentMessage (line 16) | func TestParseJSONLEvents_AgentMessage(t *testing.T) { function TestParseJSONLEvents_ToolCallExtraction (line 50) | func TestParseJSONLEvents_ToolCallExtraction(t *testing.T) { function TestParseJSONLEvents_MultipleToolCalls (line 88) | func TestParseJSONLEvents_MultipleToolCalls(t *testing.T) { function TestParseJSONLEvents_MultipleMessages (line 116) | func TestParseJSONLEvents_MultipleMessages(t *testing.T) { function TestParseJSONLEvents_ErrorEvent (line 133) | func TestParseJSONLEvents_ErrorEvent(t *testing.T) { function TestParseJSONLEvents_TurnFailed (line 149) | func TestParseJSONLEvents_TurnFailed(t *testing.T) { function TestParseJSONLEvents_ErrorWithContent (line 163) | func TestParseJSONLEvents_ErrorWithContent(t *testing.T) { function TestParseJSONLEvents_EmptyOutput (line 180) | func TestParseJSONLEvents_EmptyOutput(t *testing.T) { function TestParseJSONLEvents_MalformedLines (line 191) | func TestParseJSONLEvents_MalformedLines(t *testing.T) { function TestParseJSONLEvents_CommandExecution (line 210) | func TestParseJSONLEvents_CommandExecution(t *testing.T) { function TestParseJSONLEvents_NoUsage (line 228) | func TestParseJSONLEvents_NoUsage(t *testing.T) { function TestBuildPrompt_SystemAsInstructions (line 245) | func TestBuildPrompt_SystemAsInstructions(t *testing.T) { function TestBuildPrompt_NoSystem (line 268) | func TestBuildPrompt_NoSystem(t *testing.T) { function TestBuildPrompt_WithTools (line 284) | func TestBuildPrompt_WithTools(t *testing.T) { function TestBuildPrompt_MultipleMessages (line 318) | func TestBuildPrompt_MultipleMessages(t *testing.T) { function TestBuildPrompt_ToolResults (line 339) | func TestBuildPrompt_ToolResults(t *testing.T) { function TestBuildPrompt_SystemAndTools (line 356) | func TestBuildPrompt_SystemAndTools(t *testing.T) { function TestCodexCliProvider_GetDefaultModel (line 392) | func TestCodexCliProvider_GetDefaultModel(t *testing.T) { function createMockCodexCLI (line 401) | func createMockCodexCLI(t *testing.T, events []string) string { function TestCodexCliProvider_MockCLI_Success (line 418) | func TestCodexCliProvider_MockCLI_Success(t *testing.T) { function TestCodexCliProvider_MockCLI_Error (line 450) | func TestCodexCliProvider_MockCLI_Error(t *testing.T) { function TestCodexCliProvider_MockCLI_WithModel (line 473) | func TestCodexCliProvider_MockCLI_WithModel(t *testing.T) { function TestCodexCliProvider_MockCLI_ContextCancel (line 519) | func TestCodexCliProvider_MockCLI_ContextCancel(t *testing.T) { function TestCodexCliProvider_EmptyCommand (line 544) | func TestCodexCliProvider_EmptyCommand(t *testing.T) { function TestCodexCliProvider_Integration (line 556) | func TestCodexCliProvider_Integration(t *testing.T) { FILE: pkg/providers/codex_provider.go constant codexDefaultModel (line 19) | codexDefaultModel = "gpt-5.3-codex" constant codexDefaultInstructions (line 20) | codexDefaultInstructions = "You are Codex, a coding assistant." type CodexProvider (line 23) | type CodexProvider struct method Chat (line 58) | func (p *CodexProvider) Chat( method GetDefaultModel (line 159) | func (p *CodexProvider) GetDefaultModel() string { method SupportsNativeSearch (line 163) | func (p *CodexProvider) SupportsNativeSearch() bool { constant defaultCodexInstructions (line 30) | defaultCodexInstructions = "You are Codex, a coding assistant." function NewCodexProvider (line 32) | func NewCodexProvider(token, accountID string) *CodexProvider { function NewCodexProviderWithTokenSource (line 50) | func NewCodexProviderWithTokenSource( function resolveCodexModel (line 167) | func resolveCodexModel(model string) (string, string) { function buildCodexParams (line 209) | func buildCodexParams( function resolveCodexToolCall (line 318) | func resolveCodexToolCall(tc ToolCall) (name string, arguments string, o... function translateToolsForCodex (line 342) | func translateToolsForCodex(tools []ToolDefinition, enableWebSearch bool... function parseCodexResponse (line 371) | func parseCodexResponse(resp *responses.Response) *LLMResponse { function createCodexTokenSource (line 421) | func createCodexTokenSource() func() (string, string, error) { FILE: pkg/providers/codex_provider_test.go function TestBuildCodexParams_BasicMessage (line 15) | func TestBuildCodexParams_BasicMessage(t *testing.T) { function TestBuildCodexParams_SystemAsInstructions (line 37) | func TestBuildCodexParams_SystemAsInstructions(t *testing.T) { function TestBuildCodexParams_ToolCallConversation (line 51) | func TestBuildCodexParams_ToolCallConversation(t *testing.T) { function TestBuildCodexParams_ToolCallFunctionFallback (line 71) | func TestBuildCodexParams_ToolCallFunctionFallback(t *testing.T) { function TestBuildCodexParams_WithTools (line 110) | func TestBuildCodexParams_WithTools(t *testing.T) { function TestBuildCodexParams_StoreIsFalse (line 138) | func TestBuildCodexParams_StoreIsFalse(t *testing.T) { function TestBuildCodexParams_DefaultWebSearchEnabled (line 145) | func TestBuildCodexParams_DefaultWebSearchEnabled(t *testing.T) { function TestBuildCodexParams_WebSearchFunctionReplacedWithBuiltin (line 162) | func TestBuildCodexParams_WebSearchFunctionReplacedWithBuiltin(t *testin... function TestParseCodexResponse_TextOutput (line 198) | func TestParseCodexResponse_TextOutput(t *testing.T) { function TestParseCodexResponse_FunctionCall (line 240) | func TestParseCodexResponse_FunctionCall(t *testing.T) { function TestCodexProvider_ChatRoundTrip (line 288) | func TestCodexProvider_ChatRoundTrip(t *testing.T) { function TestCodexProvider_ChatRoundTrip_WebSearchDisabled (line 375) | func TestCodexProvider_ChatRoundTrip_WebSearchDisabled(t *testing.T) { function TestCodexProvider_ChatRoundTrip_TokenSourceFallbackAccountID (line 433) | func TestCodexProvider_ChatRoundTrip_TokenSourceFallbackAccountID(t *tes... function TestCodexProvider_ChatRoundTrip_ModelFallbackFromUnsupported (line 517) | func TestCodexProvider_ChatRoundTrip_ModelFallbackFromUnsupported(t *tes... function TestCodexProvider_GetDefaultModel (line 582) | func TestCodexProvider_GetDefaultModel(t *testing.T) { function TestResolveCodexModel (line 589) | func TestResolveCodexModel(t *testing.T) { function createOpenAITestClient (line 624) | func createOpenAITestClient(baseURL, token, accountID string) *openai.Cl... function writeCompletedSSE (line 636) | func writeCompletedSSE(w http.ResponseWriter, response map[string]any) { FILE: pkg/providers/common/common.go constant DefaultRequestTimeout (line 39) | DefaultRequestTimeout = 120 * time.Second function NewHTTPClient (line 42) | func NewHTTPClient(proxy string) *http.Client { type openaiMessage (line 72) | type openaiMessage struct function SerializeMessages (line 84) | func SerializeMessages(messages []Message) []any { function ParseResponse (line 138) | func ParseResponse(body io.Reader) (*LLMResponse, error) { function DecodeToolCallArguments (line 223) | func DecodeToolCallArguments(raw json.RawMessage, name string) map[strin... function HandleErrorResponse (line 259) | func HandleErrorResponse(resp *http.Response, apiBase string) error { function ReadAndParseResponse (line 277) | func ReadAndParseResponse(resp *http.Response, apiBase string) (*LLMResp... function LooksLikeHTML (line 295) | func LooksLikeHTML(body []byte, contentType string) bool { function WrapHTMLResponseError (line 308) | func WrapHTMLResponseError(statusCode int, body []byte, contentType, api... function ResponsePreview (line 320) | func ResponsePreview(body []byte, maxLen int) string { function leadingTrimmedPrefix (line 331) | func leadingTrimmedPrefix(body []byte, maxLen int) []byte { function AsInt (line 351) | func AsInt(v any) (int, bool) { function AsFloat (line 367) | func AsFloat(v any) (float64, bool) { FILE: pkg/providers/common/common_test.go function TestNewHTTPClient_DefaultTimeout (line 16) | func TestNewHTTPClient_DefaultTimeout(t *testing.T) { function TestNewHTTPClient_WithProxy (line 23) | func TestNewHTTPClient_WithProxy(t *testing.T) { function TestNewHTTPClient_NoProxy (line 39) | func TestNewHTTPClient_NoProxy(t *testing.T) { function TestNewHTTPClient_InvalidProxy (line 46) | func TestNewHTTPClient_InvalidProxy(t *testing.T) { function TestSerializeMessages_PlainText (line 56) | func TestSerializeMessages_PlainText(t *testing.T) { function TestSerializeMessages_WithMedia (line 75) | func TestSerializeMessages_WithMedia(t *testing.T) { function TestSerializeMessages_MediaWithToolCallID (line 94) | func TestSerializeMessages_MediaWithToolCallID(t *testing.T) { function TestSerializeMessages_StripsSystemParts (line 109) | func TestSerializeMessages_StripsSystemParts(t *testing.T) { function TestParseResponse_BasicContent (line 129) | func TestParseResponse_BasicContent(t *testing.T) { function TestParseResponse_EmptyChoices (line 143) | func TestParseResponse_EmptyChoices(t *testing.T) { function TestParseResponse_WithToolCalls (line 157) | func TestParseResponse_WithToolCalls(t *testing.T) { function TestParseResponse_WithUsage (line 174) | func TestParseResponse_WithUsage(t *testing.T) { function TestParseResponse_WithReasoningContent (line 188) | func TestParseResponse_WithReasoningContent(t *testing.T) { function TestParseResponse_InvalidJSON (line 199) | func TestParseResponse_InvalidJSON(t *testing.T) { function TestDecodeToolCallArguments_ObjectJSON (line 208) | func TestDecodeToolCallArguments_ObjectJSON(t *testing.T) { function TestDecodeToolCallArguments_StringJSON (line 219) | func TestDecodeToolCallArguments_StringJSON(t *testing.T) { function TestDecodeToolCallArguments_EmptyInput (line 227) | func TestDecodeToolCallArguments_EmptyInput(t *testing.T) { function TestDecodeToolCallArguments_NullInput (line 234) | func TestDecodeToolCallArguments_NullInput(t *testing.T) { function TestDecodeToolCallArguments_InvalidJSON (line 241) | func TestDecodeToolCallArguments_InvalidJSON(t *testing.T) { function TestDecodeToolCallArguments_EmptyStringJSON (line 248) | func TestDecodeToolCallArguments_EmptyStringJSON(t *testing.T) { function TestHandleErrorResponse_JSONError (line 257) | func TestHandleErrorResponse_JSONError(t *testing.T) { function TestHandleErrorResponse_HTMLError (line 282) | func TestHandleErrorResponse_HTMLError(t *testing.T) { function TestReadAndParseResponse_ValidJSON (line 306) | func TestReadAndParseResponse_ValidJSON(t *testing.T) { function TestReadAndParseResponse_HTMLResponse (line 327) | func TestReadAndParseResponse_HTMLResponse(t *testing.T) { function TestLooksLikeHTML_ContentTypeHTML (line 350) | func TestLooksLikeHTML_ContentTypeHTML(t *testing.T) { function TestLooksLikeHTML_ContentTypeXHTML (line 356) | func TestLooksLikeHTML_ContentTypeXHTML(t *testing.T) { function TestLooksLikeHTML_BodyPrefix (line 362) | func TestLooksLikeHTML_BodyPrefix(t *testing.T) { function TestLooksLikeHTML_NotHTML (line 382) | func TestLooksLikeHTML_NotHTML(t *testing.T) { function TestResponsePreview_Short (line 390) | func TestResponsePreview_Short(t *testing.T) { function TestResponsePreview_Truncated (line 397) | func TestResponsePreview_Truncated(t *testing.T) { function TestResponsePreview_Empty (line 408) | func TestResponsePreview_Empty(t *testing.T) { function TestResponsePreview_Whitespace (line 415) | func TestResponsePreview_Whitespace(t *testing.T) { function TestAsInt (line 424) | func TestAsInt(t *testing.T) { function TestAsFloat (line 450) | func TestAsFloat(t *testing.T) { function TestWrapHTMLResponseError (line 476) | func TestWrapHTMLResponseError(t *testing.T) { function TestHandleErrorResponse_EmptyBody (line 495) | func TestHandleErrorResponse_EmptyBody(t *testing.T) { function TestReadAndParseResponse_InvalidJSON (line 519) | func TestReadAndParseResponse_InvalidJSON(t *testing.T) { function TestParseResponse_WithThoughtSignature (line 539) | func TestParseResponse_WithThoughtSignature(t *testing.T) { FILE: pkg/providers/cooldown.go constant defaultFailureWindow (line 10) | defaultFailureWindow = 24 * time.Hour type CooldownTracker (line 15) | type CooldownTracker struct method MarkFailure (line 42) | func (ct *CooldownTracker) MarkFailure(provider string, reason Failove... method MarkSuccess (line 69) | func (ct *CooldownTracker) MarkSuccess(provider string) { method IsAvailable (line 86) | func (ct *CooldownTracker) IsAvailable(provider string) bool { method CooldownRemaining (line 112) | func (ct *CooldownTracker) CooldownRemaining(provider string) time.Dur... method ErrorCount (line 142) | func (ct *CooldownTracker) ErrorCount(provider string) int { method FailureCount (line 154) | func (ct *CooldownTracker) FailureCount(provider string, reason Failov... method getOrCreate (line 165) | func (ct *CooldownTracker) getOrCreate(provider string) *cooldownEntry { type cooldownEntry (line 22) | type cooldownEntry struct function NewCooldownTracker (line 32) | func NewCooldownTracker() *CooldownTracker { function calculateStandardCooldown (line 183) | func calculateStandardCooldown(errorCount int) time.Duration { function calculateBillingCooldown (line 198) | func calculateBillingCooldown(billingErrorCount int) time.Duration { FILE: pkg/providers/cooldown_test.go function newTestTracker (line 9) | func newTestTracker(now time.Time) (*CooldownTracker, *time.Time) { function TestCooldown_InitiallyAvailable (line 16) | func TestCooldown_InitiallyAvailable(t *testing.T) { function TestCooldown_StandardEscalation (line 26) | func TestCooldown_StandardEscalation(t *testing.T) { function TestCooldown_StandardCap (line 54) | func TestCooldown_StandardCap(t *testing.T) { function TestCooldown_BillingEscalation (line 72) | func TestCooldown_BillingEscalation(t *testing.T) { function TestCooldown_BillingCap (line 95) | func TestCooldown_BillingCap(t *testing.T) { function TestCooldown_SuccessReset (line 112) | func TestCooldown_SuccessReset(t *testing.T) { function TestCooldown_FailureWindowReset (line 136) | func TestCooldown_FailureWindowReset(t *testing.T) { function TestCooldown_PerReasonTracking (line 159) | func TestCooldown_PerReasonTracking(t *testing.T) { function TestCooldown_BillingTakesPrecedence (line 181) | func TestCooldown_BillingTakesPrecedence(t *testing.T) { function TestCooldown_CooldownRemaining (line 202) | func TestCooldown_CooldownRemaining(t *testing.T) { function TestCooldown_SuccessOnUnknownProvider (line 220) | func TestCooldown_SuccessOnUnknownProvider(t *testing.T) { function TestCooldown_ConcurrentAccess (line 229) | func TestCooldown_ConcurrentAccess(t *testing.T) { function TestCooldown_MultipleProviders (line 253) | func TestCooldown_MultipleProviders(t *testing.T) { FILE: pkg/providers/error_classifier.go type errorPattern (line 17) | type errorPattern struct function substr (line 22) | func substr(s string) errorPattern { return errorPattern{substring: s} } function rxp (line 23) | func rxp(r string) errorPattern { return errorPattern{regex: regexp.M... function ClassifyError (line 106) | func ClassifyError(err error, provider, model string) *FailoverError { function classifyByStatus (line 165) | func classifyByStatus(status int) FailoverReason { function classifyByMessage (line 185) | func classifyByMessage(msg string) FailoverReason { function extractHTTPStatus (line 209) | func extractHTTPStatus(msg string) int { function IsImageDimensionError (line 219) | func IsImageDimensionError(msg string) bool { function IsImageSizeError (line 224) | func IsImageSizeError(msg string) bool { function matchesAny (line 229) | func matchesAny(msg string, patterns []errorPattern) bool { function parseDigits (line 245) | func parseDigits(s string) int { FILE: pkg/providers/error_classifier_test.go function TestClassifyError_Nil (line 10) | func TestClassifyError_Nil(t *testing.T) { function TestClassifyError_ContextCanceled (line 17) | func TestClassifyError_ContextCanceled(t *testing.T) { function TestClassifyError_ContextDeadlineExceeded (line 24) | func TestClassifyError_ContextDeadlineExceeded(t *testing.T) { function TestClassifyError_StatusCodes (line 34) | func TestClassifyError_StatusCodes(t *testing.T) { function TestClassifyError_RateLimitPatterns (line 68) | func TestClassifyError_RateLimitPatterns(t *testing.T) { function TestClassifyError_OverloadedPatterns (line 93) | func TestClassifyError_OverloadedPatterns(t *testing.T) { function TestClassifyError_BillingPatterns (line 114) | func TestClassifyError_BillingPatterns(t *testing.T) { function TestClassifyError_TimeoutPatterns (line 136) | func TestClassifyError_TimeoutPatterns(t *testing.T) { function TestClassifyError_AuthPatterns (line 157) | func TestClassifyError_AuthPatterns(t *testing.T) { function TestClassifyError_FormatPatterns (line 188) | func TestClassifyError_FormatPatterns(t *testing.T) { function TestClassifyError_ImageDimensionError (line 210) | func TestClassifyError_ImageDimensionError(t *testing.T) { function TestClassifyError_ImageSizeError (line 224) | func TestClassifyError_ImageSizeError(t *testing.T) { function TestClassifyError_UnknownError (line 235) | func TestClassifyError_UnknownError(t *testing.T) { function TestClassifyError_ProviderModelPropagation (line 243) | func TestClassifyError_ProviderModelPropagation(t *testing.T) { function TestFailoverError_IsRetriable (line 257) | func TestFailoverError_IsRetriable(t *testing.T) { function TestFailoverError_ErrorString (line 279) | func TestFailoverError_ErrorString(t *testing.T) { function TestFailoverError_Unwrap (line 293) | func TestFailoverError_Unwrap(t *testing.T) { function TestExtractHTTPStatus (line 301) | func TestExtractHTTPStatus(t *testing.T) { function TestIsImageDimensionError (line 322) | func TestIsImageDimensionError(t *testing.T) { function TestIsImageSizeError (line 331) | func TestIsImageSizeError(t *testing.T) { FILE: pkg/providers/factory.go constant defaultAnthropicAPIBase (line 11) | defaultAnthropicAPIBase = "https://api.anthropic.com/v1" type providerType (line 15) | type providerType constant providerTypeHTTPCompat (line 18) | providerTypeHTTPCompat providerType = iota constant providerTypeClaudeAuth (line 19) | providerTypeClaudeAuth constant providerTypeCodexAuth (line 20) | providerTypeCodexAuth constant providerTypeCodexCLIToken (line 21) | providerTypeCodexCLIToken constant providerTypeClaudeCLI (line 22) | providerTypeClaudeCLI constant providerTypeCodexCLI (line 23) | providerTypeCodexCLI constant providerTypeGitHubCopilot (line 24) | providerTypeGitHubCopilot type providerSelection (line 27) | type providerSelection struct function resolveProviderSelection (line 38) | func resolveProviderSelection(cfg *config.Config) (providerSelection, er... FILE: pkg/providers/factory_provider.go function createClaudeAuthProvider (line 18) | func createClaudeAuthProvider() (LLMProvider, error) { function createCodexAuthProvider (line 30) | func createCodexAuthProvider() (LLMProvider, error) { function ExtractProtocol (line 47) | func ExtractProtocol(model string) (protocol, modelID string) { function CreateProviderFromConfig (line 61) | func CreateProviderFromConfig(cfg *config.ModelConfig) (LLMProvider, str... function getDefaultAPIBase (line 230) | func getDefaultAPIBase(protocol string) string { FILE: pkg/providers/factory_provider_test.go function TestExtractProtocol (line 18) | func TestExtractProtocol(t *testing.T) { function TestCreateProviderFromConfig_OpenAI (line 88) | func TestCreateProviderFromConfig_OpenAI(t *testing.T) { function TestCreateProviderFromConfig_DefaultAPIBase (line 108) | func TestCreateProviderFromConfig_DefaultAPIBase(t *testing.T) { function TestGetDefaultAPIBase_LiteLLM (line 148) | func TestGetDefaultAPIBase_LiteLLM(t *testing.T) { function TestCreateProviderFromConfig_LiteLLM (line 154) | func TestCreateProviderFromConfig_LiteLLM(t *testing.T) { function TestCreateProviderFromConfig_LongCat (line 174) | func TestCreateProviderFromConfig_LongCat(t *testing.T) { function TestCreateProviderFromConfig_ModelScope (line 197) | func TestCreateProviderFromConfig_ModelScope(t *testing.T) { function TestGetDefaultAPIBase_ModelScope (line 220) | func TestGetDefaultAPIBase_ModelScope(t *testing.T) { function TestCreateProviderFromConfig_Novita (line 226) | func TestCreateProviderFromConfig_Novita(t *testing.T) { function TestGetDefaultAPIBase_Novita (line 248) | func TestGetDefaultAPIBase_Novita(t *testing.T) { function TestCreateProviderFromConfig_Anthropic (line 254) | func TestCreateProviderFromConfig_Anthropic(t *testing.T) { function TestCreateProviderFromConfig_Antigravity (line 273) | func TestCreateProviderFromConfig_Antigravity(t *testing.T) { function TestCreateProviderFromConfig_ClaudeCLI (line 291) | func TestCreateProviderFromConfig_ClaudeCLI(t *testing.T) { function TestCreateProviderFromConfig_CodexCLI (line 309) | func TestCreateProviderFromConfig_CodexCLI(t *testing.T) { function TestCreateProviderFromConfig_MissingAPIKey (line 327) | func TestCreateProviderFromConfig_MissingAPIKey(t *testing.T) { function TestCreateProviderFromConfig_UnknownProtocol (line 339) | func TestCreateProviderFromConfig_UnknownProtocol(t *testing.T) { function TestCreateProviderFromConfig_NilConfig (line 352) | func TestCreateProviderFromConfig_NilConfig(t *testing.T) { function TestCreateProviderFromConfig_EmptyModel (line 359) | func TestCreateProviderFromConfig_EmptyModel(t *testing.T) { function TestCreateProviderFromConfig_RequestTimeoutPropagation (line 371) | func TestCreateProviderFromConfig_RequestTimeoutPropagation(t *testing.T) { function TestCreateProviderFromConfig_Azure (line 410) | func TestCreateProviderFromConfig_Azure(t *testing.T) { function TestCreateProviderFromConfig_AzureOpenAIAlias (line 430) | func TestCreateProviderFromConfig_AzureOpenAIAlias(t *testing.T) { function TestCreateProviderFromConfig_AzureMissingAPIKey (line 450) | func TestCreateProviderFromConfig_AzureMissingAPIKey(t *testing.T) { function TestCreateProviderFromConfig_AzureMissingAPIBase (line 463) | func TestCreateProviderFromConfig_AzureMissingAPIBase(t *testing.T) { function TestCreateProviderFromConfig_QwenInternationalAlias (line 476) | func TestCreateProviderFromConfig_QwenInternationalAlias(t *testing.T) { function TestCreateProviderFromConfig_QwenUSAlias (line 511) | func TestCreateProviderFromConfig_QwenUSAlias(t *testing.T) { function TestCreateProviderFromConfig_CodingPlanAnthropic (line 545) | func TestCreateProviderFromConfig_CodingPlanAnthropic(t *testing.T) { function TestGetDefaultAPIBase_CodingPlanAnthropic (line 579) | func TestGetDefaultAPIBase_CodingPlanAnthropic(t *testing.T) { function TestGetDefaultAPIBase_QwenIntlAliases (line 589) | func TestGetDefaultAPIBase_QwenIntlAliases(t *testing.T) { function TestGetDefaultAPIBase_QwenUSAliases (line 598) | func TestGetDefaultAPIBase_QwenUSAliases(t *testing.T) { FILE: pkg/providers/factory_test.go function TestResolveProviderSelection (line 11) | func TestResolveProviderSelection(t *testing.T) { function TestCreateProviderReturnsHTTPProviderForOpenRouter (line 249) | func TestCreateProviderReturnsHTTPProviderForOpenRouter(t *testing.T) { function TestCreateProviderReturnsCodexCliProviderForCodexCode (line 271) | func TestCreateProviderReturnsCodexCliProviderForCodexCode(t *testing.T) { function TestCreateProviderReturnsClaudeCliProviderForClaudeCli (line 292) | func TestCreateProviderReturnsClaudeCliProviderForClaudeCli(t *testing.T) { function TestCreateProviderReturnsClaudeProviderForAnthropicOAuth (line 313) | func TestCreateProviderReturnsClaudeProviderForAnthropicOAuth(t *testing... function TestCreateProviderReturnsCodexProviderForOpenAIOAuth (line 347) | func TestCreateProviderReturnsCodexProviderForOpenAIOAuth(t *testing.T) { FILE: pkg/providers/fallback.go type FallbackChain (line 11) | type FallbackChain struct method Execute (line 101) | func (fc *FallbackChain) Execute( method ExecuteImage (line 214) | func (fc *FallbackChain) ExecuteImage( type FallbackCandidate (line 16) | type FallbackCandidate struct type FallbackResult (line 22) | type FallbackResult struct type FallbackAttempt (line 30) | type FallbackAttempt struct function NewFallbackChain (line 40) | func NewFallbackChain(cooldown *CooldownTracker) *FallbackChain { function ResolveCandidates (line 45) | func ResolveCandidates(cfg ModelConfig, defaultProvider string) []Fallba... function ResolveCandidatesWithLookup (line 49) | func ResolveCandidatesWithLookup( type FallbackExhaustedError (line 288) | type FallbackExhaustedError struct method Error (line 292) | func (e *FallbackExhaustedError) Error() string { FILE: pkg/providers/fallback_multikey_test.go function TestMultiKeyFailover (line 12) | func TestMultiKeyFailover(t *testing.T) { function TestMultiKeyFailoverAllFail (line 76) | func TestMultiKeyFailoverAllFail(t *testing.T) { function TestMultiKeyFailoverCooldown (line 121) | func TestMultiKeyFailoverCooldown(t *testing.T) { function TestMultiKeyFailoverWithFormatError (line 177) | func TestMultiKeyFailoverWithFormatError(t *testing.T) { function TestMultiKeyWithModelFallback (line 224) | func TestMultiKeyWithModelFallback(t *testing.T) { function TestMultiKeyFailoverMixedErrors (line 331) | func TestMultiKeyFailoverMixedErrors(t *testing.T) { FILE: pkg/providers/fallback_test.go function makeCandidate (line 10) | func makeCandidate(provider, model string) FallbackCandidate { function successRun (line 14) | func successRun(content string) func(ctx context.Context, provider, mode... function TestFallback_SingleCandidate_Success (line 20) | func TestFallback_SingleCandidate_Success(t *testing.T) { function TestFallback_SecondCandidateSuccess (line 37) | func TestFallback_SecondCandidateSuccess(t *testing.T) { function TestFallback_AllFail (line 70) | func TestFallback_AllFail(t *testing.T) { function TestFallback_ContextCanceled (line 97) | func TestFallback_ContextCanceled(t *testing.T) { function TestFallback_NonRetriableError (line 124) | func TestFallback_NonRetriableError(t *testing.T) { function TestFallback_CooldownSkip (line 155) | func TestFallback_CooldownSkip(t *testing.T) { function TestFallback_AllInCooldown (line 194) | func TestFallback_AllInCooldown(t *testing.T) { function TestFallback_NoCandidates (line 222) | func TestFallback_NoCandidates(t *testing.T) { function TestFallback_EmptyFallbacks (line 232) | func TestFallback_EmptyFallbacks(t *testing.T) { function TestFallback_UnclassifiedError (line 247) | func TestFallback_UnclassifiedError(t *testing.T) { function TestFallback_SuccessResetsCooldown (line 271) | func TestFallback_SuccessResetsCooldown(t *testing.T) { function TestImageFallback_Success (line 298) | func TestImageFallback_Success(t *testing.T) { function TestImageFallback_DimensionError (line 312) | func TestImageFallback_DimensionError(t *testing.T) { function TestImageFallback_SizeError (line 336) | func TestImageFallback_SizeError(t *testing.T) { function TestImageFallback_RetryOnOtherErrors (line 360) | func TestImageFallback_RetryOnOtherErrors(t *testing.T) { function TestImageFallback_NoCandidates (line 387) | func TestImageFallback_NoCandidates(t *testing.T) { function TestResolveCandidates_Simple (line 399) | func TestResolveCandidates_Simple(t *testing.T) { function TestResolveCandidates_Deduplication (line 421) | func TestResolveCandidates_Deduplication(t *testing.T) { function TestResolveCandidates_EmptyFallbacks (line 433) | func TestResolveCandidates_EmptyFallbacks(t *testing.T) { function TestResolveCandidates_EmptyPrimary (line 445) | func TestResolveCandidates_EmptyPrimary(t *testing.T) { function TestResolveCandidatesWithLookup_AliasResolvesToNestedModel (line 457) | func TestResolveCandidatesWithLookup_AliasResolvesToNestedModel(t *testi... function TestResolveCandidatesWithLookup_DeduplicateAfterLookup (line 482) | func TestResolveCandidatesWithLookup_DeduplicateAfterLookup(t *testing.T) { function TestResolveCandidatesWithLookup_AliasWithoutProtocolUsesDefaultProvider (line 501) | func TestResolveCandidatesWithLookup_AliasWithoutProtocolUsesDefaultProv... function TestFallbackExhaustedError_Message (line 526) | func TestFallbackExhaustedError_Message(t *testing.T) { FILE: pkg/providers/github_copilot_provider.go type GitHubCopilotProvider (line 12) | type GitHubCopilotProvider struct method Close (line 63) | func (p *GitHubCopilotProvider) Close() { method Chat (line 73) | func (p *GitHubCopilotProvider) Chat( method GetDefaultModel (line 125) | func (p *GitHubCopilotProvider) GetDefaultModel() string { function NewGitHubCopilotProvider (line 22) | func NewGitHubCopilotProvider(uri string, connectMode string, model stri... FILE: pkg/providers/http_provider.go type HTTPProvider (line 16) | type HTTPProvider struct method Chat (line 45) | func (p *HTTPProvider) Chat( method GetDefaultModel (line 55) | func (p *HTTPProvider) GetDefaultModel() string { method SupportsNativeSearch (line 59) | func (p *HTTPProvider) SupportsNativeSearch() bool { function NewHTTPProvider (line 20) | func NewHTTPProvider(apiKey, apiBase, proxy string) *HTTPProvider { function NewHTTPProviderWithMaxTokensField (line 26) | func NewHTTPProviderWithMaxTokensField(apiKey, apiBase, proxy, maxTokens... function NewHTTPProviderWithMaxTokensFieldAndRequestTimeout (line 30) | func NewHTTPProviderWithMaxTokensFieldAndRequestTimeout( FILE: pkg/providers/legacy_provider.go function CreateProvider (line 18) | func CreateProvider(cfg *config.Config) (LLMProvider, string, error) { FILE: pkg/providers/model_ref.go type ModelRef (line 6) | type ModelRef struct function ParseModelRef (line 14) | func ParseModelRef(raw string, defaultProvider string) *ModelRef { function NormalizeProvider (line 36) | func NormalizeProvider(provider string) string { function ModelKey (line 70) | func ModelKey(provider, model string) string { FILE: pkg/providers/model_ref_test.go function TestParseModelRef_WithSlash (line 5) | func TestParseModelRef_WithSlash(t *testing.T) { function TestParseModelRef_WithoutSlash (line 18) | func TestParseModelRef_WithoutSlash(t *testing.T) { function TestParseModelRef_Empty (line 31) | func TestParseModelRef_Empty(t *testing.T) { function TestParseModelRef_EmptyModelAfterSlash (line 38) | func TestParseModelRef_EmptyModelAfterSlash(t *testing.T) { function TestParseModelRef_WhitespaceHandling (line 45) | func TestParseModelRef_WhitespaceHandling(t *testing.T) { function TestNormalizeProvider (line 58) | func TestNormalizeProvider(t *testing.T) { function TestModelKey (line 95) | func TestModelKey(t *testing.T) { function TestParseModelRef_ProviderNormalization (line 115) | func TestParseModelRef_ProviderNormalization(t *testing.T) { function TestParseModelRef_DefaultProviderNormalization (line 125) | func TestParseModelRef_DefaultProviderNormalization(t *testing.T) { FILE: pkg/providers/openai_compat/provider.go type Provider (line 30) | type Provider struct method Chat (line 88) | func (p *Provider) Chat( method SupportsNativeSearch (line 215) | func (p *Provider) SupportsNativeSearch() bool { type Option (line 37) | type Option constant defaultRequestTimeout (line 39) | defaultRequestTimeout = common.DefaultRequestTimeout function WithMaxTokensField (line 41) | func WithMaxTokensField(maxTokensField string) Option { function WithRequestTimeout (line 47) | func WithRequestTimeout(timeout time.Duration) Option { function NewProvider (line 55) | func NewProvider(apiKey, apiBase, proxy string, opts ...Option) *Provider { function NewProviderWithMaxTokensField (line 71) | func NewProviderWithMaxTokensField(apiKey, apiBase, proxy, maxTokensFiel... function NewProviderWithMaxTokensFieldAndTimeout (line 75) | func NewProviderWithMaxTokensFieldAndTimeout( function normalizeModel (line 181) | func normalizeModel(model, apiBase string) string { function buildToolsList (line 201) | func buildToolsList(tools []ToolDefinition, nativeSearch bool) []any { function isNativeSearchHost (line 219) | func isNativeSearchHost(apiBase string) bool { function supportsPromptCacheKey (line 232) | func supportsPromptCacheKey(apiBase string) bool { FILE: pkg/providers/openai_compat/provider_test.go function TestProviderChat_UsesMaxCompletionTokensForGLM (line 19) | func TestProviderChat_UsesMaxCompletionTokensForGLM(t *testing.T) { function TestProviderChat_ParsesToolCalls (line 64) | func TestProviderChat_ParsesToolCalls(t *testing.T) { function TestProviderChat_ParsesToolCallsWithObjectArguments (line 112) | func TestProviderChat_ParsesToolCallsWithObjectArguments(t *testing.T) { function TestProviderChat_ParsesReasoningContent (line 161) | func TestProviderChat_ParsesReasoningContent(t *testing.T) { function TestProviderChat_PreservesReasoningContentInHistory (line 205) | func TestProviderChat_PreservesReasoningContentInHistory(t *testing.T) { function TestProviderChat_HTTPError (line 255) | func TestProviderChat_HTTPError(t *testing.T) { function TestProviderChat_JSONHTTPErrorDoesNotReportHTML (line 268) | func TestProviderChat_JSONHTTPErrorDoesNotReportHTML(t *testing.T) { function TestProviderChat_HTMLResponsesReturnHelpfulError (line 289) | func TestProviderChat_HTMLResponsesReturnHelpfulError(t *testing.T) { function TestProviderChat_SuccessResponseUsesStreamingDecoder (line 343) | func TestProviderChat_SuccessResponseUsesStreamingDecoder(t *testing.T) { function TestProviderChat_LargeHTMLResponsePreviewIsTruncated (line 370) | func TestProviderChat_LargeHTMLResponsePreviewIsTruncated(t *testing.T) { function TestProviderChat_StripsMoonshotPrefixAndNormalizesKimiTemperature (line 394) | func TestProviderChat_StripsMoonshotPrefixAndNormalizesKimiTemperature(t... function TestProviderChat_StripsGroqOllamaDeepseekVivgridNovitaPrefixes (line 435) | func TestProviderChat_StripsGroqOllamaDeepseekVivgridNovitaPrefixes(t *t... function TestProvider_ProxyConfigured (line 518) | func TestProvider_ProxyConfigured(t *testing.T) { function TestProviderChat_AcceptsNumericOptionTypes (line 537) | func TestProviderChat_AcceptsNumericOptionTypes(t *testing.T) { function TestNormalizeModel_UsesAPIBase (line 578) | func TestNormalizeModel_UsesAPIBase(t *testing.T) { function TestProvider_RequestTimeoutDefault (line 599) | func TestProvider_RequestTimeoutDefault(t *testing.T) { function TestProvider_RequestTimeoutOverride (line 606) | func TestProvider_RequestTimeoutOverride(t *testing.T) { type roundTripperFunc (line 613) | type roundTripperFunc method RoundTrip (line 615) | func (f roundTripperFunc) RoundTrip(r *http.Request) (*http.Response, ... type errAfterDataReadCloser (line 619) | type errAfterDataReadCloser struct method Read (line 625) | func (r *errAfterDataReadCloser) Read(p []byte) (int, error) { method Close (line 643) | func (r *errAfterDataReadCloser) Close() error { function TestProvider_FunctionalOptionMaxTokensField (line 647) | func TestProvider_FunctionalOptionMaxTokensField(t *testing.T) { function TestProvider_FunctionalOptionRequestTimeout (line 654) | func TestProvider_FunctionalOptionRequestTimeout(t *testing.T) { function TestProvider_FunctionalOptionRequestTimeoutNonPositive (line 661) | func TestProvider_FunctionalOptionRequestTimeoutNonPositive(t *testing.T) { function TestSerializeMessages_PlainText (line 668) | func TestSerializeMessages_PlainText(t *testing.T) { function TestSerializeMessages_WithMedia (line 691) | func TestSerializeMessages_WithMedia(t *testing.T) { function TestSerializeMessages_MediaWithToolCallID (line 724) | func TestSerializeMessages_MediaWithToolCallID(t *testing.T) { function chatWithCacheKey (line 745) | func chatWithCacheKey(t *testing.T, apiBase string) map[string]any { function TestProviderChat_PromptCacheKeySentToOpenAI (line 789) | func TestProviderChat_PromptCacheKeySentToOpenAI(t *testing.T) { function TestProviderChat_PromptCacheKeyOmittedForNonOpenAI (line 796) | func TestProviderChat_PromptCacheKeyOmittedForNonOpenAI(t *testing.T) { function TestSupportsPromptCacheKey (line 819) | func TestSupportsPromptCacheKey(t *testing.T) { function TestBuildToolsList_NativeSearchAddsWebSearchPreview (line 848) | func TestBuildToolsList_NativeSearchAddsWebSearchPreview(t *testing.T) { function TestBuildToolsList_NativeSearchFiltersClientWebSearch (line 865) | func TestBuildToolsList_NativeSearchFiltersClientWebSearch(t *testing.T) { function TestBuildToolsList_NoNativeSearchPassesThrough (line 881) | func TestBuildToolsList_NoNativeSearchPassesThrough(t *testing.T) { function TestIsNativeSearchHost (line 892) | func TestIsNativeSearchHost(t *testing.T) { function TestSupportsNativeSearch_OpenAI (line 912) | func TestSupportsNativeSearch_OpenAI(t *testing.T) { function TestSupportsNativeSearch_NonOpenAI (line 919) | func TestSupportsNativeSearch_NonOpenAI(t *testing.T) { function TestProviderChat_NativeSearchToolInjected (line 926) | func TestProviderChat_NativeSearchToolInjected(t *testing.T) { function TestProviderChat_NativeSearchNotInjectedWithoutOption (line 986) | func TestProviderChat_NativeSearchNotInjectedWithoutOption(t *testing.T) { function TestProviderChat_NativeSearchIgnoredOnNonOpenAI (line 1034) | func TestProviderChat_NativeSearchIgnoredOnNonOpenAI(t *testing.T) { function TestSerializeMessages_StripsSystemParts (line 1074) | func TestSerializeMessages_StripsSystemParts(t *testing.T) { FILE: pkg/providers/protocoltypes/types.go type ToolCall (line 3) | type ToolCall struct type ExtraContent (line 13) | type ExtraContent struct type GoogleExtra (line 17) | type GoogleExtra struct type FunctionCall (line 21) | type FunctionCall struct type LLMResponse (line 27) | type LLMResponse struct type ReasoningDetail (line 37) | type ReasoningDetail struct type UsageInfo (line 44) | type UsageInfo struct type CacheControl (line 52) | type CacheControl struct type ContentBlock (line 59) | type ContentBlock struct type Message (line 65) | type Message struct type ToolDefinition (line 75) | type ToolDefinition struct type ToolFunctionDefinition (line 80) | type ToolFunctionDefinition struct FILE: pkg/providers/tool_call_extract.go function extractToolCallsFromText (line 11) | func extractToolCallsFromText(text string) []ToolCall { function stripToolCallsFromText (line 60) | func stripToolCallsFromText(text string) string { FILE: pkg/providers/toolcall_utils.go function buildCLIToolsPrompt (line 15) | func buildCLIToolsPrompt(tools []ToolDefinition) string { function NormalizeToolCall (line 49) | func NormalizeToolCall(tc ToolCall) ToolCall { FILE: pkg/providers/types.go type LLMProvider (line 24) | type LLMProvider interface type StatefulProvider (line 35) | type StatefulProvider interface type ThinkingCapable (line 43) | type ThinkingCapable interface type NativeSearchCapable (line 52) | type NativeSearchCapable interface type FailoverReason (line 57) | type FailoverReason constant FailoverAuth (line 60) | FailoverAuth FailoverReason = "auth" constant FailoverRateLimit (line 61) | FailoverRateLimit FailoverReason = "rate_limit" constant FailoverBilling (line 62) | FailoverBilling FailoverReason = "billing" constant FailoverTimeout (line 63) | FailoverTimeout FailoverReason = "timeout" constant FailoverFormat (line 64) | FailoverFormat FailoverReason = "format" constant FailoverOverloaded (line 65) | FailoverOverloaded FailoverReason = "overloaded" constant FailoverUnknown (line 66) | FailoverUnknown FailoverReason = "unknown" type FailoverError (line 70) | type FailoverError struct method Error (line 78) | func (e *FailoverError) Error() string { method Unwrap (line 83) | func (e *FailoverError) Unwrap() error { method IsRetriable (line 89) | func (e *FailoverError) IsRetriable() bool { type ModelConfig (line 94) | type ModelConfig struct FILE: pkg/routing/agent_id.go constant DefaultAgentID (line 9) | DefaultAgentID = "main" constant DefaultMainKey (line 10) | DefaultMainKey = "main" constant DefaultAccountID (line 11) | DefaultAccountID = "default" constant MaxAgentIDLength (line 12) | MaxAgentIDLength = 64 function NormalizeAgentID (line 25) | func NormalizeAgentID(id string) string { function NormalizeAccountID (line 47) | func NormalizeAccountID(id string) string { FILE: pkg/routing/agent_id_test.go function TestNormalizeAgentID_Empty (line 8) | func TestNormalizeAgentID_Empty(t *testing.T) { function TestNormalizeAgentID_Whitespace (line 14) | func TestNormalizeAgentID_Whitespace(t *testing.T) { function TestNormalizeAgentID_Valid (line 20) | func TestNormalizeAgentID_Valid(t *testing.T) { function TestNormalizeAgentID_InvalidChars (line 39) | func TestNormalizeAgentID_InvalidChars(t *testing.T) { function TestNormalizeAgentID_AllInvalid (line 56) | func TestNormalizeAgentID_AllInvalid(t *testing.T) { function TestNormalizeAgentID_TruncatesAt64 (line 62) | func TestNormalizeAgentID_TruncatesAt64(t *testing.T) { function TestNormalizeAccountID_Empty (line 73) | func TestNormalizeAccountID_Empty(t *testing.T) { function TestNormalizeAccountID_Valid (line 79) | func TestNormalizeAccountID_Valid(t *testing.T) { function TestNormalizeAccountID_InvalidChars (line 85) | func TestNormalizeAccountID_InvalidChars(t *testing.T) { FILE: pkg/routing/classifier.go type Classifier (line 10) | type Classifier interface type RuleClassifier (line 36) | type RuleClassifier struct method Score (line 40) | func (c *RuleClassifier) Score(f Features) float64 { FILE: pkg/routing/features.go constant lookbackWindow (line 12) | lookbackWindow = 6 type Features (line 17) | type Features struct function ExtractFeatures (line 43) | func ExtractFeatures(msg string, history []providers.Message) Features { function estimateTokens (line 58) | func estimateTokens(msg string) int { function countCodeBlocks (line 76) | func countCodeBlocks(msg string) int { function countRecentToolCalls (line 84) | func countRecentToolCalls(history []providers.Message) int { function hasAttachments (line 104) | func hasAttachments(msg string) bool { FILE: pkg/routing/route.go type RouteInput (line 10) | type RouteInput struct type ResolvedRoute (line 20) | type ResolvedRoute struct type RouteResolver (line 30) | type RouteResolver struct method ResolveRoute (line 42) | func (r *RouteResolver) ResolveRoute(input RouteInput) ResolvedRoute { method filterBindings (line 121) | func (r *RouteResolver) filterBindings(channel, accountID string) []co... method findPeerMatch (line 147) | func (r *RouteResolver) findPeerMatch(bindings []config.AgentBinding, ... method findGuildMatch (line 165) | func (r *RouteResolver) findGuildMatch(bindings []config.AgentBinding,... method findTeamMatch (line 176) | func (r *RouteResolver) findTeamMatch(bindings []config.AgentBinding, ... method findAccountMatch (line 187) | func (r *RouteResolver) findAccountMatch(bindings []config.AgentBindin... method findChannelWildcardMatch (line 202) | func (r *RouteResolver) findChannelWildcardMatch(bindings []config.Age... method pickAgentID (line 217) | func (r *RouteResolver) pickAgentID(agentID string) string { method resolveDefaultAgentID (line 235) | func (r *RouteResolver) resolveDefaultAgentID() string { function NewRouteResolver (line 35) | func NewRouteResolver(cfg *config.Config) *RouteResolver { function matchesAccountID (line 136) | func matchesAccountID(matchAccountID, actual string) bool { FILE: pkg/routing/route_test.go function testConfig (line 9) | func testConfig(agents []config.AgentConfig, bindings []config.AgentBind... function TestResolveRoute_DefaultAgent_NoBindings (line 25) | func TestResolveRoute_DefaultAgent_NoBindings(t *testing.T) { function TestResolveRoute_PeerBinding (line 42) | func TestResolveRoute_PeerBinding(t *testing.T) { function TestResolveRoute_GuildBinding (line 73) | func TestResolveRoute_GuildBinding(t *testing.T) { function TestResolveRoute_TeamBinding (line 105) | func TestResolveRoute_TeamBinding(t *testing.T) { function TestResolveRoute_AccountBinding (line 137) | func TestResolveRoute_AccountBinding(t *testing.T) { function TestResolveRoute_ChannelWildcard (line 168) | func TestResolveRoute_ChannelWildcard(t *testing.T) { function TestResolveRoute_PriorityOrder_PeerBeatsGuild (line 198) | func TestResolveRoute_PriorityOrder_PeerBeatsGuild(t *testing.T) { function TestResolveRoute_InvalidAgentFallsToDefault (line 239) | func TestResolveRoute_InvalidAgentFallsToDefault(t *testing.T) { function TestResolveRoute_DefaultAgentSelection (line 264) | func TestResolveRoute_DefaultAgentSelection(t *testing.T) { function TestResolveRoute_NoDefaultUsesFirst (line 282) | func TestResolveRoute_NoDefaultUsesFirst(t *testing.T) { FILE: pkg/routing/router.go constant defaultThreshold (line 10) | defaultThreshold = 0.35 type RouterConfig (line 15) | type RouterConfig struct type Router (line 27) | type Router struct method SelectModel (line 61) | func (r *Router) SelectModel( method LightModel (line 75) | func (r *Router) LightModel() string { method Threshold (line 80) | func (r *Router) Threshold() float64 { function New (line 34) | func New(cfg RouterConfig) *Router { function newWithClassifier (line 46) | func newWithClassifier(cfg RouterConfig, c Classifier) *Router { FILE: pkg/routing/router_test.go function TestExtractFeatures_EmptyMessage (line 12) | func TestExtractFeatures_EmptyMessage(t *testing.T) { function TestExtractFeatures_TokenEstimate (line 31) | func TestExtractFeatures_TokenEstimate(t *testing.T) { function TestExtractFeatures_TokenEstimate_CJK (line 40) | func TestExtractFeatures_TokenEstimate_CJK(t *testing.T) { function TestExtractFeatures_TokenEstimate_Mixed (line 54) | func TestExtractFeatures_TokenEstimate_Mixed(t *testing.T) { function TestExtractFeatures_CodeBlocks (line 63) | func TestExtractFeatures_CodeBlocks(t *testing.T) { function TestExtractFeatures_RecentToolCalls (line 81) | func TestExtractFeatures_RecentToolCalls(t *testing.T) { function TestExtractFeatures_ConversationDepth (line 100) | func TestExtractFeatures_ConversationDepth(t *testing.T) { function TestExtractFeatures_HasAttachments_DataURI (line 108) | func TestExtractFeatures_HasAttachments_DataURI(t *testing.T) { function TestExtractFeatures_HasAttachments_Extension (line 126) | func TestExtractFeatures_HasAttachments_Extension(t *testing.T) { function TestRuleClassifier_ZeroFeatures (line 148) | func TestRuleClassifier_ZeroFeatures(t *testing.T) { function TestRuleClassifier_AttachmentsHardGate (line 156) | func TestRuleClassifier_AttachmentsHardGate(t *testing.T) { function TestRuleClassifier_CodeBlockAlone (line 164) | func TestRuleClassifier_CodeBlockAlone(t *testing.T) { function TestRuleClassifier_LongMessage (line 173) | func TestRuleClassifier_LongMessage(t *testing.T) { function TestRuleClassifier_MediumMessage (line 182) | func TestRuleClassifier_MediumMessage(t *testing.T) { function TestRuleClassifier_ShortMessage (line 191) | func TestRuleClassifier_ShortMessage(t *testing.T) { function TestRuleClassifier_ToolCallDensity (line 200) | func TestRuleClassifier_ToolCallDensity(t *testing.T) { function TestRuleClassifier_DeepConversation (line 218) | func TestRuleClassifier_DeepConversation(t *testing.T) { function TestRuleClassifier_ScoreDoesNotExceedOne (line 227) | func TestRuleClassifier_ScoreDoesNotExceedOne(t *testing.T) { function TestRouter_DefaultThreshold (line 244) | func TestRouter_DefaultThreshold(t *testing.T) { function TestRouter_NegativeThresholdFallsBackToDefault (line 251) | func TestRouter_NegativeThresholdFallsBackToDefault(t *testing.T) { function TestRouter_SelectModel_SimpleMessageUsesLight (line 258) | func TestRouter_SelectModel_SimpleMessageUsesLight(t *testing.T) { function TestRouter_SelectModel_CodeBlockUsesPrimary (line 270) | func TestRouter_SelectModel_CodeBlockUsesPrimary(t *testing.T) { function TestRouter_SelectModel_AttachmentUsesPrimary (line 282) | func TestRouter_SelectModel_AttachmentUsesPrimary(t *testing.T) { function TestRouter_SelectModel_LongMessageUsesPrimary (line 294) | func TestRouter_SelectModel_LongMessageUsesPrimary(t *testing.T) { function TestRouter_SelectModel_DeepToolChainUsesLight (line 307) | func TestRouter_SelectModel_DeepToolChainUsesLight(t *testing.T) { function TestRouter_SelectModel_ToolChainPlusMediumUsesHeavy (line 322) | func TestRouter_SelectModel_ToolChainPlusMediumUsesHeavy(t *testing.T) { function TestRouter_SelectModel_CustomThreshold (line 338) | func TestRouter_SelectModel_CustomThreshold(t *testing.T) { function TestRouter_SelectModel_HighThreshold (line 348) | func TestRouter_SelectModel_HighThreshold(t *testing.T) { function TestRouter_LightModel (line 358) | func TestRouter_LightModel(t *testing.T) { type fixedScoreClassifier (line 367) | type fixedScoreClassifier struct method Score (line 369) | func (f *fixedScoreClassifier) Score(_ Features) float64 { return f.sc... function TestRouter_CustomClassifier_LowScore_SelectsLight (line 371) | func TestRouter_CustomClassifier_LowScore_SelectsLight(t *testing.T) { function TestRouter_CustomClassifier_HighScore_SelectsPrimary (line 382) | func TestRouter_CustomClassifier_HighScore_SelectsPrimary(t *testing.T) { function TestRouter_CustomClassifier_ExactThreshold_SelectsPrimary (line 393) | func TestRouter_CustomClassifier_ExactThreshold_SelectsPrimary(t *testin... function TestRouter_SelectModel_ReturnsScore (line 405) | func TestRouter_SelectModel_ReturnsScore(t *testing.T) { FILE: pkg/routing/session_key.go type DMScope (line 9) | type DMScope constant DMScopeMain (line 12) | DMScopeMain DMScope = "main" constant DMScopePerPeer (line 13) | DMScopePerPeer DMScope = "per-peer" constant DMScopePerChannelPeer (line 14) | DMScopePerChannelPeer DMScope = "per-channel-peer" constant DMScopePerAccountChannelPeer (line 15) | DMScopePerAccountChannelPeer DMScope = "per-account-channel-peer" type RoutePeer (line 19) | type RoutePeer struct type SessionKeyParams (line 25) | type SessionKeyParams struct type ParsedSessionKey (line 35) | type ParsedSessionKey struct function BuildAgentMainSessionKey (line 41) | func BuildAgentMainSessionKey(agentID string) string { function BuildAgentPeerSessionKey (line 46) | func BuildAgentPeerSessionKey(params SessionKeyParams) string { function ParseAgentSessionKey (line 103) | func ParseAgentSessionKey(sessionKey string) *ParsedSessionKey { function IsSubagentSessionKey (line 124) | func IsSubagentSessionKey(sessionKey string) bool { function normalizeChannel (line 139) | func normalizeChannel(channel string) string { function resolveLinkedPeerID (line 147) | func resolveLinkedPeerID(identityLinks map[string][]string, channel, pee... FILE: pkg/routing/session_key_test.go function TestBuildAgentMainSessionKey (line 5) | func TestBuildAgentMainSessionKey(t *testing.T) { function TestBuildAgentMainSessionKey_Normalizes (line 13) | func TestBuildAgentMainSessionKey_Normalizes(t *testing.T) { function TestBuildAgentPeerSessionKey_DMScopeMain (line 21) | func TestBuildAgentPeerSessionKey_DMScopeMain(t *testing.T) { function TestBuildAgentPeerSessionKey_DMScopePerPeer (line 34) | func TestBuildAgentPeerSessionKey_DMScopePerPeer(t *testing.T) { function TestBuildAgentPeerSessionKey_DMScopePerChannelPeer (line 47) | func TestBuildAgentPeerSessionKey_DMScopePerChannelPeer(t *testing.T) { function TestBuildAgentPeerSessionKey_DMScopePerAccountChannelPeer (line 60) | func TestBuildAgentPeerSessionKey_DMScopePerAccountChannelPeer(t *testin... function TestBuildAgentPeerSessionKey_GroupPeer (line 74) | func TestBuildAgentPeerSessionKey_GroupPeer(t *testing.T) { function TestBuildAgentPeerSessionKey_NilPeer (line 87) | func TestBuildAgentPeerSessionKey_NilPeer(t *testing.T) { function TestBuildAgentPeerSessionKey_IdentityLink (line 101) | func TestBuildAgentPeerSessionKey_IdentityLink(t *testing.T) { function TestResolveLinkedPeerID_CanonicalPeerID (line 118) | func TestResolveLinkedPeerID_CanonicalPeerID(t *testing.T) { function TestResolveLinkedPeerID_CanonicalInLinks (line 130) | func TestResolveLinkedPeerID_CanonicalInLinks(t *testing.T) { function TestResolveLinkedPeerID_BarePeerIDMatchesCanonicalLink (line 141) | func TestResolveLinkedPeerID_BarePeerIDMatchesCanonicalLink(t *testing.T) { function TestResolveLinkedPeerID_NoMatch (line 153) | func TestResolveLinkedPeerID_NoMatch(t *testing.T) { function TestParseAgentSessionKey_Valid (line 163) | func TestParseAgentSessionKey_Valid(t *testing.T) { function TestParseAgentSessionKey_Invalid (line 176) | func TestParseAgentSessionKey_Invalid(t *testing.T) { function TestIsSubagentSessionKey (line 191) | func TestIsSubagentSessionKey(t *testing.T) { FILE: pkg/session/jsonl_backend.go type JSONLBackend (line 14) | type JSONLBackend struct method AddMessage (line 23) | func (b *JSONLBackend) AddMessage(sessionKey, role, content string) { method AddFullMessage (line 29) | func (b *JSONLBackend) AddFullMessage(sessionKey string, msg providers... method GetHistory (line 35) | func (b *JSONLBackend) GetHistory(key string) []providers.Message { method GetSummary (line 44) | func (b *JSONLBackend) GetSummary(key string) string { method SetSummary (line 53) | func (b *JSONLBackend) SetSummary(key, summary string) { method SetHistory (line 59) | func (b *JSONLBackend) SetHistory(key string, history []providers.Mess... method TruncateHistory (line 65) | func (b *JSONLBackend) TruncateHistory(key string, keepLast int) { method Save (line 74) | func (b *JSONLBackend) Save(key string) error { method Close (line 79) | func (b *JSONLBackend) Close() error { function NewJSONLBackend (line 19) | func NewJSONLBackend(store memory.Store) *JSONLBackend { FILE: pkg/session/jsonl_backend_test.go function newBackend (line 18) | func newBackend(t *testing.T) *session.JSONLBackend { function TestJSONLBackend_AddAndGetHistory (line 28) | func TestJSONLBackend_AddAndGetHistory(t *testing.T) { function TestJSONLBackend_AddFullMessage (line 46) | func TestJSONLBackend_AddFullMessage(t *testing.T) { function TestJSONLBackend_Summary (line 67) | func TestJSONLBackend_Summary(t *testing.T) { function TestJSONLBackend_TruncateAndSave (line 80) | func TestJSONLBackend_TruncateAndSave(t *testing.T) { function TestJSONLBackend_SetHistory (line 108) | func TestJSONLBackend_SetHistory(t *testing.T) { function TestJSONLBackend_EmptySession (line 126) | func TestJSONLBackend_EmptySession(t *testing.T) { function TestJSONLBackend_SessionIsolation (line 138) | func TestJSONLBackend_SessionIsolation(t *testing.T) { function TestJSONLBackend_SummarizeFlow (line 154) | func TestJSONLBackend_SummarizeFlow(t *testing.T) { FILE: pkg/session/manager.go type Session (line 14) | type Session struct type SessionManager (line 22) | type SessionManager struct method GetOrCreate (line 42) | func (sm *SessionManager) GetOrCreate(key string) *Session { method AddMessage (line 62) | func (sm *SessionManager) AddMessage(sessionKey, role, content string) { method AddFullMessage (line 71) | func (sm *SessionManager) AddFullMessage(sessionKey string, msg provid... method GetHistory (line 89) | func (sm *SessionManager) GetHistory(key string) []providers.Message { method GetSummary (line 103) | func (sm *SessionManager) GetSummary(key string) string { method SetSummary (line 114) | func (sm *SessionManager) SetSummary(key string, summary string) { method TruncateHistory (line 125) | func (sm *SessionManager) TruncateHistory(key string, keepLast int) { method Save (line 160) | func (sm *SessionManager) Save(key string) error { method loadSessions (line 238) | func (sm *SessionManager) loadSessions() error { method Close (line 272) | func (sm *SessionManager) Close() error { method SetHistory (line 277) | func (sm *SessionManager) SetHistory(key string, history []providers.M... function NewSessionManager (line 28) | func NewSessionManager(storage string) *SessionManager { function sanitizeFilename (line 153) | func sanitizeFilename(key string) string { FILE: pkg/session/manager_test.go function TestSanitizeFilename (line 9) | func TestSanitizeFilename(t *testing.T) { function TestSave_WithColonInKey (line 33) | func TestSave_WithColonInKey(t *testing.T) { function TestSave_RejectsPathTraversal (line 64) | func TestSave_RejectsPathTraversal(t *testing.T) { FILE: pkg/session/session_store.go type SessionStore (line 13) | type SessionStore interface FILE: pkg/skills/clawhub_registry.go constant defaultClawHubTimeout (line 17) | defaultClawHubTimeout = 30 * time.Second constant defaultMaxZipSize (line 18) | defaultMaxZipSize = 50 * 1024 * 1024 constant defaultMaxResponseSize (line 19) | defaultMaxResponseSize = 2 * 1024 * 1024 type ClawHubRegistry (line 23) | type ClawHubRegistry struct method Name (line 87) | func (c *ClawHubRegistry) Name() string { method Search (line 105) | func (c *ClawHubRegistry) Search(ctx context.Context, query string, li... method GetSkillMeta (line 177) | func (c *ClawHubRegistry) GetSkillMeta(ctx context.Context, slug strin... method DownloadAndInstall (line 217) | func (c *ClawHubRegistry) DownloadAndInstall( method doGet (line 278) | func (c *ClawHubRegistry) doGet(ctx context.Context, urlStr string) ([... method newGetRequest (line 303) | func (c *ClawHubRegistry) newGetRequest(ctx context.Context, urlStr, a... method downloadToTempFileWithRetry (line 315) | func (c *ClawHubRegistry) downloadToTempFileWithRetry(ctx context.Cont... function NewClawHubRegistry (line 35) | func NewClawHubRegistry(cfg ClawHubConfig) *ClawHubRegistry { type clawhubSearchResponse (line 93) | type clawhubSearchResponse struct type clawhubSearchResult (line 97) | type clawhubSearchResult struct type clawhubSkillResponse (line 160) | type clawhubSkillResponse struct type clawhubVersionInfo (line 168) | type clawhubVersionInfo struct type clawhubModerationInfo (line 172) | type clawhubModerationInfo struct FILE: pkg/skills/clawhub_registry_test.go function newTestRegistry (line 20) | func newTestRegistry(serverURL, authToken string) *ClawHubRegistry { function TestClawHubRegistrySearch (line 28) | func TestClawHubRegistrySearch(t *testing.T) { function TestClawHubRegistrySearchRetries429 (line 57) | func TestClawHubRegistrySearchRetries429(t *testing.T) { function TestClawHubRegistryGetSkillMeta (line 90) | func TestClawHubRegistryGetSkillMeta(t *testing.T) { function TestClawHubRegistryGetSkillMetaUnsafeSlug (line 119) | func TestClawHubRegistryGetSkillMetaUnsafeSlug(t *testing.T) { function TestClawHubRegistryDownloadAndInstall (line 126) | func TestClawHubRegistryDownloadAndInstall(t *testing.T) { function TestClawHubRegistryDownloadAndInstallRetries429 (line 173) | func TestClawHubRegistryDownloadAndInstallRetries429(t *testing.T) { function TestClawHubRegistryAuthToken (line 221) | func TestClawHubRegistryAuthToken(t *testing.T) { function TestExtractZipPathTraversal (line 233) | func TestExtractZipPathTraversal(t *testing.T) { function TestExtractZipWithSubdirectories (line 255) | func TestExtractZipWithSubdirectories(t *testing.T) { function TestClawHubRegistrySearchHTTPError (line 278) | func TestClawHubRegistrySearchHTTPError(t *testing.T) { function TestClawHubRegistrySearchNullableFields (line 291) | func TestClawHubRegistrySearchNullableFields(t *testing.T) { function createTestZip (line 324) | func createTestZip(t *testing.T, files map[string]string) []byte { FILE: pkg/skills/installer.go type GitHubContent (line 19) | type GitHubContent struct type GitHubRef (line 28) | type GitHubRef struct type SkillInstaller (line 35) | type SkillInstaller struct method InstallFromGitHub (line 107) | func (si *SkillInstaller) InstallFromGitHub(ctx context.Context, repo ... method getGithubDirAllFiles (line 143) | func (si *SkillInstaller) getGithubDirAllFiles(ctx context.Context, ap... method downloadRaw (line 191) | func (si *SkillInstaller) downloadRaw(ctx context.Context, owner, repo... method downloadFile (line 224) | func (si *SkillInstaller) downloadFile(ctx context.Context, url, local... method Uninstall (line 267) | func (si *SkillInstaller) Uninstall(skillName string) error { function NewSkillInstaller (line 44) | func NewSkillInstaller(workspace, githubToken, proxy string) (*SkillInst... function parseGitHubRef (line 60) | func parseGitHubRef(repo string) (GitHubRef, error) { function shouldDownload (line 251) | func shouldDownload(name string, root bool) bool { function isSkillDirectory (line 259) | func isSkillDirectory(name string) bool { FILE: pkg/skills/installer_test.go function TestParseGitHubRef (line 15) | func TestParseGitHubRef(t *testing.T) { function TestShouldDownload (line 130) | func TestShouldDownload(t *testing.T) { function TestIsSkillDirectory (line 155) | func TestIsSkillDirectory(t *testing.T) { function TestNewSkillInstaller (line 181) | func TestNewSkillInstaller(t *testing.T) { function TestNewSkillInstaller_WithProxy (line 211) | func TestNewSkillInstaller_WithProxy(t *testing.T) { function TestNewSkillInstaller_InvalidProxy (line 237) | func TestNewSkillInstaller_InvalidProxy(t *testing.T) { function TestSkillInstaller_DownloadFile (line 248) | func TestSkillInstaller_DownloadFile(t *testing.T) { function TestSkillInstaller_DownloadRaw (line 312) | func TestSkillInstaller_DownloadRaw(t *testing.T) { function TestSkillInstaller_Uninstall (line 352) | func TestSkillInstaller_Uninstall(t *testing.T) { function TestSkillInstaller_InstallFromGitHub_SkillAlreadyExists (line 423) | func TestSkillInstaller_InstallFromGitHub_SkillAlreadyExists(t *testing.... function TestGitHubContent_Struct (line 448) | func TestGitHubContent_Struct(t *testing.T) { function TestSkillInstaller_GetGithubDirAllFiles (line 475) | func TestSkillInstaller_GetGithubDirAllFiles(t *testing.T) { function TestSkillInstaller_InstallFromGitHub_WithToken (line 588) | func TestSkillInstaller_InstallFromGitHub_WithToken(t *testing.T) { function TestSkillInstaller_ContextCancellation (line 640) | func TestSkillInstaller_ContextCancellation(t *testing.T) { FILE: pkg/skills/loader.go constant MaxNameLength (line 24) | MaxNameLength = 64 constant MaxDescriptionLength (line 25) | MaxDescriptionLength = 1024 type SkillMetadata (line 28) | type SkillMetadata struct type SkillInfo (line 33) | type SkillInfo struct method validate (line 40) | func (info SkillInfo) validate() error { type SkillsLoader (line 61) | type SkillsLoader struct method SkillRoots (line 70) | func (sl *SkillsLoader) SkillRoots() []string { method ListSkills (line 100) | func (sl *SkillsLoader) ListSkills() []SkillInfo { method LoadSkill (line 150) | func (sl *SkillsLoader) LoadSkill(name string) (string, bool) { method LoadSkillsForContext (line 178) | func (sl *SkillsLoader) LoadSkillsForContext(skillNames []string) stri... method BuildSkillsSummary (line 194) | func (sl *SkillsLoader) BuildSkillsSummary() string { method getSkillMetadata (line 219) | func (sl *SkillsLoader) getSkillMetadata(skillPath string) *SkillMetad... method parseSimpleYAML (line 327) | func (sl *SkillsLoader) parseSimpleYAML(content string) map[string]str... method extractFrontmatter (line 347) | func (sl *SkillsLoader) extractFrontmatter(content string) string { method stripFrontmatter (line 352) | func (sl *SkillsLoader) stripFrontmatter(content string) string { function NewSkillsLoader (line 91) | func NewSkillsLoader(workspace string, globalSkills string, builtinSkill... function extractMarkdownMetadata (line 272) | func extractMarkdownMetadata(content string) (title, description string) { function nodeText (line 306) | func nodeText(n ast.Node) string { function splitFrontmatter (line 357) | func splitFrontmatter(content string) (frontmatter, body string) { function escapeXML (line 381) | func escapeXML(s string) string { FILE: pkg/skills/loader_test.go function TestSkillsInfoValidate (line 12) | func TestSkillsInfoValidate(t *testing.T) { function TestExtractFrontmatter (line 82) | func TestExtractFrontmatter(t *testing.T) { function createSkillDir (line 142) | func createSkillDir(t *testing.T, base, dirName, name, description strin... function TestListSkillsWorkspaceOverridesGlobal (line 150) | func TestListSkillsWorkspaceOverridesGlobal(t *testing.T) { function TestListSkillsGlobalOverridesBuiltin (line 166) | func TestListSkillsGlobalOverridesBuiltin(t *testing.T) { function TestListSkillsMetadataNameDedup (line 183) | func TestListSkillsMetadataNameDedup(t *testing.T) { function TestListSkillsMultipleDistinctSkills (line 200) | func TestListSkillsMultipleDistinctSkills(t *testing.T) { function TestListSkillsInvalidSkillSkipped (line 223) | func TestListSkillsInvalidSkillSkipped(t *testing.T) { function TestListSkillsEmptyAndNonexistentDirs (line 240) | func TestListSkillsEmptyAndNonexistentDirs(t *testing.T) { function TestListSkillsDirWithoutSkillMD (line 252) | func TestListSkillsDirWithoutSkillMD(t *testing.T) { function TestStripFrontmatter (line 269) | func TestStripFrontmatter(t *testing.T) { function TestSkillRootsTrimsWhitespaceAndDedups (line 330) | func TestSkillRootsTrimsWhitespaceAndDedups(t *testing.T) { function TestGetSkillMetadata_UsesMarkdownParagraphWhenNoFrontmatter (line 346) | func TestGetSkillMetadata_UsesMarkdownParagraphWhenNoFrontmatter(t *test... function TestGetSkillMetadata_FrontmatterOverridesMarkdown (line 361) | func TestGetSkillMetadata_FrontmatterOverridesMarkdown(t *testing.T) { function TestGetSkillMetadata_YAMLMultilineDescription (line 376) | func TestGetSkillMetadata_YAMLMultilineDescription(t *testing.T) { function TestGetSkillMetadata_InvalidHeadingNameFallsBackToDirName (line 391) | func TestGetSkillMetadata_InvalidHeadingNameFallsBackToDirName(t *testin... function TestGetSkillMetadata_IgnoresHTMLCommentBlocks (line 406) | func TestGetSkillMetadata_IgnoresHTMLCommentBlocks(t *testing.T) { FILE: pkg/skills/registry.go constant defaultMaxConcurrentSearches (line 12) | defaultMaxConcurrentSearches = 2 type SearchResult (line 16) | type SearchResult struct type SkillMeta (line 26) | type SkillMeta struct type InstallResult (line 38) | type InstallResult struct type SkillRegistry (line 47) | type SkillRegistry interface type RegistryConfig (line 62) | type RegistryConfig struct type ClawHubConfig (line 68) | type ClawHubConfig struct type RegistryManager (line 82) | type RegistryManager struct method AddRegistry (line 110) | func (rm *RegistryManager) AddRegistry(r SkillRegistry) { method GetRegistry (line 117) | func (rm *RegistryManager) GetRegistry(name string) SkillRegistry { method SearchAll (line 130) | func (rm *RegistryManager) SearchAll(ctx context.Context, query string... function NewRegistryManager (line 89) | func NewRegistryManager() *RegistryManager { function NewRegistryManagerFromConfig (line 98) | func NewRegistryManagerFromConfig(cfg RegistryConfig) *RegistryManager { function sortByScoreDesc (line 213) | func sortByScoreDesc(results []SearchResult) { FILE: pkg/skills/registry_test.go type mockRegistry (line 15) | type mockRegistry struct method Name (line 25) | func (m *mockRegistry) Name() string { return m.name } method Search (line 27) | func (m *mockRegistry) Search(_ context.Context, _ string, _ int) ([]S... method GetSkillMeta (line 31) | func (m *mockRegistry) GetSkillMeta(_ context.Context, _ string) (*Ski... method DownloadAndInstall (line 35) | func (m *mockRegistry) DownloadAndInstall(_ context.Context, _, _, _ s... function TestRegistryManagerSearchAllSingle (line 39) | func TestRegistryManagerSearchAllSingle(t *testing.T) { function TestRegistryManagerSearchAllMultiple (line 55) | func TestRegistryManagerSearchAllMultiple(t *testing.T) { function TestRegistryManagerSearchAllOneFailsGracefully (line 78) | func TestRegistryManagerSearchAllOneFailsGracefully(t *testing.T) { function TestRegistryManagerSearchAllAllFail (line 97) | func TestRegistryManagerSearchAllAllFail(t *testing.T) { function TestRegistryManagerSearchAllNoRegistries (line 108) | func TestRegistryManagerSearchAllNoRegistries(t *testing.T) { function TestRegistryManagerGetRegistry (line 114) | func TestRegistryManagerGetRegistry(t *testing.T) { function TestRegistryManagerSearchAllRespectLimit (line 127) | func TestRegistryManagerSearchAllRespectLimit(t *testing.T) { function TestRegistryManagerSearchAllTimeout (line 145) | func TestRegistryManagerSearchAllTimeout(t *testing.T) { function TestSortByScoreDesc (line 161) | func TestSortByScoreDesc(t *testing.T) { function TestIsSafeSlug (line 173) | func TestIsSafeSlug(t *testing.T) { FILE: pkg/skills/search_cache.go type SearchCache (line 13) | type SearchCache struct method Get (line 51) | func (sc *SearchCache) Get(query string) ([]SearchResult, bool) { method Put (line 93) | func (sc *SearchCache) Put(query string, results []SearchResult) { method Len (line 136) | func (sc *SearchCache) Len() int { method evictExpiredLocked (line 144) | func (sc *SearchCache) evictExpiredLocked() { method moveToEndLocked (line 158) | func (sc *SearchCache) moveToEndLocked(key string) { type cacheEntry (line 21) | type cacheEntry struct constant similarityThreshold (line 29) | similarityThreshold = 0.7 function NewSearchCache (line 34) | func NewSearchCache(maxEntries int, ttl time.Duration) *SearchCache { function normalizeQuery (line 168) | func normalizeQuery(q string) string { function buildTrigrams (line 175) | func buildTrigrams(s string) []uint32 { function jaccardSimilarity (line 199) | func jaccardSimilarity(a, b []uint32) float64 { function copyResults (line 222) | func copyResults(results []SearchResult) []SearchResult { FILE: pkg/skills/search_cache_test.go function TestSearchCacheExactHit (line 10) | func TestSearchCacheExactHit(t *testing.T) { function TestSearchCacheExactHitCaseInsensitive (line 25) | func TestSearchCacheExactHitCaseInsensitive(t *testing.T) { function TestSearchCacheSimilarHit (line 36) | func TestSearchCacheSimilarHit(t *testing.T) { function TestSearchCacheDissimilarMiss (line 48) | func TestSearchCacheDissimilarMiss(t *testing.T) { function TestSearchCacheTTLExpiration (line 59) | func TestSearchCacheTTLExpiration(t *testing.T) { function TestSearchCacheLRUEviction (line 76) | func TestSearchCacheLRUEviction(t *testing.T) { function TestSearchCacheEmptyQuery (line 97) | func TestSearchCacheEmptyQuery(t *testing.T) { function TestSearchCacheResultsCopied (line 107) | func TestSearchCacheResultsCopied(t *testing.T) { function TestBuildTrigrams (line 121) | func TestBuildTrigrams(t *testing.T) { function TestJaccardSimilarity (line 129) | func TestJaccardSimilarity(t *testing.T) { function TestJaccardSimilarityEdgeCases (line 141) | func TestJaccardSimilarityEdgeCases(t *testing.T) { function TestSearchCacheConcurrency (line 150) | func TestSearchCacheConcurrency(t *testing.T) { function TestSearchCacheLRUUpdateOnGet (line 173) | func TestSearchCacheLRUUpdateOnGet(t *testing.T) { FILE: pkg/state/state.go type State (line 17) | type State struct type Manager (line 29) | type Manager struct method SetLastChannel (line 78) | func (sm *Manager) SetLastChannel(channel string) error { method SetLastChatID (line 95) | func (sm *Manager) SetLastChatID(chatID string) error { method GetLastChannel (line 112) | func (sm *Manager) GetLastChannel() string { method GetLastChatID (line 119) | func (sm *Manager) GetLastChatID() string { method GetTimestamp (line 126) | func (sm *Manager) GetTimestamp() time.Time { method saveAtomic (line 140) | func (sm *Manager) saveAtomic() error { method load (line 152) | func (sm *Manager) load() error { function NewManager (line 37) | func NewManager(workspace string) *Manager { FILE: pkg/state/state_test.go function TestAtomicSave (line 12) | func TestAtomicSave(t *testing.T) { function TestSetLastChatID (line 52) | func TestSetLastChatID(t *testing.T) { function TestAtomicity_NoCorruptionOnInterrupt (line 85) | func TestAtomicity_NoCorruptionOnInterrupt(t *testing.T) { function TestConcurrentAccess (line 128) | func TestConcurrentAccess(t *testing.T) { function TestNewManager_ExistingState (line 171) | func TestNewManager_ExistingState(t *testing.T) { function TestNewManager_EmptyWorkspace (line 196) | func TestNewManager_EmptyWorkspace(t *testing.T) { function TestNewManager_MkdirFailureDoesNotCrash (line 219) | func TestNewManager_MkdirFailureDoesNotCrash(t *testing.T) { FILE: pkg/tools/base.go type Tool (line 6) | type Tool interface type toolCtxKey (line 21) | type toolCtxKey struct function WithToolContext (line 29) | func WithToolContext(ctx context.Context, channel, chatID string) contex... function ToolChannel (line 36) | func ToolChannel(ctx context.Context) string { function ToolChatID (line 42) | func ToolChatID(ctx context.Context) string { type AsyncCallback (line 52) | type AsyncCallback type AsyncExecutor (line 76) | type AsyncExecutor interface function ToolToSchema (line 84) | func ToolToSchema(tool Tool) map[string]any { FILE: pkg/tools/cron.go type JobExecutor (line 17) | type JobExecutor interface type CronTool (line 22) | type CronTool struct method Name (line 67) | func (t *CronTool) Name() string { method Description (line 72) | func (t *CronTool) Description() string { method Parameters (line 77) | func (t *CronTool) Parameters() map[string]any { method Execute (line 124) | func (t *CronTool) Execute(ctx context.Context, args map[string]any) *... method addJob (line 146) | func (t *CronTool) addJob(ctx context.Context, args map[string]any) *T... method listJobs (line 242) | func (t *CronTool) listJobs() *ToolResult { method removeJob (line 268) | func (t *CronTool) removeJob(args map[string]any) *ToolResult { method enableJob (line 280) | func (t *CronTool) enableJob(args map[string]any, enable bool) *ToolRe... method ExecuteJob (line 299) | func (t *CronTool) ExecuteJob(ctx context.Context, job *cron.CronJob) ... function NewCronTool (line 33) | func NewCronTool( FILE: pkg/tools/cron_test.go function newTestCronToolWithConfig (line 15) | func newTestCronToolWithConfig(t *testing.T, cfg *config.Config) *CronTo... function newTestCronTool (line 27) | func newTestCronTool(t *testing.T) *CronTool { function TestCronTool_CommandBlockedFromRemoteChannel (line 33) | func TestCronTool_CommandBlockedFromRemoteChannel(t *testing.T) { function TestCronTool_CommandDoesNotRequireConfirmByDefault (line 52) | func TestCronTool_CommandDoesNotRequireConfirmByDefault(t *testing.T) { function TestCronTool_CommandRequiresConfirmWhenAllowCommandDisabled (line 70) | func TestCronTool_CommandRequiresConfirmWhenAllowCommandDisabled(t *test... function TestCronTool_CommandAllowedWithConfirmWhenAllowCommandDisabled (line 91) | func TestCronTool_CommandAllowedWithConfirmWhenAllowCommandDisabled(t *t... function TestCronTool_CommandBlockedWhenExecDisabled (line 116) | func TestCronTool_CommandBlockedWhenExecDisabled(t *testing.T) { function TestCronTool_CommandAllowedFromInternalChannel (line 139) | func TestCronTool_CommandAllowedFromInternalChannel(t *testing.T) { function TestCronTool_AddJobRequiresSessionContext (line 159) | func TestCronTool_AddJobRequiresSessionContext(t *testing.T) { function TestCronTool_NonCommandJobAllowedFromRemoteChannel (line 176) | func TestCronTool_NonCommandJobAllowedFromRemoteChannel(t *testing.T) { function TestCronTool_NonCommandJobDefaultsDeliverToFalse (line 190) | func TestCronTool_NonCommandJobDefaultsDeliverToFalse(t *testing.T) { function TestCronTool_ExecuteJobPublishesErrorWhenExecDisabled (line 212) | func TestCronTool_ExecuteJobPublishesErrorWhenExecDisabled(t *testing.T) { FILE: pkg/tools/edit.go type EditFileTool (line 14) | type EditFileTool struct method Name (line 27) | func (t *EditFileTool) Name() string { method Description (line 31) | func (t *EditFileTool) Description() string { method Parameters (line 35) | func (t *EditFileTool) Parameters() map[string]any { method Execute (line 56) | func (t *EditFileTool) Execute(ctx context.Context, args map[string]an... function NewEditFileTool (line 19) | func NewEditFileTool(workspace string, restrict bool, allowPaths ...[]*r... type AppendFileTool (line 78) | type AppendFileTool struct method Name (line 90) | func (t *AppendFileTool) Name() string { method Description (line 94) | func (t *AppendFileTool) Description() string { method Parameters (line 98) | func (t *AppendFileTool) Parameters() map[string]any { method Execute (line 115) | func (t *AppendFileTool) Execute(ctx context.Context, args map[string]... function NewAppendFileTool (line 82) | func NewAppendFileTool(workspace string, restrict bool, allowPaths ...[]... function editFile (line 134) | func editFile(sysFs fileSystem, path, oldText, newText string) error { function appendFile (line 149) | func appendFile(sysFs fileSystem, path, appendContent string) error { function replaceEditContent (line 160) | func replaceEditContent(content []byte, oldText, newText string) ([]byte... FILE: pkg/tools/edit_test.go function TestEditTool_EditFile_Success (line 14) | func TestEditTool_EditFile_Success(t *testing.T) { function TestEditTool_EditFile_NotFound (line 59) | func TestEditTool_EditFile_NotFound(t *testing.T) { function TestEditTool_EditFile_OldTextNotFound (line 85) | func TestEditTool_EditFile_OldTextNotFound(t *testing.T) { function TestEditTool_EditFile_MultipleMatches (line 112) | func TestEditTool_EditFile_MultipleMatches(t *testing.T) { function TestEditTool_EditFile_OutsideAllowedDir (line 139) | func TestEditTool_EditFile_OutsideAllowedDir(t *testing.T) { function TestEditTool_EditFile_MissingPath (line 171) | func TestEditTool_EditFile_MissingPath(t *testing.T) { function TestEditTool_EditFile_MissingOldText (line 188) | func TestEditTool_EditFile_MissingOldText(t *testing.T) { function TestEditTool_EditFile_MissingNewText (line 205) | func TestEditTool_EditFile_MissingNewText(t *testing.T) { function TestEditTool_AppendFile_Success (line 222) | func TestEditTool_AppendFile_Success(t *testing.T) { function TestEditTool_AppendFile_MissingPath (line 266) | func TestEditTool_AppendFile_MissingPath(t *testing.T) { function TestEditTool_AppendFile_MissingContent (line 282) | func TestEditTool_AppendFile_MissingContent(t *testing.T) { function TestReplaceEditContent (line 298) | func TestReplaceEditContent(t *testing.T) { function TestAppendFileTool_AppendToNonExistent_Restricted (line 349) | func TestAppendFileTool_AppendToNonExistent_Restricted(t *testing.T) { function TestAppendFileTool_Restricted_Success (line 375) | func TestAppendFileTool_Restricted_Success(t *testing.T) { function TestEditFileTool_Restricted_InPlaceEdit (line 399) | func TestEditFileTool_Restricted_InPlaceEdit(t *testing.T) { function TestEditFileTool_Restricted_FileNotFound (line 424) | func TestEditFileTool_Restricted_FileNotFound(t *testing.T) { FILE: pkg/tools/filesystem.go constant MaxReadFileSize (line 21) | MaxReadFileSize = 64 * 1024 function validatePathWithAllowPaths (line 23) | func validatePathWithAllowPaths(path, workspace string, restrict bool, p... function isAllowedPath (line 79) | func isAllowedPath(path string, patterns []*regexp.Regexp) bool { function matchesAllowedPath (line 100) | func matchesAllowedPath(path string, patterns []*regexp.Regexp) bool { function extractAllowedPathRoot (line 113) | func extractAllowedPathRoot(pattern *regexp.Regexp) (string, bool) { function appendUniquePath (line 140) | func appendUniquePath(paths []string, path string) []string { function containsUnescapedRegexMeta (line 149) | func containsUnescapedRegexMeta(s string) bool { function unescapeRegexLiteral (line 168) | func unescapeRegexLiteral(s string) (string, bool) { function isWithinAllowedRoot (line 193) | func isWithinAllowedRoot(path, root string) bool { function resolveExistingAncestor (line 210) | func resolveExistingAncestor(path string) (string, error) { function resolvePathAgainstExistingAncestor (line 223) | func resolvePathAgainstExistingAncestor(path string) (string, error) { function isWithinWorkspace (line 246) | func isWithinWorkspace(candidate, workspace string) bool { type ReadFileTool (line 251) | type ReadFileTool struct method Name (line 278) | func (t *ReadFileTool) Name() string { method Description (line 282) | func (t *ReadFileTool) Description() string { method Parameters (line 286) | func (t *ReadFileTool) Parameters() map[string]any { method Execute (line 309) | func (t *ReadFileTool) Execute(ctx context.Context, args map[string]an... function NewReadFileTool (line 256) | func NewReadFileTool( function getInt64Arg (line 452) | func getInt64Arg(args map[string]any, key string, defaultVal int64) (int... type WriteFileTool (line 482) | type WriteFileTool struct method Name (line 494) | func (t *WriteFileTool) Name() string { method Description (line 498) | func (t *WriteFileTool) Description() string { method Parameters (line 502) | func (t *WriteFileTool) Parameters() map[string]any { method Execute (line 524) | func (t *WriteFileTool) Execute(ctx context.Context, args map[string]a... function NewWriteFileTool (line 486) | func NewWriteFileTool(workspace string, restrict bool, allowPaths ...[]*... type ListDirTool (line 550) | type ListDirTool struct method Name (line 562) | func (t *ListDirTool) Name() string { method Description (line 566) | func (t *ListDirTool) Description() string { method Parameters (line 570) | func (t *ListDirTool) Parameters() map[string]any { method Execute (line 583) | func (t *ListDirTool) Execute(ctx context.Context, args map[string]any... function NewListDirTool (line 554) | func NewListDirTool(workspace string, restrict bool, allowPaths ...[]*re... function formatDirEntries (line 596) | func formatDirEntries(entries []os.DirEntry) *ToolResult { type fileSystem (line 610) | type fileSystem interface type hostFs (line 618) | type hostFs struct method ReadFile (line 620) | func (h *hostFs) ReadFile(path string) ([]byte, error) { method ReadDir (line 634) | func (h *hostFs) ReadDir(path string) ([]os.DirEntry, error) { method WriteFile (line 638) | func (h *hostFs) WriteFile(path string, data []byte) error { method Open (line 644) | func (h *hostFs) Open(path string) (fs.File, error) { type sandboxFs (line 659) | type sandboxFs struct method execute (line 663) | func (r *sandboxFs) execute(path string, fn func(root *os.Root, relPat... method ReadFile (line 682) | func (r *sandboxFs) ReadFile(path string) ([]byte, error) { method WriteFile (line 703) | func (r *sandboxFs) WriteFile(path string, data []byte) error { method ReadDir (line 756) | func (r *sandboxFs) ReadDir(path string) ([]os.DirEntry, error) { method Open (line 769) | func (r *sandboxFs) Open(path string) (fs.File, error) { type whitelistFs (line 791) | type whitelistFs struct method matches (line 797) | func (w *whitelistFs) matches(path string) bool { method ReadFile (line 801) | func (w *whitelistFs) ReadFile(path string) ([]byte, error) { method WriteFile (line 808) | func (w *whitelistFs) WriteFile(path string, data []byte) error { method ReadDir (line 815) | func (w *whitelistFs) ReadDir(path string) ([]os.DirEntry, error) { method Open (line 822) | func (w *whitelistFs) Open(path string) (fs.File, error) { function buildFs (line 831) | func buildFs(workspace string, restrict bool, patterns []*regexp.Regexp)... function getSafeRelPath (line 843) | func getSafeRelPath(workspace, path string) (string, error) { FILE: pkg/tools/filesystem_test.go function TestFilesystemTool_ReadFile_Success (line 16) | func TestFilesystemTool_ReadFile_Success(t *testing.T) { function TestFilesystemTool_ReadFile_NotFound (line 47) | func TestFilesystemTool_ReadFile_NotFound(t *testing.T) { function TestFilesystemTool_ReadFile_MissingPath (line 68) | func TestFilesystemTool_ReadFile_MissingPath(t *testing.T) { function TestFilesystemTool_WriteFile_Success (line 87) | func TestFilesystemTool_WriteFile_Success(t *testing.T) { function TestFilesystemTool_WriteFile_CreateDir (line 126) | func TestFilesystemTool_WriteFile_CreateDir(t *testing.T) { function TestFilesystemTool_WriteFile_MissingPath (line 155) | func TestFilesystemTool_WriteFile_MissingPath(t *testing.T) { function TestFilesystemTool_WriteFile_MissingContent (line 171) | func TestFilesystemTool_WriteFile_MissingContent(t *testing.T) { function TestFilesystemTool_WriteFile_OverwriteDefaultBlocked (line 194) | func TestFilesystemTool_WriteFile_OverwriteDefaultBlocked(t *testing.T) { function TestFilesystemTool_WriteFile_OverwriteExplicitAllowed (line 217) | func TestFilesystemTool_WriteFile_OverwriteExplicitAllowed(t *testing.T) { function TestFilesystemTool_WriteFile_NewFileNoOverwriteFlag (line 238) | func TestFilesystemTool_WriteFile_NewFileNoOverwriteFlag(t *testing.T) { function TestFilesystemTool_WriteFile_OverwriteFalseExplicitBlocked (line 257) | func TestFilesystemTool_WriteFile_OverwriteFalseExplicitBlocked(t *testi... function TestFilesystemTool_WriteFile_OverwriteSandboxed (line 279) | func TestFilesystemTool_WriteFile_OverwriteSandboxed(t *testing.T) { function TestFilesystemTool_ListDir_Success (line 308) | func TestFilesystemTool_ListDir_Success(t *testing.T) { function TestFilesystemTool_ListDir_NotFound (line 337) | func TestFilesystemTool_ListDir_NotFound(t *testing.T) { function TestFilesystemTool_ListDir_DefaultPath (line 358) | func TestFilesystemTool_ListDir_DefaultPath(t *testing.T) { function TestFilesystemTool_ReadFile_RejectsSymlinkEscape (line 372) | func TestFilesystemTool_ReadFile_RejectsSymlinkEscape(t *testing.T) { function TestFilesystemTool_EmptyWorkspace_AccessDenied (line 406) | func TestFilesystemTool_EmptyWorkspace_AccessDenied(t *testing.T) { function TestRootMkdirAll (line 427) | func TestRootMkdirAll(t *testing.T) { function TestFilesystemTool_WriteFile_Restricted_CreateDir (line 458) | func TestFilesystemTool_WriteFile_Restricted_CreateDir(t *testing.T) { function TestHostRW_Read_PermissionDenied (line 481) | func TestHostRW_Read_PermissionDenied(t *testing.T) { function TestHostRW_Read_Directory (line 497) | func TestHostRW_Read_Directory(t *testing.T) { function TestRootRW_Read_Directory (line 505) | func TestRootRW_Read_Directory(t *testing.T) { function TestHostRW_Write_ParentDirMissing (line 520) | func TestHostRW_Write_ParentDirMissing(t *testing.T) { function TestRootRW_Write_ParentDirMissing (line 534) | func TestRootRW_Write_ParentDirMissing(t *testing.T) { function TestHostRW_Write (line 547) | func TestHostRW_Write(t *testing.T) { function TestRootRW_Write (line 570) | func TestRootRW_Write(t *testing.T) { function TestWhitelistFs_AllowsMatchingPaths (line 608) | func TestWhitelistFs_AllowsMatchingPaths(t *testing.T) { function TestWhitelistFs_BlocksSymlinkEscapeInAllowedDir (line 639) | func TestWhitelistFs_BlocksSymlinkEscapeInAllowedDir(t *testing.T) { function TestWhitelistFs_WriteAllowsNewFileUnderAllowedDir (line 662) | func TestWhitelistFs_WriteAllowsNewFileUnderAllowedDir(t *testing.T) { function TestWhitelistFs_AllowsResolvedAllowedRootAlias (line 688) | func TestWhitelistFs_AllowsResolvedAllowedRootAlias(t *testing.T) { function TestReadFileTool_ChunkedReading (line 725) | func TestReadFileTool_ChunkedReading(t *testing.T) { function TestReadFileTool_OffsetBeyondEOF (line 815) | func TestReadFileTool_OffsetBeyondEOF(t *testing.T) { FILE: pkg/tools/i2c.go type I2CTool (line 13) | type I2CTool struct method Name (line 19) | func (t *I2CTool) Name() string { method Description (line 23) | func (t *I2CTool) Description() string { method Parameters (line 27) | func (t *I2CTool) Parameters() map[string]any { method Execute (line 66) | func (t *I2CTool) Execute(ctx context.Context, args map[string]any) *T... method detect (line 91) | func (t *I2CTool) detect() *ToolResult { function NewI2CTool (line 15) | func NewI2CTool() *I2CTool { function isValidBusID (line 125) | func isValidBusID(id string) bool { function parseI2CAddress (line 133) | func parseI2CAddress(args map[string]any) (int, *ToolResult) { function parseI2CBus (line 148) | func parseI2CBus(args map[string]any) (string, *ToolResult) { FILE: pkg/tools/i2c_linux.go constant i2cSlave (line 12) | i2cSlave = 0x0703 constant i2cFuncs (line 13) | i2cFuncs = 0x0705 constant i2cSmbus (line 14) | i2cSmbus = 0x0720 constant i2cFuncSmbusQuick (line 17) | i2cFuncSmbusQuick = 0x00010000 constant i2cFuncSmbusReadByte (line 18) | i2cFuncSmbusReadByte = 0x00020000 constant i2cSmbusRead (line 21) | i2cSmbusRead = 0 constant i2cSmbusWrite (line 22) | i2cSmbusWrite = 1 constant i2cSmbusQuick (line 25) | i2cSmbusQuick = 0 constant i2cSmbusByte (line 26) | i2cSmbusByte = 1 type i2cSmbusData (line 31) | type i2cSmbusData type i2cSmbusArgs (line 34) | type i2cSmbusArgs struct function smbusProbe (line 45) | func smbusProbe(fd int, addr int, hasQuick bool) bool { method scan (line 77) | func (t *I2CTool) scan(args map[string]any) *ToolResult { method readDevice (line 147) | func (t *I2CTool) readDevice(args map[string]any) *ToolResult { method writeDevice (line 217) | func (t *I2CTool) writeDevice(args map[string]any) *ToolResult { FILE: pkg/tools/i2c_other.go method scan (line 6) | func (t *I2CTool) scan(args map[string]any) *ToolResult { method readDevice (line 11) | func (t *I2CTool) readDevice(args map[string]any) *ToolResult { method writeDevice (line 16) | func (t *I2CTool) writeDevice(args map[string]any) *ToolResult { FILE: pkg/tools/mcp_tool.go type MCPManager (line 15) | type MCPManager interface type MCPTool (line 24) | type MCPTool struct method Name (line 99) | func (t *MCPTool) Name() string { method Description (line 128) | func (t *MCPTool) Description() string { method Parameters (line 138) | func (t *MCPTool) Parameters() map[string]any { method Execute (line 203) | func (t *MCPTool) Execute(ctx context.Context, args map[string]any) *T... function NewMCPTool (line 31) | func NewMCPTool(manager MCPManager, serverName string, tool *mcp.Tool) *... function sanitizeIdentifierComponent (line 48) | func sanitizeIdentifierComponent(s string) string { function extractContentText (line 231) | func extractContentText(content []mcp.Content) string { FILE: pkg/tools/mcp_tool_test.go type MockMCPManager (line 13) | type MockMCPManager struct method CallTool (line 17) | func (m *MockMCPManager) CallTool( function TestNewMCPTool (line 34) | func TestNewMCPTool(t *testing.T) { function TestMCPTool_Name (line 62) | func TestMCPTool_Name(t *testing.T) { function TestMCPTool_Description (line 104) | func TestMCPTool_Description(t *testing.T) { function TestMCPTool_Parameters (line 146) | func TestMCPTool_Parameters(t *testing.T) { function TestMCPTool_Execute_Success (line 237) | func TestMCPTool_Execute_Success(t *testing.T) { function TestMCPTool_Execute_ManagerError (line 282) | func TestMCPTool_Execute_ManagerError(t *testing.T) { function TestMCPTool_Execute_ServerError (line 310) | func TestMCPTool_Execute_ServerError(t *testing.T) { function TestMCPTool_Execute_MultipleContent (line 343) | func TestMCPTool_Execute_MultipleContent(t *testing.T) { function TestExtractContentText_TextContent (line 374) | func TestExtractContentText_TextContent(t *testing.T) { function TestExtractContentText_ImageContent (line 389) | func TestExtractContentText_ImageContent(t *testing.T) { function TestExtractContentText_MixedContent (line 408) | func TestExtractContentText_MixedContent(t *testing.T) { function TestExtractContentText_EmptyContent (line 432) | func TestExtractContentText_EmptyContent(t *testing.T) { function TestMCPTool_InterfaceCompliance (line 443) | func TestMCPTool_InterfaceCompliance(t *testing.T) { function TestMCPTool_Parameters_MapSchema (line 453) | func TestMCPTool_Parameters_MapSchema(t *testing.T) { FILE: pkg/tools/message.go type SendCallback (line 9) | type SendCallback type MessageTool (line 11) | type MessageTool struct method Name (line 20) | func (t *MessageTool) Name() string { method Description (line 24) | func (t *MessageTool) Description() string { method Parameters (line 28) | func (t *MessageTool) Parameters() map[string]any { method ResetSentInRound (line 51) | func (t *MessageTool) ResetSentInRound() { method HasSentInRound (line 56) | func (t *MessageTool) HasSentInRound() bool { method SetSendCallback (line 60) | func (t *MessageTool) SetSendCallback(callback SendCallback) { method Execute (line 64) | func (t *MessageTool) Execute(ctx context.Context, args map[string]any... function NewMessageTool (line 16) | func NewMessageTool() *MessageTool { FILE: pkg/tools/message_test.go function TestMessageTool_Execute_Success (line 9) | func TestMessageTool_Execute_Success(t *testing.T) { function TestMessageTool_Execute_WithCustomChannel (line 60) | func TestMessageTool_Execute_WithCustomChannel(t *testing.T) { function TestMessageTool_Execute_SendFailure (line 95) | func TestMessageTool_Execute_SendFailure(t *testing.T) { function TestMessageTool_Execute_MissingContent (line 131) | func TestMessageTool_Execute_MissingContent(t *testing.T) { function TestMessageTool_Execute_NoTargetChannel (line 148) | func TestMessageTool_Execute_NoTargetChannel(t *testing.T) { function TestMessageTool_Execute_NotConfigured (line 172) | func TestMessageTool_Execute_NotConfigured(t *testing.T) { function TestMessageTool_Name (line 192) | func TestMessageTool_Name(t *testing.T) { function TestMessageTool_Description (line 199) | func TestMessageTool_Description(t *testing.T) { function TestMessageTool_Parameters (line 207) | func TestMessageTool_Parameters(t *testing.T) { FILE: pkg/tools/registry.go type ToolEntry (line 15) | type ToolEntry struct type ToolRegistry (line 21) | type ToolRegistry struct method Register (line 33) | func (r *ToolRegistry) Register(tool Tool) { method RegisterHidden (line 51) | func (r *ToolRegistry) RegisterHidden(tool Tool) { method PromoteTools (line 70) | func (r *ToolRegistry) PromoteTools(names []string, ttl int) { method TickTTL (line 90) | func (r *ToolRegistry) TickTTL() { method Version (line 101) | func (r *ToolRegistry) Version() uint64 { method SnapshotHiddenTools (line 121) | func (r *ToolRegistry) SnapshotHiddenTools() HiddenToolSnapshot { method Get (line 139) | func (r *ToolRegistry) Get(name string) (Tool, bool) { method Execute (line 153) | func (r *ToolRegistry) Execute(ctx context.Context, name string, args ... method ExecuteWithContext (line 161) | func (r *ToolRegistry) ExecuteWithContext( method sortedToolNames (line 265) | func (r *ToolRegistry) sortedToolNames() []string { method GetDefinitions (line 274) | func (r *ToolRegistry) GetDefinitions() []map[string]any { method ToProviderDefs (line 294) | func (r *ToolRegistry) ToProviderDefs() []providers.ToolDefinition { method List (line 332) | func (r *ToolRegistry) List() []string { method Clone (line 345) | func (r *ToolRegistry) Clone() *ToolRegistry { method Count (line 362) | func (r *ToolRegistry) Count() int { method GetSummaries (line 370) | func (r *ToolRegistry) GetSummaries() []string { function NewToolRegistry (line 27) | func NewToolRegistry() *ToolRegistry { type HiddenToolSnapshot (line 107) | type HiddenToolSnapshot struct type HiddenToolDoc (line 113) | type HiddenToolDoc struct FILE: pkg/tools/registry_test.go type mockRegistryTool (line 15) | type mockRegistryTool struct method Name (line 22) | func (m *mockRegistryTool) Name() string { return m.name } method Description (line 23) | func (m *mockRegistryTool) Description() string { return m.desc } method Parameters (line 24) | func (m *mockRegistryTool) Parameters() map[string]any { return m.para... method Execute (line 25) | func (m *mockRegistryTool) Execute(_ context.Context, _ map[string]any... type mockContextAwareTool (line 29) | type mockContextAwareTool struct method Execute (line 34) | func (m *mockContextAwareTool) Execute(ctx context.Context, _ map[stri... type mockAsyncRegistryTool (line 39) | type mockAsyncRegistryTool struct method ExecuteAsync (line 44) | func (m *mockAsyncRegistryTool) ExecuteAsync(_ context.Context, args m... function newMockTool (line 51) | func newMockTool(name, desc string) *mockRegistryTool { function TestNewToolRegistry (line 62) | func TestNewToolRegistry(t *testing.T) { function TestToolRegistry_RegisterAndGet (line 72) | func TestToolRegistry_RegisterAndGet(t *testing.T) { function TestToolRegistry_Get_NotFound (line 86) | func TestToolRegistry_Get_NotFound(t *testing.T) { function TestToolRegistry_RegisterOverwrite (line 94) | func TestToolRegistry_RegisterOverwrite(t *testing.T) { function TestToolRegistry_Execute_Success (line 108) | func TestToolRegistry_Execute_Success(t *testing.T) { function TestToolRegistry_Execute_NotFound (line 126) | func TestToolRegistry_Execute_NotFound(t *testing.T) { function TestToolRegistry_ExecuteWithContext_InjectsToolContext (line 140) | func TestToolRegistry_ExecuteWithContext_InjectsToolContext(t *testing.T) { function TestToolRegistry_ExecuteWithContext_EmptyContext (line 160) | func TestToolRegistry_ExecuteWithContext_EmptyContext(t *testing.T) { function TestToolRegistry_ExecuteWithContext_AsyncCallback (line 181) | func TestToolRegistry_ExecuteWithContext_AsyncCallback(t *testing.T) { function TestToolRegistry_GetDefinitions (line 206) | func TestToolRegistry_GetDefinitions(t *testing.T) { function TestToolRegistry_ToProviderDefs (line 229) | func TestToolRegistry_ToProviderDefs(t *testing.T) { function TestToolRegistry_List (line 264) | func TestToolRegistry_List(t *testing.T) { function TestToolRegistry_Count (line 283) | func TestToolRegistry_Count(t *testing.T) { function TestToolRegistry_GetSummaries (line 301) | func TestToolRegistry_GetSummaries(t *testing.T) { function TestToolToSchema (line 317) | func TestToolToSchema(t *testing.T) { function TestToolRegistry_Clone (line 339) | func TestToolRegistry_Clone(t *testing.T) { function TestToolRegistry_Clone_Empty (line 379) | func TestToolRegistry_Clone_Empty(t *testing.T) { function TestToolRegistry_Clone_PreservesHiddenToolState (line 387) | func TestToolRegistry_Clone_PreservesHiddenToolState(t *testing.T) { function TestToolRegistry_Clone_PreservesTTLValue (line 404) | func TestToolRegistry_Clone_PreservesTTLValue(t *testing.T) { function TestToolRegistry_ConcurrentAccess (line 429) | func TestToolRegistry_ConcurrentAccess(t *testing.T) { type mockPanicTool (line 456) | type mockPanicTool struct method Name (line 461) | func (m *mockPanicTool) Name() string { return m.name } method Description (line 462) | func (m *mockPanicTool) Description() string { return "a tool t... method Parameters (line 463) | func (m *mockPanicTool) Parameters() map[string]any { return map[strin... method Execute (line 464) | func (m *mockPanicTool) Execute(_ context.Context, _ map[string]any) *... type mockNilResultTool (line 469) | type mockNilResultTool struct method Name (line 473) | func (m *mockNilResultTool) Name() string { return m.name } method Description (line 474) | func (m *mockNilResultTool) Description() string { return "a to... method Parameters (line 475) | func (m *mockNilResultTool) Parameters() map[string]any { return map[s... method Execute (line 476) | func (m *mockNilResultTool) Execute(_ context.Context, _ map[string]an... function TestToolRegistry_Execute_PanicRecovery (line 480) | func TestToolRegistry_Execute_PanicRecovery(t *testing.T) { function TestToolRegistry_Execute_PanicRecovery_ErrorType (line 510) | func TestToolRegistry_Execute_PanicRecovery_ErrorType(t *testing.T) { function TestToolRegistry_Execute_PanicRecovery_IntType (line 529) | func TestToolRegistry_Execute_PanicRecovery_IntType(t *testing.T) { function TestToolRegistry_Execute_NilResultHandling (line 548) | func TestToolRegistry_Execute_NilResultHandling(t *testing.T) { function TestToolRegistry_ExecuteWithContext_PanicRecovery (line 571) | func TestToolRegistry_ExecuteWithContext_PanicRecovery(t *testing.T) { function TestToolRegistry_Execute_PanicDoesNotAffectOtherTools (line 599) | func TestToolRegistry_Execute_PanicDoesNotAffectOtherTools(t *testing.T) { FILE: pkg/tools/result.go type ToolResult (line 8) | type ToolResult struct method MarshalJSON (line 142) | func (tr *ToolResult) MarshalJSON() ([]byte, error) { method WithError (line 157) | func (tr *ToolResult) WithError(err error) *ToolResult { function NewToolResult (line 45) | func NewToolResult(forLLM string) *ToolResult { function SilentResult (line 62) | func SilentResult(forLLM string) *ToolResult { function AsyncResult (line 82) | func AsyncResult(forLLM string) *ToolResult { function ErrorResult (line 97) | func ErrorResult(message string) *ToolResult { function UserResult (line 117) | func UserResult(content string) *ToolResult { function MediaResult (line 133) | func MediaResult(forLLM string, mediaRefs []string) *ToolResult { FILE: pkg/tools/result_test.go function TestNewToolResult (line 9) | func TestNewToolResult(t *testing.T) { function TestSilentResult (line 26) | func TestSilentResult(t *testing.T) { function TestAsyncResult (line 43) | func TestAsyncResult(t *testing.T) { function TestErrorResult (line 60) | func TestErrorResult(t *testing.T) { function TestUserResult (line 77) | func TestUserResult(t *testing.T) { function TestToolResultJSONSerialization (line 98) | func TestToolResultJSONSerialization(t *testing.T) { function TestToolResultWithErrors (line 159) | func TestToolResultWithErrors(t *testing.T) { function TestToolResultJSONStructure (line 186) | func TestToolResultJSONStructure(t *testing.T) { FILE: pkg/tools/search_tool.go constant MaxRegexPatternLength (line 16) | MaxRegexPatternLength = 200 type RegexSearchTool (line 19) | type RegexSearchTool struct method Name (line 29) | func (t *RegexSearchTool) Name() string { method Description (line 33) | func (t *RegexSearchTool) Description() string { method Parameters (line 37) | func (t *RegexSearchTool) Parameters() map[string]any { method Execute (line 50) | func (t *RegexSearchTool) Execute(ctx context.Context, args map[string... function NewRegexSearchTool (line 25) | func NewRegexSearchTool(r *ToolRegistry, ttl int, maxSearchResults int) ... type BM25SearchTool (line 75) | type BM25SearchTool struct method Name (line 90) | func (t *BM25SearchTool) Name() string { method Description (line 94) | func (t *BM25SearchTool) Description() string { method Parameters (line 98) | func (t *BM25SearchTool) Parameters() map[string]any { method Execute (line 111) | func (t *BM25SearchTool) Execute(ctx context.Context, args map[string]... method getOrBuildEngine (line 249) | func (t *BM25SearchTool) getOrBuildEngine() *bm25CachedEngine { function NewBM25SearchTool (line 86) | func NewBM25SearchTool(r *ToolRegistry, ttl int, maxSearchResults int) *... type ToolSearchResult (line 148) | type ToolSearchResult struct method SearchRegex (line 153) | func (r *ToolRegistry) SearchRegex(pattern string, maxSearchResults int)... function formatDiscoveryResponse (line 191) | func formatDiscoveryResponse(registry *ToolRegistry, results []ToolSearc... type searchDoc (line 218) | type searchDoc struct type bm25CachedEngine (line 224) | type bm25CachedEngine struct function snapshotToSearchDocs (line 229) | func snapshotToSearchDocs(snap HiddenToolSnapshot) []searchDoc { function buildBM25Engine (line 238) | func buildBM25Engine(docs []searchDoc) *utils.BM25Engine[searchDoc] { method SearchBM25 (line 284) | func (r *ToolRegistry) SearchBM25(query string, maxSearchResults int) []... FILE: pkg/tools/search_tools_test.go type mockSearchableTool (line 11) | type mockSearchableTool struct method Name (line 16) | func (m *mockSearchableTool) Name() string { return m.name } method Description (line 17) | func (m *mockSearchableTool) Description() string { return m.desc } method Parameters (line 18) | func (m *mockSearchableTool) Parameters() map[string]any { method Execute (line 22) | func (m *mockSearchableTool) Execute(ctx context.Context, args map[str... function setupPopulatedRegistry (line 27) | func setupPopulatedRegistry() *ToolRegistry { function TestRegexSearchTool_Execute (line 53) | func TestRegexSearchTool_Execute(t *testing.T) { function TestBM25SearchTool_Execute (line 104) | func TestBM25SearchTool_Execute(t *testing.T) { function TestRegexSearchTool_PatternTooLong (line 141) | func TestRegexSearchTool_PatternTooLong(t *testing.T) { function TestSearchRegex_ZeroMaxResults (line 153) | func TestSearchRegex_ZeroMaxResults(t *testing.T) { function TestSearchBM25_ZeroMaxResults (line 165) | func TestSearchBM25_ZeroMaxResults(t *testing.T) { function TestSearchRegex_DeterministicOrder (line 174) | func TestSearchRegex_DeterministicOrder(t *testing.T) { function TestToolRegistry_SearchLimitsAndCoreFiltering (line 209) | func TestToolRegistry_SearchLimitsAndCoreFiltering(t *testing.T) { function TestGet_HiddenToolTTLLifecycle (line 255) | func TestGet_HiddenToolTTLLifecycle(t *testing.T) { function TestBM25CacheInvalidation (line 289) | func TestBM25CacheInvalidation(t *testing.T) { function TestPromoteTools_ConcurrentWithTickTTL (line 312) | func TestPromoteTools_ConcurrentWithTickTTL(t *testing.T) { FILE: pkg/tools/send_file.go type SendFileTool (line 20) | type SendFileTool struct method Name (line 54) | func (t *SendFileTool) Name() string { return "send_file" } method Description (line 55) | func (t *SendFileTool) Description() string { method Parameters (line 59) | func (t *SendFileTool) Parameters() map[string]any { method SetContext (line 76) | func (t *SendFileTool) SetContext(channel, chatID string) { method SetMediaStore (line 81) | func (t *SendFileTool) SetMediaStore(store media.MediaStore) { method Execute (line 85) | func (t *SendFileTool) Execute(ctx context.Context, args map[string]an... function NewSendFileTool (line 31) | func NewSendFileTool( function detectMediaType (line 150) | func detectMediaType(path string) string { FILE: pkg/tools/send_file_test.go function TestSendFileTool_MissingPath (line 15) | func TestSendFileTool_MissingPath(t *testing.T) { function TestSendFileTool_NoContext (line 26) | func TestSendFileTool_NoContext(t *testing.T) { function TestSendFileTool_NoMediaStore (line 37) | func TestSendFileTool_NoMediaStore(t *testing.T) { function TestSendFileTool_Directory (line 47) | func TestSendFileTool_Directory(t *testing.T) { function TestSendFileTool_FileTooLarge (line 58) | func TestSendFileTool_FileTooLarge(t *testing.T) { function TestSendFileTool_DefaultMaxSize (line 79) | func TestSendFileTool_DefaultMaxSize(t *testing.T) { function TestSendFileTool_Success (line 86) | func TestSendFileTool_Success(t *testing.T) { function TestSendFileTool_CustomFilename (line 109) | func TestSendFileTool_CustomFilename(t *testing.T) { function TestSendFileTool_AllowsWhitelistedMediaTempPath (line 132) | func TestSendFileTool_AllowsWhitelistedMediaTempPath(t *testing.T) { function TestDetectMediaType_MagicBytes (line 170) | func TestDetectMediaType_MagicBytes(t *testing.T) { function TestDetectMediaType_FallbackToExtension (line 186) | func TestDetectMediaType_FallbackToExtension(t *testing.T) { function TestDetectMediaType_UnknownFallsToOctetStream (line 202) | func TestDetectMediaType_UnknownFallsToOctetStream(t *testing.T) { FILE: pkg/tools/shell.go type ExecTool (line 20) | type ExecTool struct method Name (line 165) | func (t *ExecTool) Name() string { method Description (line 169) | func (t *ExecTool) Description() string { method Parameters (line 173) | func (t *ExecTool) Parameters() map[string]any { method Execute (line 190) | func (t *ExecTool) Execute(ctx context.Context, args map[string]any) *... method guardCommand (line 364) | func (t *ExecTool) guardCommand(command, cwd string) string { method SetTimeout (line 465) | func (t *ExecTool) SetTimeout(timeout time.Duration) { method SetRestrictToWorkspace (line 469) | func (t *ExecTool) SetRestrictToWorkspace(restrict bool) { method SetAllowPatterns (line 473) | func (t *ExecTool) SetAllowPatterns(patterns []string) error { function NewExecTool (line 99) | func NewExecTool(workingDir string, restrict bool, allowPaths ...[]*rege... function NewExecToolWithConfig (line 103) | func NewExecToolWithConfig( FILE: pkg/tools/shell_process_unix.go function prepareCommandForTermination (line 10) | func prepareCommandForTermination(cmd *exec.Cmd) { function terminateProcessTree (line 17) | func terminateProcessTree(cmd *exec.Cmd) error { FILE: pkg/tools/shell_process_windows.go function prepareCommandForTermination (line 10) | func prepareCommandForTermination(cmd *exec.Cmd) { function terminateProcessTree (line 14) | func terminateProcessTree(cmd *exec.Cmd) error { FILE: pkg/tools/shell_test.go function TestShellTool_Success (line 15) | func TestShellTool_Success(t *testing.T) { function TestShellTool_Failure (line 45) | func TestShellTool_Failure(t *testing.T) { function TestShellTool_Timeout (line 75) | func TestShellTool_Timeout(t *testing.T) { function TestShellTool_WorkingDir (line 102) | func TestShellTool_WorkingDir(t *testing.T) { function TestShellTool_DangerousCommand (line 131) | func TestShellTool_DangerousCommand(t *testing.T) { function TestShellTool_DangerousCommand_KillBlocked (line 154) | func TestShellTool_DangerousCommand_KillBlocked(t *testing.T) { function TestShellTool_MissingCommand (line 175) | func TestShellTool_MissingCommand(t *testing.T) { function TestShellTool_StderrCapture (line 193) | func TestShellTool_StderrCapture(t *testing.T) { function TestShellTool_OutputTruncation (line 216) | func TestShellTool_OutputTruncation(t *testing.T) { function TestShellTool_WorkingDir_OutsideWorkspace (line 237) | func TestShellTool_WorkingDir_OutsideWorkspace(t *testing.T) { function TestShellTool_WorkingDir_SymlinkEscape (line 268) | func TestShellTool_WorkingDir_SymlinkEscape(t *testing.T) { function TestShellTool_RemoteChannelBlockedByDefault (line 305) | func TestShellTool_RemoteChannelBlockedByDefault(t *testing.T) { function TestShellTool_InternalChannelAllowed (line 326) | func TestShellTool_InternalChannelAllowed(t *testing.T) { function TestShellTool_EmptyChannelBlockedWhenNotAllowRemote (line 347) | func TestShellTool_EmptyChannelBlockedWhenNotAllowRemote(t *testing.T) { function TestShellTool_AllowRemoteBypassesChannelCheck (line 366) | func TestShellTool_AllowRemoteBypassesChannelCheck(t *testing.T) { function TestShellTool_RestrictToWorkspace (line 384) | func TestShellTool_RestrictToWorkspace(t *testing.T) { function TestShellTool_DevNullAllowed (line 415) | func TestShellTool_DevNullAllowed(t *testing.T) { function TestShellTool_BlockDevices (line 440) | func TestShellTool_BlockDevices(t *testing.T) { function TestShellTool_SafePathsInWorkspaceRestriction (line 470) | func TestShellTool_SafePathsInWorkspaceRestriction(t *testing.T) { function TestShellTool_ExitCodeDetails (line 493) | func TestShellTool_ExitCodeDetails(t *testing.T) { function TestShellTool_TimeoutWithPartialOutput (line 526) | func TestShellTool_TimeoutWithPartialOutput(t *testing.T) { function TestShellTool_CustomAllowPatterns (line 557) | func TestShellTool_CustomAllowPatterns(t *testing.T) { function TestShellTool_URLsNotBlocked (line 591) | func TestShellTool_URLsNotBlocked(t *testing.T) { function TestShellTool_FileURISandboxing (line 620) | func TestShellTool_FileURISandboxing(t *testing.T) { function TestShellTool_URLBypassPrevented (line 664) | func TestShellTool_URLBypassPrevented(t *testing.T) { FILE: pkg/tools/shell_timeout_unix_test.go function processExists (line 16) | func processExists(pid int) bool { function TestShellTool_TimeoutKillsChildProcess (line 24) | func TestShellTool_TimeoutKillsChildProcess(t *testing.T) { FILE: pkg/tools/skills_install.go type InstallSkillTool (line 21) | type InstallSkillTool struct method Name (line 38) | func (t *InstallSkillTool) Name() string { method Description (line 42) | func (t *InstallSkillTool) Description() string { method Parameters (line 46) | func (t *InstallSkillTool) Parameters() map[string]any { method Execute (line 71) | func (t *InstallSkillTool) Execute(ctx context.Context, args map[strin... function NewInstallSkillTool (line 30) | func NewInstallSkillTool(registryMgr *skills.RegistryManager, workspace ... type originMeta (line 179) | type originMeta struct function writeOriginMeta (line 187) | func writeOriginMeta(targetDir, registryName, slug, version string) error { FILE: pkg/tools/skills_install_test.go function TestInstallSkillToolName (line 15) | func TestInstallSkillToolName(t *testing.T) { function TestInstallSkillToolMissingSlug (line 20) | func TestInstallSkillToolMissingSlug(t *testing.T) { function TestInstallSkillToolEmptySlug (line 27) | func TestInstallSkillToolEmptySlug(t *testing.T) { function TestInstallSkillToolUnsafeSlug (line 36) | func TestInstallSkillToolUnsafeSlug(t *testing.T) { function TestInstallSkillToolAlreadyExists (line 54) | func TestInstallSkillToolAlreadyExists(t *testing.T) { function TestInstallSkillToolRegistryNotFound (line 68) | func TestInstallSkillToolRegistryNotFound(t *testing.T) { function TestInstallSkillToolParameters (line 80) | func TestInstallSkillToolParameters(t *testing.T) { function TestInstallSkillToolMissingRegistry (line 97) | func TestInstallSkillToolMissingRegistry(t *testing.T) { FILE: pkg/tools/skills_search.go type FindSkillsTool (line 12) | type FindSkillsTool struct method Name (line 27) | func (t *FindSkillsTool) Name() string { method Description (line 31) | func (t *FindSkillsTool) Description() string { method Parameters (line 35) | func (t *FindSkillsTool) Parameters() map[string]any { method Execute (line 54) | func (t *FindSkillsTool) Execute(ctx context.Context, args map[string]... function NewFindSkillsTool (line 20) | func NewFindSkillsTool(registryMgr *skills.RegistryManager, cache *skill... function formatSearchResults (line 90) | func formatSearchResults(query string, results []skills.SearchResult, ca... FILE: pkg/tools/skills_search_test.go function TestFindSkillsToolName (line 12) | func TestFindSkillsToolName(t *testing.T) { function TestFindSkillsToolMissingQuery (line 17) | func TestFindSkillsToolMissingQuery(t *testing.T) { function TestFindSkillsToolEmptyQuery (line 24) | func TestFindSkillsToolEmptyQuery(t *testing.T) { function TestFindSkillsToolCacheHit (line 32) | func TestFindSkillsToolCacheHit(t *testing.T) { function TestFindSkillsToolParameters (line 48) | func TestFindSkillsToolParameters(t *testing.T) { function TestFindSkillsToolDescription (line 62) | func TestFindSkillsToolDescription(t *testing.T) { function TestFormatSearchResultsEmpty (line 68) | func TestFormatSearchResultsEmpty(t *testing.T) { function TestFormatSearchResultsWithData (line 73) | func TestFormatSearchResultsWithData(t *testing.T) { FILE: pkg/tools/spawn.go type SpawnTool (line 9) | type SpawnTool struct method Name (line 23) | func (t *SpawnTool) Name() string { method Description (line 27) | func (t *SpawnTool) Description() string { method Parameters (line 31) | func (t *SpawnTool) Parameters() map[string]any { method SetAllowlistChecker (line 52) | func (t *SpawnTool) SetAllowlistChecker(check func(targetAgentID strin... method Execute (line 56) | func (t *SpawnTool) Execute(ctx context.Context, args map[string]any) ... method ExecuteAsync (line 62) | func (t *SpawnTool) ExecuteAsync(ctx context.Context, args map[string]... method execute (line 66) | func (t *SpawnTool) execute(ctx context.Context, args map[string]any, ... function NewSpawnTool (line 17) | func NewSpawnTool(manager *SubagentManager) *SpawnTool { FILE: pkg/tools/spawn_status.go type SpawnStatusTool (line 14) | type SpawnStatusTool struct method Name (line 23) | func (t *SpawnStatusTool) Name() string { method Description (line 27) | func (t *SpawnStatusTool) Description() string { method Parameters (line 37) | func (t *SpawnStatusTool) Parameters() map[string]any { method Execute (line 51) | func (t *SpawnStatusTool) Execute(ctx context.Context, args map[string... function NewSpawnStatusTool (line 19) | func NewSpawnStatusTool(manager *SubagentManager) *SpawnStatusTool { function spawnStatusFormatTask (line 148) | func spawnStatusFormatTask(task *SubagentTask) string { FILE: pkg/tools/spawn_status_test.go function TestSpawnStatusTool_Name (line 11) | func TestSpawnStatusTool_Name(t *testing.T) { function TestSpawnStatusTool_Description (line 22) | func TestSpawnStatusTool_Description(t *testing.T) { function TestSpawnStatusTool_Parameters (line 37) | func TestSpawnStatusTool_Parameters(t *testing.T) { function TestSpawnStatusTool_NilManager (line 56) | func TestSpawnStatusTool_NilManager(t *testing.T) { function TestSpawnStatusTool_Empty (line 64) | func TestSpawnStatusTool_Empty(t *testing.T) { function TestSpawnStatusTool_ListAll (line 79) | func TestSpawnStatusTool_ListAll(t *testing.T) { function TestSpawnStatusTool_GetByID (line 141) | func TestSpawnStatusTool_GetByID(t *testing.T) { function TestSpawnStatusTool_GetByID_NotFound (line 176) | func TestSpawnStatusTool_GetByID_NotFound(t *testing.T) { function TestSpawnStatusTool_TaskID_NonString (line 190) | func TestSpawnStatusTool_TaskID_NonString(t *testing.T) { function TestSpawnStatusTool_ResultTruncation (line 206) | func TestSpawnStatusTool_ResultTruncation(t *testing.T) { function TestSpawnStatusTool_ResultTruncation_Unicode (line 235) | func TestSpawnStatusTool_ResultTruncation_Unicode(t *testing.T) { function TestSpawnStatusTool_StatusCounts (line 266) | func TestSpawnStatusTool_StatusCounts(t *testing.T) { function TestSpawnStatusTool_SortByCreatedTimestamp (line 291) | func TestSpawnStatusTool_SortByCreatedTimestamp(t *testing.T) { function TestSpawnStatusTool_ChannelFiltering_ListAll (line 326) | func TestSpawnStatusTool_ChannelFiltering_ListAll(t *testing.T) { function TestSpawnStatusTool_ChannelFiltering_GetByID (line 358) | func TestSpawnStatusTool_ChannelFiltering_GetByID(t *testing.T) { function TestSpawnStatusTool_ChannelFiltering_NoContext (line 380) | func TestSpawnStatusTool_ChannelFiltering_NoContext(t *testing.T) { FILE: pkg/tools/spawn_test.go function TestSpawnTool_Execute_EmptyTask (line 9) | func TestSpawnTool_Execute_EmptyTask(t *testing.T) { function TestSpawnTool_Execute_ValidTask (line 43) | func TestSpawnTool_Execute_ValidTask(t *testing.T) { function TestSpawnTool_Execute_NilManager (line 66) | func TestSpawnTool_Execute_NilManager(t *testing.T) { FILE: pkg/tools/spi.go type SPITool (line 13) | type SPITool struct method Name (line 19) | func (t *SPITool) Name() string { method Description (line 23) | func (t *SPITool) Description() string { method Parameters (line 27) | func (t *SPITool) Parameters() map[string]any { method Execute (line 70) | func (t *SPITool) Execute(ctx context.Context, args map[string]any) *T... method list (line 93) | func (t *SPITool) list() *ToolResult { function NewSPITool (line 15) | func NewSPITool() *SPITool { function parseSPIArgs (line 127) | func parseSPIArgs(args map[string]any) (device string, speed uint32, mod... FILE: pkg/tools/spi_linux.go constant spiIocWrMode (line 16) | spiIocWrMode = 0x40016B01 constant spiIocWrBitsPerWord (line 17) | spiIocWrBitsPerWord = 0x40016B03 constant spiIocWrMaxSpeedHz (line 18) | spiIocWrMaxSpeedHz = 0x40046B04 constant spiIocMessage1 (line 19) | spiIocMessage1 = 0x40206B00 type spiTransfer (line 23) | type spiTransfer struct function configureSPI (line 38) | func configureSPI(devPath string, mode uint8, bits uint8, speed uint32) ... method transfer (line 69) | func (t *SPITool) transfer(args map[string]any) *ToolResult { method readDevice (line 145) | func (t *SPITool) readDevice(args map[string]any) *ToolResult { FILE: pkg/tools/spi_other.go method transfer (line 6) | func (t *SPITool) transfer(args map[string]any) *ToolResult { method readDevice (line 11) | func (t *SPITool) readDevice(args map[string]any) *ToolResult { FILE: pkg/tools/subagent.go type SubagentTask (line 12) | type SubagentTask struct type SubagentManager (line 24) | type SubagentManager struct method SetLLMOptions (line 55) | func (sm *SubagentManager) SetLLMOptions(maxTokens int, temperature fl... method SetTools (line 66) | func (sm *SubagentManager) SetTools(tools *ToolRegistry) { method RegisterTool (line 73) | func (sm *SubagentManager) RegisterTool(tool Tool) { method Spawn (line 79) | func (sm *SubagentManager) Spawn( method runTask (line 111) | func (sm *SubagentManager) runTask(ctx context.Context, task *Subagent... method GetTask (line 212) | func (sm *SubagentManager) GetTask(taskID string) (*SubagentTask, bool) { method GetTaskCopy (line 221) | func (sm *SubagentManager) GetTaskCopy(taskID string) (SubagentTask, b... method ListTasks (line 231) | func (sm *SubagentManager) ListTasks() []*SubagentTask { method ListTaskCopies (line 244) | func (sm *SubagentManager) ListTaskCopies() []SubagentTask { function NewSubagentManager (line 39) | func NewSubagentManager( type SubagentTool (line 258) | type SubagentTool struct method Name (line 268) | func (t *SubagentTool) Name() string { method Description (line 272) | func (t *SubagentTool) Description() string { method Parameters (line 276) | func (t *SubagentTool) Parameters() map[string]any { method Execute (line 293) | func (t *SubagentTool) Execute(ctx context.Context, args map[string]an... function NewSubagentTool (line 262) | func NewSubagentTool(manager *SubagentManager) *SubagentTool { FILE: pkg/tools/subagent_tool_test.go type MockLLMProvider (line 12) | type MockLLMProvider struct method Chat (line 16) | func (m *MockLLMProvider) Chat( method GetDefaultModel (line 35) | func (m *MockLLMProvider) GetDefaultModel() string { method SupportsTools (line 39) | func (m *MockLLMProvider) SupportsTools() bool { method GetContextWindow (line 43) | func (m *MockLLMProvider) GetContextWindow() int { function TestSubagentManager_SetLLMOptions_AppliesToRunToolLoop (line 47) | func TestSubagentManager_SetLLMOptions_AppliesToRunToolLoop(t *testing.T) { function TestSubagentTool_Name (line 73) | func TestSubagentTool_Name(t *testing.T) { function TestSubagentTool_Description (line 84) | func TestSubagentTool_Description(t *testing.T) { function TestSubagentTool_Parameters (line 99) | func TestSubagentTool_Parameters(t *testing.T) { function TestSubagentTool_Execute_Success (line 149) | func TestSubagentTool_Execute_Success(t *testing.T) { function TestSubagentTool_Execute_NoLabel (line 203) | func TestSubagentTool_Execute_NoLabel(t *testing.T) { function TestSubagentTool_Execute_MissingTask (line 226) | func TestSubagentTool_Execute_MissingTask(t *testing.T) { function TestSubagentTool_Execute_NilManager (line 255) | func TestSubagentTool_Execute_NilManager(t *testing.T) { function TestSubagentTool_Execute_ContextPassing (line 276) | func TestSubagentTool_Execute_ContextPassing(t *testing.T) { function TestSubagentTool_ForUserTruncation (line 300) | func TestSubagentTool_ForUserTruncation(t *testing.T) { FILE: pkg/tools/toolloop.go type ToolLoopConfig (line 21) | type ToolLoopConfig struct type ToolLoopResult (line 30) | type ToolLoopResult struct function RunToolLoop (line 37) | func RunToolLoop( FILE: pkg/tools/types.go type Message (line 5) | type Message struct type ToolCall (line 12) | type ToolCall struct type FunctionCall (line 20) | type FunctionCall struct type LLMResponse (line 25) | type LLMResponse struct type UsageInfo (line 32) | type UsageInfo struct type LLMProvider (line 38) | type LLMProvider interface type ToolDefinition (line 49) | type ToolDefinition struct type ToolFunctionDefinition (line 54) | type ToolFunctionDefinition struct FILE: pkg/tools/web.go constant userAgent (line 25) | userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit... constant userAgentHonest (line 26) | userAgentHonest = "picoclaw/%s (+https://github.com/sipeed/picoclaw; AI ... constant searchTimeout (line 29) | searchTimeout = 10 * time.Second constant perplexityTimeout (line 30) | perplexityTimeout = 30 * time.Second constant fetchTimeout (line 31) | fetchTimeout = 60 * time.Second constant defaultMaxChars (line 33) | defaultMaxChars = 50000 constant maxRedirects (line 34) | maxRedirects = 5 type APIKeyPool (line 50) | type APIKeyPool struct method NewIterator (line 67) | func (p *APIKeyPool) NewIterator() *APIKeyIterator { function NewAPIKeyPool (line 55) | func NewAPIKeyPool(keys []string) *APIKeyPool { type APIKeyIterator (line 61) | type APIKeyIterator struct method Next (line 78) | func (it *APIKeyIterator) Next() (string, bool) { type SearchProvider (line 88) | type SearchProvider interface type BraveSearchProvider (line 92) | type BraveSearchProvider struct method Search (line 98) | func (p *BraveSearchProvider) Search(ctx context.Context, query string... type TavilySearchProvider (line 182) | type TavilySearchProvider struct method Search (line 189) | func (p *TavilySearchProvider) Search(ctx context.Context, query strin... type DuckDuckGoSearchProvider (line 287) | type DuckDuckGoSearchProvider struct method Search (line 292) | func (p *DuckDuckGoSearchProvider) Search(ctx context.Context, query s... method extractResults (line 316) | func (p *DuckDuckGoSearchProvider) extractResults(html string, count i... function stripTags (line 374) | func stripTags(content string) string { type PerplexitySearchProvider (line 378) | type PerplexitySearchProvider struct method Search (line 384) | func (p *PerplexitySearchProvider) Search(ctx context.Context, query s... type SearXNGSearchProvider (line 472) | type SearXNGSearchProvider struct method Search (line 476) | func (p *SearXNGSearchProvider) Search(ctx context.Context, query stri... type GLMSearchProvider (line 534) | type GLMSearchProvider struct method Search (line 542) | func (p *GLMSearchProvider) Search(ctx context.Context, query string, ... type WebSearchTool (line 616) | type WebSearchTool struct method Name (line 728) | func (t *WebSearchTool) Name() string { method Description (line 732) | func (t *WebSearchTool) Description() string { method Parameters (line 736) | func (t *WebSearchTool) Parameters() map[string]any { method Execute (line 755) | func (t *WebSearchTool) Execute(ctx context.Context, args map[string]a... type WebSearchToolOptions (line 621) | type WebSearchToolOptions struct function NewWebSearchTool (line 645) | func NewWebSearchTool(opts WebSearchToolOptions) (*WebSearchTool, error) { type WebFetchTool (line 779) | type WebFetchTool struct method Name (line 859) | func (t *WebFetchTool) Name() string { method Description (line 863) | func (t *WebFetchTool) Description() string { method Parameters (line 867) | func (t *WebFetchTool) Parameters() map[string]any { method Execute (line 885) | func (t *WebFetchTool) Execute(ctx context.Context, args map[string]an... method extractText (line 1076) | func (t *WebFetchTool) extractText(htmlContent string) string { type privateHostWhitelist (line 788) | type privateHostWhitelist struct method Contains (line 1184) | func (w *privateHostWhitelist) Contains(ip net.IP) bool { function NewWebFetchTool (line 793) | func NewWebFetchTool(maxChars int, format string, fetchLimitBytes int64)... function NewWebFetchToolWithProxy (line 802) | func NewWebFetchToolWithProxy( function NewWebFetchToolWithConfig (line 812) | func NewWebFetchToolWithConfig( function looksLikeHTML (line 1065) | func looksLikeHTML(body string) bool { function newSafeDialContext (line 1100) | func newSafeDialContext( function newPrivateHostWhitelist (line 1153) | func newPrivateHostWhitelist(entries []string) (*privateHostWhitelist, e... function normalizeWhitelistIP (line 1201) | func normalizeWhitelistIP(ip net.IP) net.IP { function shouldBlockPrivateIP (line 1211) | func shouldBlockPrivateIP(ip net.IP, whitelist *privateHostWhitelist) bo... function isObviousPrivateHost (line 1218) | func isObviousPrivateHost(host string, whitelist *privateHostWhitelist) ... function isPrivateOrRestrictedIP (line 1243) | func isPrivateOrRestrictedIP(ip net.IP) bool { FILE: pkg/tools/web_test.go constant testFetchLimit (line 19) | testFetchLimit = int64(10 * 1024 * 1024) constant format (line 20) | format = "plaintext" function TestWebTool_WebFetch_Success (line 24) | func TestWebTool_WebFetch_Success(t *testing.T) { function TestWebTool_WebFetch_JSON (line 63) | func TestWebTool_WebFetch_JSON(t *testing.T) { function TestWebTool_WebFetch_InvalidURL (line 100) | func TestWebTool_WebFetch_InvalidURL(t *testing.T) { function TestWebTool_WebFetch_UnsupportedScheme (line 125) | func TestWebTool_WebFetch_UnsupportedScheme(t *testing.T) { function TestWebTool_WebFetch_MissingURL (line 150) | func TestWebTool_WebFetch_MissingURL(t *testing.T) { function TestWebTool_WebFetch_Truncation (line 173) | func TestWebTool_WebFetch_Truncation(t *testing.T) { function TestWebTool_WebFetch_TruncationNotice (line 226) | func TestWebTool_WebFetch_TruncationNotice(t *testing.T) { function TestWebTool_WebFetch_NoTruncationNoticeWhenFitsInLimit (line 306) | func TestWebTool_WebFetch_NoTruncationNoticeWhenFitsInLimit(t *testing.T) { function TestWebFetchTool_PayloadTooLarge (line 343) | func TestWebFetchTool_PayloadTooLarge(t *testing.T) { function TestWebTool_WebSearch_NoApiKey (line 389) | func TestWebTool_WebSearch_NoApiKey(t *testing.T) { function TestWebTool_WebSearch_MissingQuery (line 409) | func TestWebTool_WebSearch_MissingQuery(t *testing.T) { function TestWebTool_WebFetch_HTMLExtraction (line 430) | func TestWebTool_WebFetch_HTMLExtraction(t *testing.T) { function TestWebFetchTool_extractText (line 473) | func TestWebFetchTool_extractText(t *testing.T) { function withPrivateWebFetchHostsAllowed (line 547) | func withPrivateWebFetchHostsAllowed(t *testing.T) { function serverHostAndPort (line 556) | func serverHostAndPort(t *testing.T, rawURL string) (string, string) { function singleHostCIDR (line 567) | func singleHostCIDR(t *testing.T, host string) string { function TestWebTool_WebFetch_PrivateHostBlocked (line 579) | func TestWebTool_WebFetch_PrivateHostBlocked(t *testing.T) { function TestWebTool_WebFetch_PrivateHostAllowedByExactWhitelist (line 597) | func TestWebTool_WebFetch_PrivateHostAllowedByExactWhitelist(t *testing.... function TestWebTool_WebFetch_PrivateHostAllowedByCIDRWhitelist (line 622) | func TestWebTool_WebFetch_PrivateHostAllowedByCIDRWhitelist(t *testing.T) { function TestWebTool_WebFetch_PrivateHostAllowedForTests (line 647) | func TestWebTool_WebFetch_PrivateHostAllowedForTests(t *testing.T) { function TestWebFetch_BlocksIPv4MappedIPv6Loopback (line 671) | func TestWebFetch_BlocksIPv4MappedIPv6Loopback(t *testing.T) { function TestWebFetch_BlocksMetadataIP (line 686) | func TestWebFetch_BlocksMetadataIP(t *testing.T) { function TestWebFetch_BlocksIPv6UniqueLocal (line 701) | func TestWebFetch_BlocksIPv6UniqueLocal(t *testing.T) { function TestWebFetch_Blocks6to4WithPrivateEmbed (line 716) | func TestWebFetch_Blocks6to4WithPrivateEmbed(t *testing.T) { function TestWebFetch_Allows6to4WithPublicEmbed (line 732) | func TestWebFetch_Allows6to4WithPublicEmbed(t *testing.T) { function TestWebFetch_RedirectToPrivateBlocked (line 750) | func TestWebFetch_RedirectToPrivateBlocked(t *testing.T) { function TestNewSafeDialContext_BlocksPrivateDNSResolutionWithoutWhitelist (line 776) | func TestNewSafeDialContext_BlocksPrivateDNSResolutionWithoutWhitelist(t... function TestNewSafeDialContext_AllowsWhitelistedPrivateDNSResolution (line 798) | func TestNewSafeDialContext_AllowsWhitelistedPrivateDNSResolution(t *tes... function TestIsPrivateOrRestrictedIP_Table (line 840) | func TestIsPrivateOrRestrictedIP_Table(t *testing.T) { function TestWebTool_WebFetch_MissingDomain (line 883) | func TestWebTool_WebFetch_MissingDomain(t *testing.T) { function TestNewWebFetchToolWithProxy (line 907) | func TestNewWebFetchToolWithProxy(t *testing.T) { function TestNewWebFetchToolWithConfig_InvalidPrivateHostWhitelist (line 929) | func TestNewWebFetchToolWithConfig_InvalidPrivateHostWhitelist(t *testin... function TestNewWebSearchTool_PropagatesProxy (line 939) | func TestNewWebSearchTool_PropagatesProxy(t *testing.T) { function TestWebTool_TavilySearch_Success (line 998) | func TestWebTool_TavilySearch_Success(t *testing.T) { function TestWebFetchTool_CloudflareChallenge_RetryWithHonestUA (line 1075) | func TestWebFetchTool_CloudflareChallenge_RetryWithHonestUA(t *testing.T) { function TestWebFetchTool_CloudflareChallenge_NoRetryOnOtherErrors (line 1129) | func TestWebFetchTool_CloudflareChallenge_NoRetryOnOtherErrors(t *testin... function TestWebFetchTool_CloudflareChallenge_RetryFailsToo (line 1156) | func TestWebFetchTool_CloudflareChallenge_RetryFailsToo(t *testing.T) { function TestAPIKeyPool (line 1185) | func TestAPIKeyPool(t *testing.T) { function TestWebTool_TavilySearch_Failover (line 1239) | func TestWebTool_TavilySearch_Failover(t *testing.T) { function TestWebTool_GLMSearch_Success (line 1300) | func TestWebTool_GLMSearch_Success(t *testing.T) { function TestWebTool_GLMSearch_APIError (line 1368) | func TestWebTool_GLMSearch_APIError(t *testing.T) { function TestWebTool_GLMSearch_Priority (line 1397) | func TestWebTool_GLMSearch_Priority(t *testing.T) { FILE: pkg/utils/bm25.go constant DefaultBM25K1 (line 26) | DefaultBM25K1 = 1.2 constant DefaultBM25B (line 29) | DefaultBM25B = 0.75 type BM25Engine (line 39) | type BM25Engine struct type BM25Option (line 47) | type BM25Option type bm25Config (line 49) | type bm25Config struct function WithK1 (line 55) | func WithK1(k1 float64) BM25Option { function WithB (line 60) | func WithB(b float64) BM25Option { function NewBM25Engine (line 72) | func NewBM25Engine[T any](corpus []T, textFunc func(T) string, opts ...B... type BM25Result (line 86) | type BM25Result struct method Search (line 97) | func (e *BM25Engine[T]) Search(query string, topK int) []BM25Result[T] { function bm25Tokenize (line 216) | func bm25Tokenize(s string) []string { function bm25Dedupe (line 230) | func bm25Dedupe(tokens []string) []string { type bm25ScoredDoc (line 242) | type bm25ScoredDoc struct function bm25MinHeapify (line 248) | func bm25MinHeapify(h []bm25ScoredDoc) { function bm25SiftDown (line 255) | func bm25SiftDown(h []bm25ScoredDoc, i int) { FILE: pkg/utils/bm25_test.go type testDoc (line 9) | type testDoc struct function extractText (line 14) | func extractText(d testDoc) string { function TestBM25Search_EdgeCases (line 18) | func TestBM25Search_EdgeCases(t *testing.T) { function TestBM25Search_EmptyCorpus (line 51) | func TestBM25Search_EmptyCorpus(t *testing.T) { function TestBM25Search_RankingLogic (line 59) | func TestBM25Search_RankingLogic(t *testing.T) { function TestBM25Tokenize (line 99) | func TestBM25Tokenize(t *testing.T) { function TestBM25Dedupe (line 125) | func TestBM25Dedupe(t *testing.T) { function TestBM25Options (line 135) | func TestBM25Options(t *testing.T) { function TestBM25Search_SortingStability (line 153) | func TestBM25Search_SortingStability(t *testing.T) { FILE: pkg/utils/download.go function DownloadToFile (line 26) | func DownloadToFile(ctx context.Context, client *http.Client, req *http.... FILE: pkg/utils/http_client.go function CreateHTTPClient (line 14) | func CreateHTTPClient(proxyURL string, timeout time.Duration) (*http.Cli... FILE: pkg/utils/http_client_test.go function TestCreateHTTPClient_ProxyConfigured (line 10) | func TestCreateHTTPClient_ProxyConfigured(t *testing.T) { function TestCreateHTTPClient_InvalidProxy (line 40) | func TestCreateHTTPClient_InvalidProxy(t *testing.T) { function TestCreateHTTPClient_Socks5ProxyConfigured (line 47) | func TestCreateHTTPClient_Socks5ProxyConfigured(t *testing.T) { function TestCreateHTTPClient_UnsupportedProxyScheme (line 70) | func TestCreateHTTPClient_UnsupportedProxyScheme(t *testing.T) { function TestCreateHTTPClient_ProxyFromEnvironmentWhenConfigEmpty (line 80) | func TestCreateHTTPClient_ProxyFromEnvironmentWhenConfigEmpty(t *testing... FILE: pkg/utils/http_retry.go constant maxRetries (line 10) | maxRetries = 3 function shouldRetry (line 14) | func shouldRetry(statusCode int) bool { function DoRequestWithRetry (line 19) | func DoRequestWithRetry(client *http.Client, req *http.Request) (*http.R... function sleepWithCtx (line 50) | func sleepWithCtx(ctx context.Context, d time.Duration) error { FILE: pkg/utils/http_retry_test.go function TestDoRequestWithRetry (line 16) | func TestDoRequestWithRetry(t *testing.T) { function TestDoRequestWithRetry_ContextCancel (line 83) | func TestDoRequestWithRetry_ContextCancel(t *testing.T) { type bodyCloseTracker (line 136) | type bodyCloseTracker struct method RoundTrip (line 143) | func (t *bodyCloseTracker) RoundTrip(req *http.Request) (*http.Respons... type closeNotifier (line 158) | type closeNotifier struct method Close (line 163) | func (c *closeNotifier) Close() error { function TestDoRequestWithRetry_Delay (line 168) | func TestDoRequestWithRetry_Delay(t *testing.T) { FILE: pkg/utils/markdown.go function isSafeHref (line 28) | func isSafeHref(href string) bool { function isSafeImageSrc (line 42) | func isSafeImageSrc(src string) bool { function escapeMdAlt (line 50) | func escapeMdAlt(s string) string { function getAttr (line 57) | func getAttr(n *html.Node, key string) string { function normalizeAttr (line 66) | func normalizeAttr(val string) string { function isUnlikelyNode (line 73) | func isUnlikelyNode(n *html.Node) bool { type converter (line 108) | type converter struct method write (line 124) | func (c *converter) write(s string) { method pushBuf (line 128) | func (c *converter) pushBuf() { method popBuf (line 132) | func (c *converter) popBuf() string { method walk (line 138) | func (c *converter) walk(n *html.Node) { function newConverter (line 118) | func newConverter() *converter { function HtmlToMarkdown (line 373) | func HtmlToMarkdown(htmlStr string) (string, error) { FILE: pkg/utils/markdown_test.go function TestHtmlToMarkdown (line 9) | func TestHtmlToMarkdown(t *testing.T) { FILE: pkg/utils/media.go function IsAudioFile (line 19) | func IsAudioFile(filename, contentType string) bool { function SanitizeFilename (line 40) | func SanitizeFilename(filename string) string { type DownloadOptions (line 53) | type DownloadOptions struct function DownloadFile (line 62) | func DownloadFile(urlStr, filename string, opts DownloadOptions) string { function DownloadFileSimple (line 155) | func DownloadFileSimple(url, filename string) string { FILE: pkg/utils/skills.go function ValidateSkillIdentifier (line 10) | func ValidateSkillIdentifier(identifier string) error { FILE: pkg/utils/string.go function SetDisableTruncation (line 13) | func SetDisableTruncation(enabled bool) { function SanitizeMessageContent (line 20) | func SanitizeMessageContent(input string) string { function Truncate (line 41) | func Truncate(s string, maxLen int) string { function DerefStr (line 62) | func DerefStr(s *string, fallback string) string { FILE: pkg/utils/string_test.go function TestTruncate (line 5) | func TestTruncate(t *testing.T) { function TestSanitizeMessageContent (line 108) | func TestSanitizeMessageContent(t *testing.T) { FILE: pkg/utils/zip.go function ExtractZipFile (line 18) | func ExtractZipFile(zipPath string, targetDir string) error { function extractSingleFile (line 79) | func extractSingleFile(f *zip.File, destPath string) error { FILE: pkg/voice/transcriber.go type Transcriber (line 21) | type Transcriber interface type GroqTranscriber (line 26) | type GroqTranscriber struct method Transcribe (line 51) | func (t *GroqTranscriber) Transcribe(ctx context.Context, audioFilePat... method Name (line 162) | func (t *GroqTranscriber) Name() string { type TranscriptionResponse (line 32) | type TranscriptionResponse struct function NewGroqTranscriber (line 38) | func NewGroqTranscriber(apiKey string) *GroqTranscriber { function DetectTranscriber (line 168) | func DetectTranscriber(cfg *config.Config) Transcriber { FILE: pkg/voice/transcriber_test.go function TestGroqTranscriberName (line 18) | func TestGroqTranscriberName(t *testing.T) { function TestDetectTranscriber (line 25) | func TestDetectTranscriber(t *testing.T) { function TestTranscribe (line 98) | func TestTranscribe(t *testing.T) { FILE: web/backend/api/channels.go type channelCatalogItem (line 8) | type channelCatalogItem struct method registerChannelRoutes (line 35) | func (h *Handler) registerChannelRoutes(mux *http.ServeMux) { method handleListChannelCatalog (line 42) | func (h *Handler) handleListChannelCatalog(w http.ResponseWriter, r *htt... FILE: web/backend/api/config.go method registerConfigRoutes (line 14) | func (h *Handler) registerConfigRoutes(mux *http.ServeMux) { method handleGetConfig (line 23) | func (h *Handler) handleGetConfig(w http.ResponseWriter, r *http.Request) { method handleUpdateConfig (line 39) | func (h *Handler) handleUpdateConfig(w http.ResponseWriter, r *http.Requ... function execAllowRemoteOmitted (line 75) | func execAllowRemoteOmitted(body []byte) bool { method handlePatchConfig (line 93) | func (h *Handler) handlePatchConfig(w http.ResponseWriter, r *http.Reque... function validateConfig (line 164) | func validateConfig(cfg *config.Config) []string { function validateRegexPatterns (line 206) | func validateRegexPatterns(field string, patterns []string) []string { function mergeMap (line 220) | func mergeMap(dst, src map[string]any) { FILE: web/backend/api/config_test.go function TestHandleUpdateConfig_PreservesExecAllowRemoteDefaultWhenOmitted (line 12) | func TestHandleUpdateConfig_PreservesExecAllowRemoteDefaultWhenOmitted(t... function TestHandleUpdateConfig_DoesNotInheritDefaultModelFields (line 51) | func TestHandleUpdateConfig_DoesNotInheritDefaultModelFields(t *testing.... function TestHandlePatchConfig_RejectsInvalidExecRegexPatterns (line 90) | func TestHandlePatchConfig_RejectsInvalidExecRegexPatterns(t *testing.T) { function TestHandlePatchConfig_AllowsInvalidExecRegexPatternsWhenExecDisabled (line 117) | func TestHandlePatchConfig_AllowsInvalidExecRegexPatternsWhenExecDisable... function TestHandlePatchConfig_AllowsInvalidDenyRegexPatternsWhenDenyPatternsDisabled (line 143) | func TestHandlePatchConfig_AllowsInvalidDenyRegexPatternsWhenDenyPattern... FILE: web/backend/api/gateway.go method getGatewayHealth (line 54) | func (h *Handler) getGatewayHealth(cfg *config.Config, timeout time.Dura... function getGatewayHealthByURL (line 66) | func getGatewayHealthByURL(url string, timeout time.Duration) (*health.S... method registerGatewayRoutes (line 82) | func (h *Handler) registerGatewayRoutes(mux *http.ServeMux) { method TryAutoStartGateway (line 93) | func (h *Handler) TryAutoStartGateway() { method gatewayStartReady (line 146) | func (h *Handler) gatewayStartReady() (bool, string, error) { function lookupModelConfig (line 172) | func lookupModelConfig(cfg *config.Config, modelName string) *config.Mod... function gatewayRestartRequired (line 180) | func gatewayRestartRequired(configDefaultModel, bootDefaultModel, gatewa... function isCmdProcessAliveLocked (line 190) | func isCmdProcessAliveLocked(cmd *exec.Cmd) bool { function setGatewayRuntimeStatusLocked (line 209) | func setGatewayRuntimeStatusLocked(status string) { function attachToGatewayProcessLocked (line 221) | func attachToGatewayProcessLocked(pid int, cfg *config.Config) error { function gatewayStatusWithoutHealthLocked (line 241) | func gatewayStatusWithoutHealthLocked() string { function waitForGatewayProcessExit (line 257) | func waitForGatewayProcessExit(cmd *exec.Cmd, timeout time.Duration) bool { method StopGateway (line 278) | func (h *Handler) StopGateway() { function stopGatewayLocked (line 299) | func stopGatewayLocked() (int, error) { function stopGatewayProcessForRestart (line 327) | func stopGatewayProcessForRestart(cmd *exec.Cmd) error { method startGatewayLocked (line 359) | func (h *Handler) startGatewayLocked(initialStatus string, existingPid i... method handleGatewayStart (line 482) | func (h *Handler) handleGatewayStart(w http.ResponseWriter, r *http.Requ... method handleGatewayStop (line 573) | func (h *Handler) handleGatewayStop(w http.ResponseWriter, r *http.Reque... method RestartGateway (line 601) | func (h *Handler) RestartGateway() (int, error) { type preconditionFailedError (line 650) | type preconditionFailedError struct method Error (line 654) | func (e *preconditionFailedError) Error() string { method IsBadRequest (line 659) | func (e *preconditionFailedError) IsBadRequest() bool { method handleGatewayRestart (line 666) | func (h *Handler) handleGatewayRestart(w http.ResponseWriter, r *http.Re... method handleGatewayClearLogs (line 694) | func (h *Handler) handleGatewayClearLogs(w http.ResponseWriter, r *http.... method handleGatewayStatus (line 708) | func (h *Handler) handleGatewayStatus(w http.ResponseWriter, r *http.Req... method gatewayStatusData (line 714) | func (h *Handler) gatewayStatusData() map[string]any { method handleGatewayLogs (line 812) | func (h *Handler) handleGatewayLogs(w http.ResponseWriter, r *http.Reque... function gatewayLogsData (line 820) | func gatewayLogsData(r *http.Request) map[string]any { function scanPipe (line 864) | func scanPipe(r io.Reader, buf *LogBuffer) { FILE: web/backend/api/gateway_host.go method effectiveLauncherPublic (line 13) | func (h *Handler) effectiveLauncherPublic() bool { method gatewayHostOverride (line 26) | func (h *Handler) gatewayHostOverride() string { method effectiveGatewayBindHost (line 33) | func (h *Handler) effectiveGatewayBindHost(cfg *config.Config) string { function gatewayProbeHost (line 43) | func gatewayProbeHost(bindHost string) string { method gatewayProxyURL (line 50) | func (h *Handler) gatewayProxyURL() *url.URL { function requestHostName (line 67) | func requestHostName(r *http.Request) string { function requestWSScheme (line 78) | func requestWSScheme(r *http.Request) string { method buildWsURL (line 96) | func (h *Handler) buildWsURL(r *http.Request, cfg *config.Config) string { FILE: web/backend/api/gateway_host_test.go function TestGatewayHostOverrideUsesExplicitRuntimePublic (line 16) | func TestGatewayHostOverrideUsesExplicitRuntimePublic(t *testing.T) { function TestBuildWsURLUsesRequestHostWhenLauncherPublicSaved (line 34) | func TestBuildWsURLUsesRequestHostWhenLauncherPublicSaved(t *testing.T) { function TestGatewayProbeHostUsesLoopbackForWildcardBind (line 59) | func TestGatewayProbeHostUsesLoopbackForWildcardBind(t *testing.T) { function TestGatewayProxyURLUsesConfiguredHost (line 65) | func TestGatewayProxyURLUsesConfiguredHost(t *testing.T) { function TestGetGatewayHealthUsesConfiguredHost (line 81) | func TestGetGatewayHealthUsesConfiguredHost(t *testing.T) { function TestGetGatewayHealthUsesProbeHostForPublicLauncher (line 109) | func TestGetGatewayHealthUsesProbeHostForPublicLauncher(t *testing.T) { function TestBuildWsURLUsesWSSWhenForwardedProtoIsHTTPS (line 138) | func TestBuildWsURLUsesWSSWhenForwardedProtoIsHTTPS(t *testing.T) { function TestBuildWsURLUsesWSSWhenRequestIsTLS (line 155) | func TestBuildWsURLUsesWSSWhenRequestIsTLS(t *testing.T) { function TestBuildWsURLPrefersForwardedHTTPOverTLS (line 172) | func TestBuildWsURLPrefersForwardedHTTPOverTLS(t *testing.T) { FILE: web/backend/api/gateway_test.go function startLongRunningProcess (line 23) | func startLongRunningProcess(t *testing.T) *exec.Cmd { function mockGatewayHealthResponse (line 40) | func mockGatewayHealthResponse(statusCode, pid int) *http.Response { function startIgnoringTermProcess (line 49) | func startIgnoringTermProcess(t *testing.T) *exec.Cmd { function resetGatewayTestState (line 64) | func resetGatewayTestState(t *testing.T) { function TestGatewayStartReady_NoDefaultModel (line 85) | func TestGatewayStartReady_NoDefaultModel(t *testing.T) { function TestGatewayStartReady_InvalidDefaultModel (line 101) | func TestGatewayStartReady_InvalidDefaultModel(t *testing.T) { function TestGatewayStartReady_ValidDefaultModel (line 123) | func TestGatewayStartReady_ValidDefaultModel(t *testing.T) { function TestGatewayStartReady_DefaultModelWithoutCredential (line 143) | func TestGatewayStartReady_DefaultModelWithoutCredential(t *testing.T) { function TestGatewayStartReady_LocalModelWithoutAPIKey (line 167) | func TestGatewayStartReady_LocalModelWithoutAPIKey(t *testing.T) { function TestGatewayStartReady_LocalModelWithRunningService (line 204) | func TestGatewayStartReady_LocalModelWithRunningService(t *testing.T) { function TestGatewayStartReady_RemoteVLLMWithAPIKeyDoesNotProbe (line 238) | func TestGatewayStartReady_RemoteVLLMWithAPIKeyDoesNotProbe(t *testing.T) { function TestGatewayStartReady_LocalOllamaUsesDefaultProbeBase (line 274) | func TestGatewayStartReady_LocalOllamaUsesDefaultProbeBase(t *testing.T) { function TestGatewayStartReady_OAuthModelRequiresStoredCredential (line 307) | func TestGatewayStartReady_OAuthModelRequiresStoredCredential(t *testing... function TestGatewayStatusIncludesStartConditionWhenNotReady (line 356) | func TestGatewayStatusIncludesStartConditionWhenNotReady(t *testing.T) { function TestGatewayStatusKeepsRunningWhenHealthProbeFailsAfterRunning (line 387) | func TestGatewayStatusKeepsRunningWhenHealthProbeFailsAfterRunning(t *te... function TestGatewayStatusReportsRunningFromHealthProbe (line 432) | func TestGatewayStatusReportsRunningFromHealthProbe(t *testing.T) { function TestGatewayStatusRequiresRestartAfterDefaultModelChange (line 480) | func TestGatewayStatusRequiresRestartAfterDefaultModelChange(t *testing.... function TestGatewayStatusReturnsErrorAfterStartupWindowExpires (line 551) | func TestGatewayStatusReturnsErrorAfterStartupWindowExpires(t *testing.T) { function TestGatewayStatusReturnsRestartingDuringRestartGap (line 596) | func TestGatewayStatusReturnsRestartingDuringRestartGap(t *testing.T) { function TestGatewayRestartKeepsRunningProcessWhenPreconditionsFail (line 626) | func TestGatewayRestartKeepsRunningProcessWhenPreconditionsFail(t *testi... function TestGatewayRestartKeepsOldProcessWhenItDoesNotExitInTime (line 677) | func TestGatewayRestartKeepsOldProcessWhenItDoesNotExitInTime(t *testing... function TestGatewayRestartReturnsErrorStatusWhenReplacementFailsToStart (line 738) | func TestGatewayRestartReturnsErrorStatusWhenReplacementFailsToStart(t *... function TestGatewayStatusExcludesLogsFields (line 785) | func TestGatewayStatusExcludesLogsFields(t *testing.T) { function TestGatewayLogsReturnsIncrementalHistory (line 815) | func TestGatewayLogsReturnsIncrementalHistory(t *testing.T) { function TestGatewayClearLogsResetsBufferedHistory (line 858) | func TestGatewayClearLogsResetsBufferedHistory(t *testing.T) { function TestFindPicoclawBinary_EnvOverride (line 926) | func TestFindPicoclawBinary_EnvOverride(t *testing.T) { function TestFindPicoclawBinary_EnvOverride_InvalidPath (line 942) | func TestFindPicoclawBinary_EnvOverride_InvalidPath(t *testing.T) { FILE: web/backend/api/launcher_config.go type launcherConfigPayload (line 11) | type launcherConfigPayload struct method registerLauncherConfigRoutes (line 17) | func (h *Handler) registerLauncherConfigRoutes(mux *http.ServeMux) { method launcherConfigPath (line 22) | func (h *Handler) launcherConfigPath() string { method launcherFallbackConfig (line 26) | func (h *Handler) launcherFallbackConfig() launcherconfig.Config { method loadLauncherConfig (line 38) | func (h *Handler) loadLauncherConfig() (launcherconfig.Config, error) { method handleGetLauncherConfig (line 42) | func (h *Handler) handleGetLauncherConfig(w http.ResponseWriter, r *http... method handleUpdateLauncherConfig (line 57) | func (h *Handler) handleUpdateLauncherConfig(w http.ResponseWriter, r *h... FILE: web/backend/api/launcher_config_test.go function TestGetLauncherConfigUsesRuntimeFallback (line 14) | func TestGetLauncherConfigUsesRuntimeFallback(t *testing.T) { function TestPutLauncherConfigPersists (line 42) | func TestPutLauncherConfigPersists(t *testing.T) { function TestPutLauncherConfigRejectsInvalidPort (line 75) | func TestPutLauncherConfigRejectsInvalidPort(t *testing.T) { function TestPutLauncherConfigRejectsInvalidCIDR (line 96) | func TestPutLauncherConfigRejectsInvalidCIDR(t *testing.T) { FILE: web/backend/api/log.go type LogBuffer (line 8) | type LogBuffer struct method Append (line 25) | func (b *LogBuffer) Append(line string) { method Reset (line 39) | func (b *LogBuffer) Reset() { method Clear (line 50) | func (b *LogBuffer) Clear() { method LinesSince (line 56) | func (b *LogBuffer) LinesSince(offset int) (lines []string, total int,... method RunID (line 92) | func (b *LogBuffer) RunID() int { function NewLogBuffer (line 17) | func NewLogBuffer(capacity int) *LogBuffer { FILE: web/backend/api/model_status.go constant modelProbeTimeout (line 15) | modelProbeTimeout = 800 * time.Millisecond function hasModelConfiguration (line 23) | func hasModelConfiguration(m config.ModelConfig) bool { function isModelConfigured (line 47) | func isModelConfigured(m config.ModelConfig) bool { function requiresRuntimeProbe (line 57) | func requiresRuntimeProbe(m config.ModelConfig) bool { function probeLocalModelAvailability (line 78) | func probeLocalModelAvailability(m config.ModelConfig) bool { function modelProbeAPIBase (line 98) | func modelProbeAPIBase(m config.ModelConfig) string { function normalizeModelProbeAPIBase (line 115) | func normalizeModelProbeAPIBase(raw string) string { function oauthProviderForModel (line 137) | func oauthProviderForModel(model string) (string, bool) { function modelProtocol (line 150) | func modelProtocol(model string) string { function splitModel (line 155) | func splitModel(model string) (protocol, modelID string) { function hasLocalAPIBase (line 164) | func hasLocalAPIBase(raw string) bool { function probeTCPService (line 186) | func probeTCPService(raw string) bool { function probeOllamaModel (line 200) | func probeOllamaModel(apiBase, modelID string) bool { function probeOpenAICompatibleModel (line 224) | func probeOpenAICompatibleModel(apiBase, modelID string) bool { function getJSON (line 246) | func getJSON(rawURL string, out any) error { function apiRootFromAPIBase (line 266) | func apiRootFromAPIBase(raw string) (string, error) { function hostPortFromAPIBase (line 274) | func hostPortFromAPIBase(raw string) (string, error) { function parseAPIBase (line 291) | func parseAPIBase(raw string) (*url.URL, error) { function ollamaModelMatches (line 312) | func ollamaModelMatches(candidate, want string) bool { FILE: web/backend/api/models.go method registerModelRoutes (line 15) | func (h *Handler) registerModelRoutes(mux *http.ServeMux) { type modelResponse (line 25) | type modelResponse struct method handleListModels (line 48) | func (h *Handler) handleListModels(w http.ResponseWriter, r *http.Reques... method handleAddModel (line 100) | func (h *Handler) handleAddModel(w http.ResponseWriter, r *http.Request) { method handleUpdateModel (line 145) | func (h *Handler) handleUpdateModel(w http.ResponseWriter, r *http.Reque... method handleDeleteModel (line 201) | func (h *Handler) handleDeleteModel(w http.ResponseWriter, r *http.Reque... method handleSetDefaultModel (line 243) | func (h *Handler) handleSetDefaultModel(w http.ResponseWriter, r *http.R... function maskAPIKey (line 301) | func maskAPIKey(key string) string { FILE: web/backend/api/models_test.go function resetModelProbeHooks (line 15) | func resetModelProbeHooks(t *testing.T) { function TestHandleListModels_ConfiguredStatusUsesRuntimeProbesForLocalModels (line 28) | func TestHandleListModels_ConfiguredStatusUsesRuntimeProbesForLocalModel... function TestHandleListModels_ConfiguredStatusForOAuthModelWithCredential (line 145) | func TestHandleListModels_ConfiguredStatusForOAuthModelWithCredential(t ... function TestHandleListModels_ProbesLocalModelsConcurrently (line 199) | func TestHandleListModels_ProbesLocalModelsConcurrently(t *testing.T) { function TestHandleListModels_NormalizesWildcardLocalAPIBaseForProbe (line 261) | func TestHandleListModels_NormalizesWildcardLocalAPIBaseForProbe(t *test... FILE: web/backend/api/oauth.go constant oauthProviderOpenAI (line 21) | oauthProviderOpenAI = "openai" constant oauthProviderAnthropic (line 22) | oauthProviderAnthropic = "anthropic" constant oauthProviderGoogleAntigravity (line 23) | oauthProviderGoogleAntigravity = "google-antigravity" constant oauthMethodBrowser (line 25) | oauthMethodBrowser = "browser" constant oauthMethodDeviceCode (line 26) | oauthMethodDeviceCode = "device_code" constant oauthMethodToken (line 27) | oauthMethodToken = "token" constant oauthFlowPending (line 29) | oauthFlowPending = "pending" constant oauthFlowSuccess (line 30) | oauthFlowSuccess = "success" constant oauthFlowError (line 31) | oauthFlowError = "error" constant oauthFlowExpired (line 32) | oauthFlowExpired = "expired" constant oauthBrowserFlowTTL (line 36) | oauthBrowserFlowTTL = 10 * time.Minute constant oauthDeviceCodeFlowTTL (line 37) | oauthDeviceCodeFlowTTL = 15 * time.Minute constant oauthTerminalFlowGC (line 38) | oauthTerminalFlowGC = 30 * time.Minute type oauthFlow (line 76) | type oauthFlow struct type oauthProviderStatus (line 94) | type oauthProviderStatus struct type oauthFlowResponse (line 107) | type oauthFlowResponse struct method registerOAuthRoutes (line 120) | func (h *Handler) registerOAuthRoutes(mux *http.ServeMux) { method handleListOAuthProviders (line 129) | func (h *Handler) handleListOAuthProviders(w http.ResponseWriter, r *htt... method handleOAuthLogin (line 173) | func (h *Handler) handleOAuthLogin(w http.ResponseWriter, r *http.Reques... method handleGetOAuthFlow (line 321) | func (h *Handler) handleGetOAuthFlow(w http.ResponseWriter, r *http.Requ... method handlePollOAuthFlow (line 338) | func (h *Handler) handlePollOAuthFlow(w http.ResponseWriter, r *http.Req... method handleOAuthCallback (line 397) | func (h *Handler) handleOAuthCallback(w http.ResponseWriter, r *http.Req... method handleOAuthLogout (line 455) | func (h *Handler) handleOAuthLogout(w http.ResponseWriter, r *http.Reque... function renderOAuthCallbackPage (line 493) | func renderOAuthCallbackPage(w http.ResponseWriter, flowID, status, titl... function normalizeOAuthProvider (line 525) | func normalizeOAuthProvider(raw string) (string, error) { function isOAuthMethodSupported (line 537) | func isOAuthMethodSupported(provider, method string) bool { function oauthConfigForProvider (line 547) | func oauthConfigForProvider(provider string) (auth.OAuthProviderConfig, ... function oauthMethodTokenOrOAuth (line 558) | func oauthMethodTokenOrOAuth(method string) string { function buildOAuthRedirectURI (line 565) | func buildOAuthRedirectURI(r *http.Request) string { function flowToResponse (line 576) | func flowToResponse(flow *oauthFlow) oauthFlowResponse { function newOAuthFlowID (line 595) | func newOAuthFlowID() string { method storeOAuthFlow (line 603) | func (h *Handler) storeOAuthFlow(flow *oauthFlow) { method getOAuthFlow (line 615) | func (h *Handler) getOAuthFlow(flowID string) (*oauthFlow, bool) { method getOAuthFlowByState (line 629) | func (h *Handler) getOAuthFlowByState(state string) (*oauthFlow, bool) { method setOAuthFlowSuccess (line 648) | func (h *Handler) setOAuthFlowSuccess(flowID string) { method setOAuthFlowError (line 665) | func (h *Handler) setOAuthFlowError(flowID, errMsg string) { method gcOAuthFlowsLocked (line 682) | func (h *Handler) gcOAuthFlowsLocked(now time.Time) { method persistCredentialAndConfig (line 702) | func (h *Handler) persistCredentialAndConfig(provider, authMethod string... method syncProviderAuthMethod (line 741) | func (h *Handler) syncProviderAuthMethod(provider, authMethod string) er... function modelBelongsToProvider (line 773) | func modelBelongsToProvider(provider, model string) bool { function defaultModelConfigForProvider (line 790) | func defaultModelConfigForProvider(provider, authMethod string) config.M... function fetchGoogleUserEmail (line 815) | func fetchGoogleUserEmail(accessToken string) (string, error) { FILE: web/backend/api/oauth_test.go function TestOAuthLoginRejectsUnsupportedMethod (line 18) | func TestOAuthLoginRejectsUnsupportedMethod(t *testing.T) { function TestOAuthBrowserFlowCreatedAndQueried (line 41) | func TestOAuthBrowserFlowCreatedAndQueried(t *testing.T) { function TestOAuthFlowExpiresWhenQueried (line 102) | func TestOAuthFlowExpiresWhenQueried(t *testing.T) { function TestOAuthCallbackUnknownState (line 139) | func TestOAuthCallbackUnknownState(t *testing.T) { function TestOAuthLogoutClearsCredentialAndConfig (line 160) | func TestOAuthLogoutClearsCredentialAndConfig(t *testing.T) { function setupOAuthTestEnv (line 221) | func setupOAuthTestEnv(t *testing.T) (string, func()) { function resetOAuthHooks (line 259) | func resetOAuthHooks(t *testing.T) { FILE: web/backend/api/pico.go method registerPicoRoutes (line 16) | func (h *Handler) registerPicoRoutes(mux *http.ServeMux) { method createWsProxy (line 29) | func (h *Handler) createWsProxy() *httputil.ReverseProxy { method handleWebSocketProxy (line 39) | func (h *Handler) handleWebSocketProxy() http.HandlerFunc { method handleGetPicoToken (line 49) | func (h *Handler) handleGetPicoToken(w http.ResponseWriter, r *http.Requ... method handleRegenPicoToken (line 69) | func (h *Handler) handleRegenPicoToken(w http.ResponseWriter, r *http.Re... method ensurePicoChannel (line 100) | func (h *Handler) ensurePicoChannel(callerOrigin string) (bool, error) { method handlePicoSetup (line 136) | func (h *Handler) handlePicoSetup(w http.ResponseWriter, r *http.Request) { function generateSecureToken (line 161) | func generateSecureToken() string { FILE: web/backend/api/pico_test.go function TestEnsurePicoChannel_FreshConfig (line 16) | func TestEnsurePicoChannel_FreshConfig(t *testing.T) { function TestEnsurePicoChannel_DoesNotEnableTokenQuery (line 41) | func TestEnsurePicoChannel_DoesNotEnableTokenQuery(t *testing.T) { function TestEnsurePicoChannel_DoesNotSetWildcardOrigins (line 59) | func TestEnsurePicoChannel_DoesNotSetWildcardOrigins(t *testing.T) { function TestEnsurePicoChannel_NoOriginWithoutCaller (line 79) | func TestEnsurePicoChannel_NoOriginWithoutCaller(t *testing.T) { function TestEnsurePicoChannel_SetsCallerOrigin (line 99) | func TestEnsurePicoChannel_SetsCallerOrigin(t *testing.T) { function TestEnsurePicoChannel_PreservesUserSettings (line 118) | func TestEnsurePicoChannel_PreservesUserSettings(t *testing.T) { function TestEnsurePicoChannel_Idempotent (line 157) | func TestEnsurePicoChannel_Idempotent(t *testing.T) { function TestHandlePicoSetup_IncludesRequestOrigin (line 186) | func TestHandlePicoSetup_IncludesRequestOrigin(t *testing.T) { function TestHandlePicoSetup_Response (line 210) | func TestHandlePicoSetup_Response(t *testing.T) { function TestHandleWebSocketProxyReloadsGatewayTargetFromConfig (line 242) | func TestHandleWebSocketProxyReloadsGatewayTargetFromConfig(t *testing.T) { function mustGatewayTestPort (line 300) | func mustGatewayTestPort(t *testing.T, rawURL string) int { FILE: web/backend/api/router.go type Handler (line 11) | type Handler struct method SetServerOptions (line 33) | func (h *Handler) SetServerOptions(port int, public bool, publicExplic... method RegisterRoutes (line 41) | func (h *Handler) RegisterRoutes(mux *http.ServeMux) { method Shutdown (line 75) | func (h *Handler) Shutdown() { function NewHandler (line 23) | func NewHandler(configPath string) *Handler { FILE: web/backend/api/session.go method registerSessionRoutes (line 20) | func (h *Handler) registerSessionRoutes(mux *http.ServeMux) { type sessionFile (line 27) | type sessionFile struct type sessionListItem (line 36) | type sessionListItem struct type sessionMetaFile (line 45) | type sessionMetaFile struct constant picoSessionPrefix (line 63) | picoSessionPrefix = "agent:main:pico:direct:pico:" constant sanitizedPicoSessionPrefix (line 64) | sanitizedPicoSessionPrefix = "agent_main_pico_direct_pico_" constant maxSessionJSONLLineSize (line 65) | maxSessionJSONLLineSize = 10 * 1024 * 1024 constant maxSessionTitleRunes (line 66) | maxSessionTitleRunes = 60 function extractPicoSessionID (line 71) | func extractPicoSessionID(key string) (string, bool) { function extractPicoSessionIDFromSanitizedKey (line 78) | func extractPicoSessionIDFromSanitizedKey(key string) (string, bool) { function sanitizeSessionKey (line 85) | func sanitizeSessionKey(key string) string { method readLegacySession (line 89) | func (h *Handler) readLegacySession(dir, sessionID string) (sessionFile,... method readSessionMeta (line 103) | func (h *Handler) readSessionMeta(path, sessionKey string) (sessionMetaF... method readSessionMessages (line 122) | func (h *Handler) readSessionMessages(path string, skip int) ([]provider... method readJSONLSession (line 157) | func (h *Handler) readJSONLSession(dir, sessionID string) (sessionFile, ... function buildSessionListItem (line 195) | func buildSessionListItem(sessionID string, sess sessionFile) sessionLis... function isEmptySession (line 235) | func isEmptySession(sess sessionFile) bool { function truncateRunes (line 239) | func truncateRunes(s string, maxLen int) string { method sessionsDir (line 252) | func (h *Handler) sessionsDir() (string, error) { method handleListSessions (line 280) | func (h *Handler) handleListSessions(w http.ResponseWriter, r *http.Requ... method handleGetSession (line 406) | func (h *Handler) handleGetSession(w http.ResponseWriter, r *http.Reques... method handleDeleteSession (line 470) | func (h *Handler) handleDeleteSession(w http.ResponseWriter, r *http.Req... FILE: web/backend/api/session_test.go function sessionsTestDir (line 17) | func sessionsTestDir(t *testing.T, configPath string) string { function TestHandleListSessions_JSONLStorage (line 32) | func TestHandleListSessions_JSONLStorage(t *testing.T) { function TestHandleListSessions_TitleUsesTrimmedSummary (line 98) | func TestHandleListSessions_TitleUsesTrimmedSummary(t *testing.T) { function TestHandleGetSession_JSONLStorage (line 154) | func TestHandleGetSession_JSONLStorage(t *testing.T) { function TestHandleDeleteSession_JSONLStorage (line 218) | func TestHandleDeleteSession_JSONLStorage(t *testing.T) { function TestHandleGetSession_LegacyJSONFallback (line 259) | func TestHandleGetSession_LegacyJSONFallback(t *testing.T) { function TestHandleSessions_FiltersEmptyJSONLFiles (line 285) | func TestHandleSessions_FiltersEmptyJSONLFiles(t *testing.T) { FILE: web/backend/api/skills.go type skillSupportResponse (line 17) | type skillSupportResponse struct type skillDetailResponse (line 21) | type skillDetailResponse struct method registerSkillRoutes (line 35) | func (h *Handler) registerSkillRoutes(mux *http.ServeMux) { method handleListSkills (line 42) | func (h *Handler) handleListSkills(w http.ResponseWriter, r *http.Reques... method handleGetSkill (line 57) | func (h *Handler) handleGetSkill(w http.ResponseWriter, r *http.Request) { method handleImportSkill (line 93) | func (h *Handler) handleImportSkill(w http.ResponseWriter, r *http.Reque... method handleDeleteSkill (line 163) | func (h *Handler) handleDeleteSkill(w http.ResponseWriter, r *http.Reque... function newSkillsLoader (line 192) | func newSkillsLoader(workspace string) *skills.SkillsLoader { function normalizeImportedSkillName (line 200) | func normalizeImportedSkillName(filename string, content []byte) (string... function normalizeImportedSkillContent (line 229) | func normalizeImportedSkillContent(content []byte, skillName string) []b... function extractImportedSkillMetadata (line 262) | func extractImportedSkillMetadata(raw string) (map[string]string, string) { function parseImportedSkillYAML (line 272) | func parseImportedSkillYAML(frontmatter string) map[string]string { function inferImportedSkillDescription (line 288) | func inferImportedSkillDescription(body string) string { function loadSkillContent (line 303) | func loadSkillContent(path string) (string, error) { function globalConfigDir (line 311) | func globalConfigDir() string { function builtinSkillsDir (line 322) | func builtinSkillsDir() string { FILE: web/backend/api/skills_test.go function TestHandleListSkills (line 17) | func TestHandleListSkills(t *testing.T) { function TestHandleGetSkill (line 116) | func TestHandleGetSkill(t *testing.T) { function TestHandleGetSkillUsesResolvedPath (line 170) | func TestHandleGetSkillUsesResolvedPath(t *testing.T) { function TestHandleImportSkill (line 222) | func TestHandleImportSkill(t *testing.T) { function TestHandleDeleteSkill (line 296) | func TestHandleDeleteSkill(t *testing.T) { FILE: web/backend/api/startup.go constant autoStartEntryName (line 17) | autoStartEntryName = "PicoClawLauncher" constant launchAgentLabel (line 18) | launchAgentLabel = "io.picoclaw.launcher" type autoStartRequest (line 21) | type autoStartRequest struct type autoStartResponse (line 25) | type autoStartResponse struct method registerStartupRoutes (line 34) | func (h *Handler) registerStartupRoutes(mux *http.ServeMux) { method handleGetAutoStart (line 39) | func (h *Handler) handleGetAutoStart(w http.ResponseWriter, r *http.Requ... method handleSetAutoStart (line 55) | func (h *Handler) handleSetAutoStart(w http.ResponseWriter, r *http.Requ... method resolveLaunchCommand (line 86) | func (h *Handler) resolveLaunchCommand() (string, []string, error) { method getAutoStartStatus (line 100) | func (h *Handler) getAutoStartStatus() (enabled bool, supported bool, me... method setAutoStart (line 116) | func (h *Handler) setAutoStart(enabled bool) error { function fileExists (line 134) | func fileExists(path string) (bool, error) { function macLaunchAgentPath (line 145) | func macLaunchAgentPath() string { function setDarwinAutoStart (line 150) | func setDarwinAutoStart(enabled bool, exePath string, args []string) err... function xmlEscape (line 166) | func xmlEscape(s string) string { function buildDarwinPlist (line 187) | func buildDarwinPlist(exePath string, args []string) string { function linuxAutoStartPath (line 216) | func linuxAutoStartPath() string { function shellQuote (line 221) | func shellQuote(s string) string { function buildLinuxExecLine (line 231) | func buildLinuxExecLine(exePath string, args []string) string { function setLinuxAutoStart (line 240) | func setLinuxAutoStart(enabled bool, exePath string, args []string) error { function windowsCommandLine (line 267) | func windowsCommandLine(exePath string, args []string) string { function windowsRunKeyExists (line 276) | func windowsRunKeyExists() (bool, error) { function setWindowsAutoStart (line 288) | func setWindowsAutoStart(enabled bool, exePath string, args []string) er... FILE: web/backend/api/startup_test.go function TestResolveLaunchCommandUsesConfigFileDefaults (line 11) | func TestResolveLaunchCommandUsesConfigFileDefaults(t *testing.T) { function TestBuildDarwinPlistIncludesRunAtLoad (line 48) | func TestBuildDarwinPlistIncludesRunAtLoad(t *testing.T) { FILE: web/backend/api/tools.go type toolCatalogEntry (line 12) | type toolCatalogEntry struct type toolSupportItem (line 19) | type toolSupportItem struct type toolSupportResponse (line 28) | type toolSupportResponse struct type toolStateRequest (line 32) | type toolStateRequest struct method registerToolRoutes (line 153) | func (h *Handler) registerToolRoutes(mux *http.ServeMux) { method handleListTools (line 158) | func (h *Handler) handleListTools(w http.ResponseWriter, r *http.Request) { method handleUpdateToolState (line 171) | func (h *Handler) handleUpdateToolState(w http.ResponseWriter, r *http.R... function buildToolSupport (line 198) | func buildToolSupport(cfg *config.Config) []toolSupportItem { function resolveHardwareToolSupport (line 247) | func resolveHardwareToolSupport(enabled bool) (string, string) { function resolveDiscoveryToolSupport (line 257) | func resolveDiscoveryToolSupport(cfg *config.Config, methodEnabled bool)... function applyToolState (line 270) | func applyToolState(cfg *config.Config, toolName string, enabled bool) e... FILE: web/backend/api/tools_test.go function TestHandleListTools (line 14) | func TestHandleListTools(t *testing.T) { function TestHandleUpdateToolState (line 126) | func TestHandleUpdateToolState(t *testing.T) { FILE: web/backend/app_runtime.go constant browserDelay (line 14) | browserDelay = 500 * time.Millisecond constant shutdownTimeout (line 15) | shutdownTimeout = 15 * time.Second function shutdownApp (line 31) | func shutdownApp() { function openBrowser (line 57) | func openBrowser() error { FILE: web/backend/embed.go function registerEmbedRoutes (line 19) | func registerEmbedRoutes(mux *http.ServeMux) { FILE: web/backend/embed_test.go function TestUnknownAPIPathStays404 (line 9) | func TestUnknownAPIPathStays404(t *testing.T) { function TestMissingAssetStays404 (line 22) | func TestMissingAssetStays404(t *testing.T) { FILE: web/backend/i18n.go type Language (line 10) | type Language constant LanguageEnglish (line 13) | LanguageEnglish Language = "en" constant LanguageChinese (line 14) | LanguageChinese Language = "zh" type TranslationKey (line 21) | type TranslationKey constant AppTooltip (line 24) | AppTooltip TranslationKey = "AppTooltip" constant MenuOpen (line 25) | MenuOpen TranslationKey = "MenuOpen" constant MenuOpenTooltip (line 26) | MenuOpenTooltip TranslationKey = "MenuOpenTooltip" constant MenuAbout (line 27) | MenuAbout TranslationKey = "MenuAbout" constant MenuAboutTooltip (line 28) | MenuAboutTooltip TranslationKey = "MenuAboutTooltip" constant MenuVersion (line 29) | MenuVersion TranslationKey = "MenuVersion" constant MenuVersionTooltip (line 30) | MenuVersionTooltip TranslationKey = "MenuVersionTooltip" constant MenuGitHub (line 31) | MenuGitHub TranslationKey = "MenuGitHub" constant MenuDocs (line 32) | MenuDocs TranslationKey = "MenuDocs" constant MenuRestart (line 33) | MenuRestart TranslationKey = "MenuRestart" constant MenuRestartTooltip (line 34) | MenuRestartTooltip TranslationKey = "MenuRestartTooltip" constant MenuQuit (line 35) | MenuQuit TranslationKey = "MenuQuit" constant MenuQuitTooltip (line 36) | MenuQuitTooltip TranslationKey = "MenuQuitTooltip" constant Exiting (line 37) | Exiting TranslationKey = "Exiting" constant DocUrl (line 38) | DocUrl TranslationKey = "DocUrl" function SetLanguage (line 83) | func SetLanguage(lang string) { function GetLanguage (line 100) | func GetLanguage() Language { function T (line 105) | func T(key TranslationKey, args ...any) string { function init (line 116) | func init() { FILE: web/backend/launcherconfig/config.go constant FileName (line 14) | FileName = "launcher-config.json" constant DefaultPort (line 16) | DefaultPort = 18800 type Config (line 20) | type Config struct function Default (line 27) | func Default() Config { function Validate (line 32) | func Validate(cfg Config) error { function NormalizeCIDRs (line 45) | func NormalizeCIDRs(cidrs []string) []string { function PathForAppConfig (line 69) | func PathForAppConfig(appConfigPath string) string { function Load (line 78) | func Load(path string, fallback Config) (Config, error) { function Save (line 99) | func Save(path string, cfg Config) error { FILE: web/backend/launcherconfig/config_test.go function TestLoadReturnsFallbackWhenMissing (line 9) | func TestLoadReturnsFallbackWhenMissing(t *testing.T) { function TestSaveAndLoadRoundTrip (line 22) | func TestSaveAndLoadRoundTrip(t *testing.T) { function TestValidateRejectsInvalidPort (line 59) | func TestValidateRejectsInvalidPort(t *testing.T) { function TestValidateRejectsInvalidCIDR (line 68) | func TestValidateRejectsInvalidCIDR(t *testing.T) { function TestNormalizeCIDRs (line 78) | func TestNormalizeCIDRs(t *testing.T) { FILE: web/backend/main.go constant appName (line 35) | appName = "PicoClaw" function main (line 48) | func main() { FILE: web/backend/middleware/access_control.go function IPAllowlist (line 13) | func IPAllowlist(allowedCIDRs []string, next http.Handler) (http.Handler... function clientIPFromRemoteAddr (line 48) | func clientIPFromRemoteAddr(remoteAddr string) net.IP { function rejectByPolicy (line 56) | func rejectByPolicy(w http.ResponseWriter, r *http.Request) { FILE: web/backend/middleware/access_control_test.go function TestIPAllowlist_EmptyCIDRsAllowsAll (line 9) | func TestIPAllowlist_EmptyCIDRsAllowsAll(t *testing.T) { function TestIPAllowlist_RejectsOutsideCIDR (line 27) | func TestIPAllowlist_RejectsOutsideCIDR(t *testing.T) { function TestIPAllowlist_AllowsInsideCIDR (line 45) | func TestIPAllowlist_AllowsInsideCIDR(t *testing.T) { function TestIPAllowlist_AlwaysAllowsLoopback (line 63) | func TestIPAllowlist_AlwaysAllowsLoopback(t *testing.T) { function TestIPAllowlist_InvalidCIDR (line 81) | func TestIPAllowlist_InvalidCIDR(t *testing.T) { FILE: web/backend/middleware/middleware.go function JSONContentType (line 14) | func JSONContentType(next http.Handler) http.Handler { type responseRecorder (line 24) | type responseRecorder struct method WriteHeader (line 29) | func (rr *responseRecorder) WriteHeader(code int) { method Flush (line 35) | func (rr *responseRecorder) Flush() { method Unwrap (line 43) | func (rr *responseRecorder) Unwrap() http.ResponseWriter { function Logger (line 48) | func Logger(next http.Handler) http.Handler { function Recoverer (line 59) | func Recoverer(next http.Handler) http.Handler { FILE: web/backend/model/status.go type StatusResponse (line 4) | type StatusResponse struct FILE: web/backend/systray.go function runTray (line 15) | func runTray() { function onReady (line 20) | func onReady() { function onExit (line 93) | func onExit() { function getIcon (line 98) | func getIcon() []byte { FILE: web/backend/tray_stub_nocgo.go function runTray (line 16) | func runTray() { FILE: web/backend/utils/banner.go constant colorBlue (line 4) | colorBlue = "\x1b[38;2;62;93;185m" constant colorRed (line 5) | colorRed = "\x1b[38;2;213;70;70m" constant colorReset (line 6) | colorReset = "\x1b[0m" constant Banner (line 7) | Banner = "\r\n" + FILE: web/backend/utils/onboard.go function EnsureOnboarded (line 14) | func EnsureOnboarded(configPath string) error { FILE: web/backend/utils/onboard_test.go function TestEnsureOnboardedSkipsWhenConfigExists (line 11) | func TestEnsureOnboardedSkipsWhenConfigExists(t *testing.T) { function TestEnsureOnboardedRunsOnboardWhenConfigMissing (line 34) | func TestEnsureOnboardedRunsOnboardWhenConfigMissing(t *testing.T) { function TestEnsureOnboardedFailsWhenOnboardDoesNotCreateConfig (line 69) | func TestEnsureOnboardedFailsWhenOnboardDoesNotCreateConfig(t *testing.T) { function TestEnsureOnboardedIncludesOnboardOutputOnFailure (line 84) | func TestEnsureOnboardedIncludesOnboardOutputOnFailure(t *testing.T) { FILE: web/backend/utils/runtime.go function GetPicoclawHome (line 16) | func GetPicoclawHome() string { function GetDefaultConfigPath (line 25) | func GetDefaultConfigPath() string { function FindPicoclawBinary (line 37) | func FindPicoclawBinary() string { function GetLocalIP (line 60) | func GetLocalIP() string { function OpenBrowser (line 74) | func OpenBrowser(url string) error { FILE: web/frontend/src/api/channels.ts type ChannelConfig (line 3) | type ChannelConfig = Record type AppConfig (line 4) | type AppConfig = Record type SupportedChannel (line 6) | interface SupportedChannel { type ChannelsCatalogResponse (line 13) | interface ChannelsCatalogResponse { type ConfigActionResponse (line 17) | interface ConfigActionResponse { constant BASE_URL (line 22) | const BASE_URL = "" function request (line 24) | async function request(path: string, options?: RequestInit): Promise<... function getChannelsCatalog (line 47) | async function getChannelsCatalog(): Promise { function getAppConfig (line 51) | async function getAppConfig(): Promise { function patchAppConfig (line 55) | async function patchAppConfig( FILE: web/frontend/src/api/gateway.ts type GatewayStatusResponse (line 3) | interface GatewayStatusResponse { type GatewayLogsResponse (line 14) | interface GatewayLogsResponse { type GatewayActionResponse (line 20) | interface GatewayActionResponse { constant BASE_URL (line 27) | const BASE_URL = "" function request (line 29) | async function request(path: string, options?: RequestInit): Promise<... function getGatewayStatus (line 37) | async function getGatewayStatus(): Promise { function getGatewayLogs (line 41) | async function getGatewayLogs(options?: { function startGateway (line 56) | async function startGateway(): Promise { function stopGateway (line 62) | async function stopGateway(): Promise { function restartGateway (line 68) | async function restartGateway(): Promise { function clearGatewayLogs (line 74) | async function clearGatewayLogs(): Promise { FILE: web/frontend/src/api/models.ts type ModelInfo (line 5) | interface ModelInfo { type ModelsListResponse (line 25) | interface ModelsListResponse { type ModelActionResponse (line 31) | interface ModelActionResponse { constant BASE_URL (line 37) | const BASE_URL = "" function request (line 39) | async function request(path: string, options?: RequestInit): Promise<... function getModels (line 47) | async function getModels(): Promise { function addModel (line 51) | async function addModel( function updateModel (line 61) | async function updateModel( function deleteModel (line 72) | async function deleteModel(index: number): Promise { function setDefaultModel (line 78) | async function setDefaultModel( FILE: web/frontend/src/api/oauth.ts type OAuthProvider (line 1) | type OAuthProvider = "openai" | "anthropic" | "google-antigravity" type OAuthMethod (line 2) | type OAuthMethod = "browser" | "device_code" | "token" type OAuthProviderStatus (line 4) | interface OAuthProviderStatus { type OAuthFlowState (line 17) | interface OAuthFlowState { type OAuthLoginRequest (line 29) | interface OAuthLoginRequest { type OAuthLoginResponse (line 35) | interface OAuthLoginResponse { type OAuthProvidersResponse (line 47) | interface OAuthProvidersResponse { constant BASE_URL (line 51) | const BASE_URL = "" function request (line 53) | async function request(path: string, options?: RequestInit): Promise<... function getOAuthProviders (line 62) | async function getOAuthProviders(): Promise { function loginOAuth (line 66) | async function loginOAuth( function getOAuthFlow (line 76) | async function getOAuthFlow(flowID: string): Promise { function pollOAuthFlow (line 82) | async function pollOAuthFlow(flowID: string): Promise { function logoutOAuth (line 91) | async function logoutOAuth( FILE: web/frontend/src/api/pico.ts type PicoTokenResponse (line 3) | interface PicoTokenResponse { type PicoSetupResponse (line 9) | interface PicoSetupResponse { constant BASE_URL (line 16) | const BASE_URL = "" function request (line 18) | async function request(path: string, options?: RequestInit): Promise<... function getPicoToken (line 26) | async function getPicoToken(): Promise { function regenPicoToken (line 30) | async function regenPicoToken(): Promise { function setupPico (line 34) | async function setupPico(): Promise { FILE: web/frontend/src/api/sessions.ts type SessionSummary (line 3) | interface SessionSummary { type SessionDetail (line 12) | interface SessionDetail { function getSessions (line 20) | async function getSessions( function getSessionHistory (line 36) | async function getSessionHistory(id: string): Promise { function deleteSession (line 44) | async function deleteSession(id: string): Promise { FILE: web/frontend/src/api/skills.ts type SkillSupportItem (line 1) | interface SkillSupportItem { type SkillDetailResponse (line 8) | interface SkillDetailResponse extends SkillSupportItem { type SkillsResponse (line 12) | interface SkillsResponse { type SkillActionResponse (line 16) | interface SkillActionResponse { function request (line 24) | async function request(path: string, options?: RequestInit): Promise<... function getSkills (line 32) | async function getSkills(): Promise { function getSkill (line 36) | async function getSkill(name: string): Promise { function importSkill (line 40) | async function importSkill(file: File): Promise { function deleteSkill (line 54) | async function deleteSkill(name: string): Promise { function extractErrorMessage (line 63) | async function extractErrorMessage(res: Response): Promise { FILE: web/frontend/src/api/system.ts type AutoStartStatus (line 1) | interface AutoStartStatus { type LauncherConfig (line 8) | interface LauncherConfig { function request (line 14) | async function request(path: string, options?: RequestInit): Promise<... function getAutoStartStatus (line 36) | async function getAutoStartStatus(): Promise { function setAutoStartEnabled (line 40) | async function setAutoStartEnabled( function getLauncherConfig (line 50) | async function getLauncherConfig(): Promise { function setLauncherConfig (line 54) | async function setLauncherConfig( FILE: web/frontend/src/api/tools.ts type ToolSupportItem (line 1) | interface ToolSupportItem { type ToolsResponse (line 10) | interface ToolsResponse { type ToolActionResponse (line 14) | interface ToolActionResponse { function request (line 18) | async function request(path: string, options?: RequestInit): Promise<... function getTools (line 40) | async function getTools(): Promise { function setToolEnabled (line 44) | async function setToolEnabled( FILE: web/frontend/src/components/app-header.tsx function AppHeader (line 43) | function AppHeader() { FILE: web/frontend/src/components/app-layout.tsx function AppLayout (line 9) | function AppLayout({ children }: { children: ReactNode }) { FILE: web/frontend/src/components/app-sidebar.tsx type NavItem (line 35) | interface NavItem { type NavGroup (line 42) | interface NavGroup { function AppSidebar (line 68) | function AppSidebar({ ...props }: React.ComponentProps) { FILE: web/frontend/src/components/channels/channel-config-page.tsx type ChannelConfigPageProps (line 25) | interface ChannelConfigPageProps { constant SECRET_FIELD_MAP (line 29) | const SECRET_FIELD_MAP: Record = { function asRecord (line 47) | function asRecord(value: unknown): Record { function asString (line 54) | function asString(value: unknown): string { function asBool (line 58) | function asBool(value: unknown): boolean { function buildEditConfig (line 62) | function buildEditConfig(config: ChannelConfig): ChannelConfig { function normalizeConfig (line 72) | function normalizeConfig( function buildSavePayload (line 86) | function buildSavePayload( function isConfigured (line 117) | function isConfigured( function getRequiredFieldKeys (line 174) | function getRequiredFieldKeys(channelName: string): string[] { function isMissingRequiredValue (line 213) | function isMissingRequiredValue(value: unknown): boolean { function getChannelDocSlug (line 226) | function getChannelDocSlug(channelName: string): string { constant CHANNELS_WITHOUT_DOCS (line 230) | const CHANNELS_WITHOUT_DOCS = new Set([ function ChannelConfigPage (line 239) | function ChannelConfigPage({ channelName }: ChannelConfigPageProps) { FILE: web/frontend/src/components/channels/channel-display-name.ts function getChannelDisplayName (line 5) | function getChannelDisplayName( FILE: web/frontend/src/components/channels/channel-forms/discord-form.tsx type DiscordFormProps (line 8) | interface DiscordFormProps { function asString (line 15) | function asString(value: unknown): string { function asStringArray (line 19) | function asStringArray(value: unknown): string[] { function asBool (line 24) | function asBool(value: unknown): boolean { function asRecord (line 28) | function asRecord(value: unknown): Record { function DiscordForm (line 35) | function DiscordForm({ FILE: web/frontend/src/components/channels/channel-forms/feishu-form.tsx type FeishuFormProps (line 8) | interface FeishuFormProps { function asString (line 15) | function asString(value: unknown): string { function asBool (line 19) | function asBool(value: unknown): boolean { function asStringArray (line 23) | function asStringArray(value: unknown): string[] { function FeishuForm (line 28) | function FeishuForm({ FILE: web/frontend/src/components/channels/channel-forms/generic-form.tsx type GenericFormProps (line 8) | interface GenericFormProps { constant SECRET_FIELDS (line 18) | const SECRET_FIELDS = new Set([ constant SKIP_FIELDS (line 37) | const SKIP_FIELDS = new Set(["enabled", "reasoning_channel_id"]) constant OBJECT_FIELDS (line 40) | const OBJECT_FIELDS = new Set([ function formatLabel (line 49) | function formatLabel(key: string): string { function formatSentenceFieldName (line 56) | function formatSentenceFieldName(key: string): string { function asString (line 61) | function asString(value: unknown): string { function asStringArray (line 65) | function asStringArray(value: unknown): string[] { function asRecord (line 70) | function asRecord(value: unknown): Record { function asBool (line 77) | function asBool(value: unknown): boolean { function GenericForm (line 81) | function GenericForm({ FILE: web/frontend/src/components/channels/channel-forms/slack-form.tsx type SlackFormProps (line 8) | interface SlackFormProps { function asString (line 15) | function asString(value: unknown): string { function asStringArray (line 19) | function asStringArray(value: unknown): string[] { function SlackForm (line 24) | function SlackForm({ FILE: web/frontend/src/components/channels/channel-forms/telegram-form.tsx type TelegramFormProps (line 8) | interface TelegramFormProps { function asString (line 15) | function asString(value: unknown): string { function asStringArray (line 19) | function asStringArray(value: unknown): string[] { function asRecord (line 24) | function asRecord(value: unknown): Record { function asBool (line 31) | function asBool(value: unknown): boolean { function TelegramForm (line 35) | function TelegramForm({ FILE: web/frontend/src/components/chat/assistant-message.tsx type AssistantMessageProps (line 9) | interface AssistantMessageProps { function AssistantMessage (line 14) | function AssistantMessage({ FILE: web/frontend/src/components/chat/chat-composer.tsx type ChatComposerProps (line 9) | interface ChatComposerProps { function ChatComposer (line 17) | function ChatComposer({ FILE: web/frontend/src/components/chat/chat-empty-state.tsx type ChatEmptyStateProps (line 12) | interface ChatEmptyStateProps { function ChatEmptyState (line 18) | function ChatEmptyState({ FILE: web/frontend/src/components/chat/chat-page.tsx function ChatPage (line 19) | function ChatPage() { FILE: web/frontend/src/components/chat/model-selector.tsx type ModelSelectorProps (line 15) | interface ModelSelectorProps { function ModelSelector (line 23) | function ModelSelector({ FILE: web/frontend/src/components/chat/session-history-menu.tsx type SessionHistoryMenuProps (line 16) | interface SessionHistoryMenuProps { function SessionHistoryMenu (line 28) | function SessionHistoryMenu({ FILE: web/frontend/src/components/chat/typing-indicator.tsx function TypingIndicator (line 4) | function TypingIndicator() { FILE: web/frontend/src/components/chat/user-message.tsx type UserMessageProps (line 1) | interface UserMessageProps { function UserMessage (line 5) | function UserMessage({ content }: UserMessageProps) { FILE: web/frontend/src/components/config/config-page.tsx function ConfigPage (line 36) | function ConfigPage() { FILE: web/frontend/src/components/config/config-sections.tsx type UpdateCoreField (line 27) | type UpdateCoreField = ( type UpdateLauncherField (line 32) | type UpdateLauncherField = ( type ConfigSectionCardProps (line 37) | interface ConfigSectionCardProps { function ConfigSectionCard (line 43) | function ConfigSectionCard({ type AgentDefaultsSectionProps (line 61) | interface AgentDefaultsSectionProps { function AgentDefaultsSection (line 66) | function AgentDefaultsSection({ type ExecSectionProps (line 156) | interface ExecSectionProps { function ExecSection (line 161) | function ExecSection({ form, onFieldChange }: ExecSectionProps) { type RuntimeSectionProps (line 248) | interface RuntimeSectionProps { function RuntimeSection (line 253) | function RuntimeSection({ form, onFieldChange }: RuntimeSectionProps) { type CronSectionProps (line 323) | interface CronSectionProps { function CronSection (line 328) | function CronSection({ form, onFieldChange }: CronSectionProps) { type LauncherSectionProps (line 361) | interface LauncherSectionProps { function LauncherSection (line 367) | function LauncherSection({ type DevicesSectionProps (line 418) | interface DevicesSectionProps { function DevicesSection (line 427) | function DevicesSection({ FILE: web/frontend/src/components/config/form-model.ts type JsonRecord (line 1) | type JsonRecord = Record type CoreConfigForm (line 3) | interface CoreConfigForm { type LauncherForm (line 25) | interface LauncherForm { constant DM_SCOPE_OPTIONS (line 31) | const DM_SCOPE_OPTIONS = [ constant EMPTY_FORM (line 62) | const EMPTY_FORM: CoreConfigForm = { constant EMPTY_LAUNCHER_FORM (line 84) | const EMPTY_LAUNCHER_FORM: LauncherForm = { function asRecord (line 90) | function asRecord(value: unknown): JsonRecord { function asString (line 97) | function asString(value: unknown): string { function asBool (line 101) | function asBool(value: unknown): boolean { function asNumberString (line 105) | function asNumberString(value: unknown, fallback: string): string { function buildFormFromConfig (line 115) | function buildFormFromConfig(config: unknown): CoreConfigForm { function parseIntField (line 199) | function parseIntField( function parseCIDRText (line 217) | function parseCIDRText(raw: string): string[] { function parseMultilineList (line 227) | function parseMultilineList(raw: string): string[] { FILE: web/frontend/src/components/config/raw-config-page.tsx function RawConfigPage (line 23) | function RawConfigPage() { FILE: web/frontend/src/components/credentials/anthropic-credential-card.tsx type AnthropicCredentialCardProps (line 15) | interface AnthropicCredentialCardProps { function AnthropicCredentialCard (line 25) | function AnthropicCredentialCard({ FILE: web/frontend/src/components/credentials/antigravity-credential-card.tsx type AntigravityCredentialCardProps (line 14) | interface AntigravityCredentialCardProps { function AntigravityCredentialCard (line 22) | function AntigravityCredentialCard({ FILE: web/frontend/src/components/credentials/credential-card.tsx type CredentialCardProps (line 7) | interface CredentialCardProps { function CredentialCard (line 17) | function CredentialCard({ FILE: web/frontend/src/components/credentials/credentials-page.tsx function CredentialsPage (line 13) | function CredentialsPage() { FILE: web/frontend/src/components/credentials/device-code-sheet.tsx type DeviceCodeSheetProps (line 15) | interface DeviceCodeSheetProps { function DeviceCodeSheet (line 22) | function DeviceCodeSheet({ FILE: web/frontend/src/components/credentials/logout-confirm-dialog.tsx type LogoutConfirmDialogProps (line 15) | interface LogoutConfirmDialogProps { function LogoutConfirmDialog (line 23) | function LogoutConfirmDialog({ FILE: web/frontend/src/components/credentials/openai-credential-card.tsx type OpenAICredentialCardProps (line 16) | interface OpenAICredentialCardProps { function OpenAICredentialCard (line 28) | function OpenAICredentialCard({ FILE: web/frontend/src/components/credentials/provider-status-line.tsx type ProviderStatusLineProps (line 5) | interface ProviderStatusLineProps { function ProviderStatusLine (line 10) | function ProviderStatusLine({ FILE: web/frontend/src/components/logs/ansi-log-line.tsx type AnsiLogLineProps (line 5) | type AnsiLogLineProps = { function AnsiLogLine (line 10) | function AnsiLogLine({ line, wrapColumns }: AnsiLogLineProps) { FILE: web/frontend/src/components/logs/logs-page.tsx function LogsPage (line 10) | function LogsPage() { FILE: web/frontend/src/components/logs/logs-panel.tsx type LogsPanelProps (line 7) | type LogsPanelProps = { function LogsPanel (line 14) | function LogsPanel({ FILE: web/frontend/src/components/models/add-model-sheet.tsx type AddForm (line 24) | interface AddForm { constant EMPTY_ADD_FORM (line 39) | const EMPTY_ADD_FORM: AddForm = { type AddModelSheetProps (line 54) | interface AddModelSheetProps { function AddModelSheet (line 61) | function AddModelSheet({ FILE: web/frontend/src/components/models/delete-model-dialog.tsx type DeleteModelDialogProps (line 17) | interface DeleteModelDialogProps { function DeleteModelDialog (line 23) | function DeleteModelDialog({ FILE: web/frontend/src/components/models/edit-model-sheet.tsx type EditForm (line 24) | interface EditForm { type EditModelSheetProps (line 37) | interface EditModelSheetProps { function EditModelSheet (line 44) | function EditModelSheet({ FILE: web/frontend/src/components/models/model-card.tsx type ModelCardProps (line 14) | interface ModelCardProps { function ModelCard (line 22) | function ModelCard({ FILE: web/frontend/src/components/models/models-page.tsx constant PROVIDER_PRIORITY (line 15) | const PROVIDER_PRIORITY: Record = { type ProviderGroup (line 37) | interface ProviderGroup { function ModelsPage (line 45) | function ModelsPage() { FILE: web/frontend/src/components/models/provider-icon.tsx constant PROVIDER_ICON_SLUGS (line 3) | const PROVIDER_ICON_SLUGS: Record = { constant PROVIDER_DOMAINS (line 20) | const PROVIDER_DOMAINS: Record = { type ProviderIconProps (line 42) | interface ProviderIconProps { function ProviderIcon (line 47) | function ProviderIcon({ FILE: web/frontend/src/components/models/provider-label.ts constant PROVIDER_LABELS (line 1) | const PROVIDER_LABELS: Record = { function getProviderKey (line 23) | function getProviderKey(model: string): string { function getProviderLabel (line 27) | function getProviderLabel(model: string): string { FILE: web/frontend/src/components/models/provider-section.tsx type ProviderSectionProps (line 9) | interface ProviderSectionProps { function ProviderSection (line 19) | function ProviderSection({ FILE: web/frontend/src/components/page-header.tsx type PageHeaderProps (line 7) | interface PageHeaderProps { function PageHeader (line 14) | function PageHeader({ FILE: web/frontend/src/components/secret-placeholder.ts function maskedSecretPlaceholder (line 1) | function maskedSecretPlaceholder(value: unknown, fallback = ""): string { FILE: web/frontend/src/components/shared-form.tsx type FieldLayout (line 14) | type FieldLayout = "default" | "setting-row" type FieldProps (line 16) | interface FieldProps { function Field (line 26) | function Field({ type KeyInputProps (line 84) | interface KeyInputProps { function KeyInput (line 90) | function KeyInput({ value, onChange, placeholder }: KeyInputProps) { type SwitchCardFieldProps (line 118) | interface SwitchCardFieldProps { function SwitchCardField (line 130) | function SwitchCardField({ type AdvancedSectionProps (line 196) | interface AdvancedSectionProps { function AdvancedSection (line 200) | function AdvancedSection({ children }: AdvancedSectionProps) { FILE: web/frontend/src/components/skills/skills-page.tsx function SkillsPage (line 48) | function SkillsPage() { FILE: web/frontend/src/components/tools/tools-page.tsx function ToolsPage (line 18) | function ToolsPage() { function ToolStatusBadge (line 175) | function ToolStatusBadge({ status }: { status: ToolSupportItem["status"]... FILE: web/frontend/src/components/ui/alert-dialog.tsx function AlertDialog (line 7) | function AlertDialog({ function AlertDialogTrigger (line 13) | function AlertDialogTrigger({ function AlertDialogPortal (line 21) | function AlertDialogPortal({ function AlertDialogOverlay (line 29) | function AlertDialogOverlay({ function AlertDialogContent (line 45) | function AlertDialogContent({ function AlertDialogHeader (line 68) | function AlertDialogHeader({ function AlertDialogFooter (line 84) | function AlertDialogFooter({ function AlertDialogMedia (line 100) | function AlertDialogMedia({ function AlertDialogTitle (line 116) | function AlertDialogTitle({ function AlertDialogDescription (line 132) | function AlertDialogDescription({ function AlertDialogAction (line 148) | function AlertDialogAction({ function AlertDialogCancel (line 166) | function AlertDialogCancel({ FILE: web/frontend/src/components/ui/button.tsx function Button (line 44) | function Button({ FILE: web/frontend/src/components/ui/card.tsx function Card (line 5) | function Card({ function CardHeader (line 23) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) { function CardTitle (line 36) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) { function CardDescription (line 49) | function CardDescription({ className, ...props }: React.ComponentProps<"... function CardAction (line 59) | function CardAction({ className, ...props }: React.ComponentProps<"div">) { function CardContent (line 72) | function CardContent({ className, ...props }: React.ComponentProps<"div"... function CardFooter (line 82) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) { FILE: web/frontend/src/components/ui/collapsible.tsx function Collapsible (line 3) | function Collapsible({ function CollapsibleTrigger (line 9) | function CollapsibleTrigger({ function CollapsibleContent (line 20) | function CollapsibleContent({ FILE: web/frontend/src/components/ui/dropdown-menu.tsx function DropdownMenu (line 9) | function DropdownMenu({ function DropdownMenuPortal (line 15) | function DropdownMenuPortal({ function DropdownMenuTrigger (line 23) | function DropdownMenuTrigger({ function DropdownMenuContent (line 34) | function DropdownMenuContent({ function DropdownMenuGroup (line 53) | function DropdownMenuGroup({ function DropdownMenuItem (line 61) | function DropdownMenuItem({ function DropdownMenuCheckboxItem (line 84) | function DropdownMenuCheckboxItem({ function DropdownMenuRadioGroup (line 118) | function DropdownMenuRadioGroup({ function DropdownMenuRadioItem (line 129) | function DropdownMenuRadioItem({ function DropdownMenuLabel (line 161) | function DropdownMenuLabel({ function DropdownMenuSeparator (line 181) | function DropdownMenuSeparator({ function DropdownMenuShortcut (line 194) | function DropdownMenuShortcut({ function DropdownMenuSub (line 210) | function DropdownMenuSub({ function DropdownMenuSubTrigger (line 216) | function DropdownMenuSubTrigger({ function DropdownMenuSubContent (line 240) | function DropdownMenuSubContent({ FILE: web/frontend/src/components/ui/field.tsx function FieldSet (line 8) | function FieldSet({ className, ...props }: React.ComponentProps<"fieldse... function FieldLegend (line 21) | function FieldLegend({ function FieldGroup (line 39) | function FieldGroup({ className, ...props }: React.ComponentProps<"div">) { function Field (line 70) | function Field({ function FieldContent (line 86) | function FieldContent({ className, ...props }: React.ComponentProps<"div... function FieldLabel (line 99) | function FieldLabel({ function FieldTitle (line 116) | function FieldTitle({ className, ...props }: React.ComponentProps<"div">) { function FieldDescription (line 129) | function FieldDescription({ className, ...props }: React.ComponentProps<... function FieldSeparator (line 144) | function FieldSeparator({ function FieldError (line 174) | function FieldError({ FILE: web/frontend/src/components/ui/input.tsx function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu... FILE: web/frontend/src/components/ui/label.tsx function Label (line 6) | function Label({ FILE: web/frontend/src/components/ui/scroll-area.tsx function ScrollArea (line 6) | function ScrollArea({ function ScrollBar (line 29) | function ScrollBar({ FILE: web/frontend/src/components/ui/select.tsx function Select (line 7) | function Select({ function SelectGroup (line 13) | function SelectGroup({ function SelectValue (line 26) | function SelectValue({ function SelectTrigger (line 32) | function SelectTrigger({ function SelectContent (line 58) | function SelectContent({ function SelectLabel (line 91) | function SelectLabel({ function SelectItem (line 104) | function SelectItem({ function SelectSeparator (line 128) | function SelectSeparator({ function SelectScrollUpButton (line 141) | function SelectScrollUpButton({ function SelectScrollDownButton (line 160) | function SelectScrollDownButton({ FILE: web/frontend/src/components/ui/separator.tsx function Separator (line 8) | function Separator({ FILE: web/frontend/src/components/ui/sheet.tsx function Sheet (line 10) | function Sheet({ ...props }: React.ComponentProps) { function SidebarMenuItem (line 455) | function SidebarMenuItem({ className, ...props }: React.ComponentProps<"... function SidebarMenuButton (line 488) | function SidebarMenuButton({ function SidebarMenuAction (line 538) | function SidebarMenuAction({ function SidebarMenuBadge (line 564) | function SidebarMenuBadge({ function SidebarMenuSkeleton (line 581) | function SidebarMenuSkeleton({ function SidebarMenuSub (line 619) | function SidebarMenuSub({ className, ...props }: React.ComponentProps<"u... function SidebarMenuSubItem (line 633) | function SidebarMenuSubItem({ function SidebarMenuSubButton (line 647) | function SidebarMenuSubButton({ FILE: web/frontend/src/components/ui/skeleton.tsx function Skeleton (line 3) | function Skeleton({ className, ...props }: React.ComponentProps<"div">) { FILE: web/frontend/src/components/ui/switch.tsx function Switch (line 6) | function Switch({ FILE: web/frontend/src/components/ui/textarea.tsx function Textarea (line 5) | function Textarea({ className, ...props }: React.ComponentProps<"textare... FILE: web/frontend/src/components/ui/tooltip.tsx function TooltipProvider (line 6) | function TooltipProvider({ function Tooltip (line 19) | function Tooltip({ function TooltipTrigger (line 25) | function TooltipTrigger({ function TooltipContent (line 31) | function TooltipContent({ FILE: web/frontend/src/features/chat/controller.ts function clearReconnectTimer (line 38) | function clearReconnectTimer() { function shouldReconnectFor (line 45) | function shouldReconnectFor(generation: number, sessionId: string): bool... function scheduleReconnect (line 54) | function scheduleReconnect(generation: number, sessionId: string) { function needsActiveSessionHydration (line 70) | function needsActiveSessionHydration(): boolean { function setActiveSessionId (line 81) | function setActiveSessionId(sessionId: string) { function disconnectChatInternal (line 86) | function disconnectChatInternal({ function connectChat (line 110) | async function connectChat() { function disconnectChat (line 253) | function disconnectChat() { function hydrateActiveSession (line 257) | async function hydrateActiveSession() { function sendChatMessage (line 327) | function sendChatMessage(content: string) { function switchChatSession (line 363) | async function switchChatSession(sessionId: string) { function newChatSession (line 389) | async function newChatSession() { function initializeChatStore (line 408) | function initializeChatStore() { function teardownChatStore (line 454) | function teardownChatStore() { FILE: web/frontend/src/features/chat/history.ts function loadSessionMessages (line 5) | async function loadSessionMessages( function normalizeMessageTimestamp (line 19) | function normalizeMessageTimestamp(timestamp: number | string): string { function messageSignature (line 33) | function messageSignature(message: ChatMessage): string { function comparableTimestamp (line 39) | function comparableTimestamp(timestamp: number | string): number { function mergeHistoryMessages (line 45) | function mergeHistoryMessages( FILE: web/frontend/src/features/chat/protocol.ts type PicoMessage (line 4) | interface PicoMessage { function handlePicoMessage (line 12) | function handlePicoMessage( FILE: web/frontend/src/features/chat/state.ts constant LAST_SESSION_STORAGE_KEY (line 1) | const LAST_SESSION_STORAGE_KEY = "picoclaw:last-session-id" constant UNIX_MS_THRESHOLD (line 2) | const UNIX_MS_THRESHOLD = 1e12 function readStorageValue (line 4) | function readStorageValue() { function readStoredSessionId (line 10) | function readStoredSessionId(): string { function writeStoredSessionId (line 14) | function writeStoredSessionId(sessionId: string) { function clearStoredSessionId (line 23) | function clearStoredSessionId() { function generateSessionId (line 27) | function generateSessionId(): string { function getInitialActiveSessionId (line 53) | function getInitialActiveSessionId(): string { function normalizeUnixTimestamp (line 57) | function normalizeUnixTimestamp(timestamp: number): number { FILE: web/frontend/src/features/chat/websocket.ts function normalizeWsUrlForBrowser (line 1) | function normalizeWsUrlForBrowser(wsUrl: string): string { function invalidateSocket (line 25) | function invalidateSocket(socket: WebSocket | null) { function isCurrentSocket (line 37) | function isCurrentSocket({ FILE: web/frontend/src/hooks/use-chat-models.ts type UseChatModelsOptions (line 5) | interface UseChatModelsOptions { function isLocalModel (line 9) | function isLocalModel(model: ModelInfo): boolean { function useChatModels (line 20) | function useChatModels({ isConnected }: UseChatModelsOptions) { FILE: web/frontend/src/hooks/use-credentials-page.ts type FlowWatchMode (line 15) | type FlowWatchMode = "" | "status" | "poll" function getProviderLabel (line 17) | function getProviderLabel(provider: OAuthProvider | ""): string { function useCredentialsPage (line 24) | function useCredentialsPage() { FILE: web/frontend/src/hooks/use-gateway-logs.ts function useGatewayLogs (line 7) | function useGatewayLogs() { FILE: web/frontend/src/hooks/use-gateway.ts function useGateway (line 14) | function useGateway() { FILE: web/frontend/src/hooks/use-log-wrap-columns.ts constant DEFAULT_WRAP_COLUMNS (line 3) | const DEFAULT_WRAP_COLUMNS = 120 constant MIN_WRAP_COLUMNS (line 4) | const MIN_WRAP_COLUMNS = 20 function useLogWrapColumns (line 6) | function useLogWrapColumns() { FILE: web/frontend/src/hooks/use-mobile.ts constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768 function useIsMobile (line 5) | function useIsMobile() { FILE: web/frontend/src/hooks/use-pico-chat.ts constant UNIX_MS_THRESHOLD (line 11) | const UNIX_MS_THRESHOLD = 1e12 function normalizeUnixTimestamp (line 13) | function normalizeUnixTimestamp(timestamp: number): number { function parseTimestamp (line 17) | function parseTimestamp(dateRaw: number | string | Date) { function formatMessageTime (line 36) | function formatMessageTime(dateRaw: number | string | Date): string { function usePicoChat (line 57) | function usePicoChat() { FILE: web/frontend/src/hooks/use-session-history.ts constant LIMIT (line 6) | const LIMIT = 20 type UseSessionHistoryOptions (line 8) | interface UseSessionHistoryOptions { function useSessionHistory (line 13) | function useSessionHistory({ FILE: web/frontend/src/hooks/use-sidebar-channels.ts constant DEFAULT_VISIBLE_CHANNELS (line 30) | const DEFAULT_VISIBLE_CHANNELS = 4 constant CHANNEL_IMPORTANCE_ORDER (line 31) | const CHANNEL_IMPORTANCE_ORDER = [ constant CHANNEL_IMPORTANCE_INDEX (line 50) | const CHANNEL_IMPORTANCE_INDEX = new Map( function IconLark (line 54) | function IconLark({ className }: { className?: string }) { constant CHANNEL_ICON_MAP (line 67) | const CHANNEL_ICON_MAP: Record< function asRecord (line 90) | function asRecord(value: unknown): Record { function isChannelEnabled (line 97) | function isChannelEnabled( function buildChannelEnabledMap (line 117) | function buildChannelEnabledMap( type SidebarChannelNavItem (line 129) | interface SidebarChannelNavItem { type UseSidebarChannelsOptions (line 136) | interface UseSidebarChannelsOptions { function useSidebarChannels (line 140) | function useSidebarChannels({ t }: UseSidebarChannelsOptions) { FILE: web/frontend/src/hooks/use-theme.ts type Theme (line 3) | type Theme = "light" | "dark" function getStoredTheme (line 5) | function getStoredTheme(): Theme { function useTheme (line 10) | function useTheme() { FILE: web/frontend/src/lib/ansi-log.ts type AnsiSegment (line 4) | type AnsiSegment = { type AnsiState (line 9) | type AnsiState = { constant ANSI_PATTERN (line 20) | const ANSI_PATTERN = new RegExp(String.raw`\u001B\[([0-9;]*)m`, "g") constant ANSI_COLORS (line 22) | const ANSI_COLORS = [ constant ANSI_BRIGHT_COLORS (line 33) | const ANSI_BRIGHT_COLORS = [ function cloneAnsiState (line 44) | function cloneAnsiState(state: AnsiState): AnsiState { function ansi256ToHex (line 48) | function ansi256ToHex(code: number): string { function codeToColor (line 74) | function codeToColor(code: number): string | undefined { function applyExtendedColor (line 96) | function applyExtendedColor( function styleToCss (line 125) | function styleToCss(style: AnsiState): CSSProperties { function parseAnsiSegments (line 143) | function parseAnsiSegments(input: string): AnsiSegment[] { function wrapLogLine (line 278) | function wrapLogLine(line: string, columns: number): string { FILE: web/frontend/src/lib/utils.ts function cn (line 4) | function cn(...inputs: ClassValue[]) { FILE: web/frontend/src/main.tsx type Register (line 20) | interface Register { FILE: web/frontend/src/routeTree.gen.ts type FileRoutesByFullPath (line 80) | interface FileRoutesByFullPath { type FileRoutesByTo (line 93) | interface FileRoutesByTo { type FileRoutesById (line 106) | interface FileRoutesById { type FileRouteTypes (line 120) | interface FileRouteTypes { type RootRouteChildren (line 162) | interface RootRouteChildren { type FileRoutesByPath (line 173) | interface FileRoutesByPath { type ChannelsRouteRouteChildren (line 254) | interface ChannelsRouteRouteChildren { type AgentRouteChildren (line 266) | interface AgentRouteChildren { type ConfigRouteChildren (line 278) | interface ConfigRouteChildren { FILE: web/frontend/src/routes/agent.tsx function AgentLayout (line 12) | function AgentLayout() { FILE: web/frontend/src/routes/agent/skills.tsx function AgentSkillsRoute (line 9) | function AgentSkillsRoute() { FILE: web/frontend/src/routes/agent/tools.tsx function AgentToolsRoute (line 9) | function AgentToolsRoute() { FILE: web/frontend/src/routes/channels/$name.tsx function ChannelsByNameRoute (line 9) | function ChannelsByNameRoute() { FILE: web/frontend/src/routes/channels/route.tsx function ChannelsLayout (line 12) | function ChannelsLayout() { FILE: web/frontend/src/routes/config.tsx function ConfigRouteLayout (line 9) | function ConfigRouteLayout() { FILE: web/frontend/src/store/chat.ts type ChatMessage (line 8) | interface ChatMessage { type ConnectionState (line 15) | type ConnectionState = type ChatStoreState (line 21) | interface ChatStoreState { type ChatStorePatch (line 29) | type ChatStorePatch = Partial constant DEFAULT_CHAT_STATE (line 31) | const DEFAULT_CHAT_STATE: ChatStoreState = { function getChatState (line 43) | function getChatState() { function updateChatStore (line 47) | function updateChatStore( FILE: web/frontend/src/store/gateway.ts type GatewayState (line 5) | type GatewayState = type GatewayStoreState (line 14) | interface GatewayStoreState { type GatewayStorePatch (line 20) | type GatewayStorePatch = Partial constant DEFAULT_GATEWAY_STATE (line 22) | const DEFAULT_GATEWAY_STATE: GatewayStoreState = { constant GATEWAY_POLL_INTERVAL_MS (line 28) | const GATEWAY_POLL_INTERVAL_MS = 2000 constant GATEWAY_TRANSIENT_POLL_INTERVAL_MS (line 29) | const GATEWAY_TRANSIENT_POLL_INTERVAL_MS = 1000 constant GATEWAY_STOPPING_TIMEOUT_MS (line 30) | const GATEWAY_STOPPING_TIMEOUT_MS = 5000 type RefreshGatewayStateOptions (line 32) | interface RefreshGatewayStateOptions { function clearGatewayStoppingTimeout (line 44) | function clearGatewayStoppingTimeout() { function normalizeGatewayStoreState (line 51) | function normalizeGatewayStoreState( function updateGatewayStore (line 68) | function updateGatewayStore( function beginGatewayStoppingTransition (line 84) | function beginGatewayStoppingTransition() { function cancelGatewayStoppingTransition (line 100) | function cancelGatewayStoppingTransition() { function applyGatewayStatusToStore (line 107) | function applyGatewayStatusToStore( function nextGatewayPollInterval (line 131) | function nextGatewayPollInterval() { function scheduleGatewayPoll (line 143) | function scheduleGatewayPoll(delay = nextGatewayPollInterval()) { function refreshGatewayState (line 158) | async function refreshGatewayState( function subscribeGatewayPolling (line 191) | function subscribeGatewayPolling() {