@gajae-code/coding-agent 0.7.8 → 0.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/README.md +8 -0
- package/dist/types/config/keybindings.d.ts +1 -1
- package/dist/types/config/model-profile-activation.d.ts +19 -2
- package/dist/types/config/model-profiles.d.ts +1 -0
- package/dist/types/config/model-registry.d.ts +4 -0
- package/dist/types/config/settings-schema.d.ts +12 -3
- package/dist/types/extensibility/extensions/types.d.ts +11 -0
- package/dist/types/gjc-runtime/launch-tmux.d.ts +19 -3
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +7 -1
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +0 -4
- package/dist/types/modes/components/hook-input.d.ts +1 -0
- package/dist/types/modes/components/hook-selector.d.ts +5 -0
- package/dist/types/modes/components/model-selector.d.ts +9 -0
- package/dist/types/modes/components/status-line.d.ts +3 -0
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +3 -1
- package/dist/types/modes/interactive-mode.d.ts +3 -1
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +41 -7
- package/dist/types/modes/types.d.ts +3 -1
- package/dist/types/notifications/daemon-paths.d.ts +9 -0
- package/dist/types/notifications/html-format.d.ts +2 -0
- package/dist/types/notifications/recent-activity.d.ts +5 -1
- package/dist/types/notifications/telegram-daemon-cli.d.ts +8 -2
- package/dist/types/notifications/telegram-daemon-control.d.ts +8 -0
- package/dist/types/notifications/telegram-daemon.d.ts +1 -10
- package/dist/types/notifications/telegram-reference.d.ts +4 -0
- package/dist/types/notifications/threaded-render.d.ts +1 -0
- package/dist/types/tools/ask.d.ts +26 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +9 -2
- package/dist/types/utils/cmux-workspace.d.ts +23 -0
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/provider.d.ts +5 -0
- package/dist/types/web/search/render.d.ts +1 -0
- package/package.json +7 -7
- package/src/cli/notify-cli.ts +1 -1
- package/src/cli/web-search-cli.ts +3 -2
- package/src/cli.ts +1 -0
- package/src/config/keybindings.ts +1 -1
- package/src/config/model-profile-activation.ts +92 -11
- package/src/config/model-profiles.ts +15 -2
- package/src/config/model-registry.ts +81 -5
- package/src/config/settings-schema.ts +14 -3
- package/src/coordinator-mcp/server.ts +4 -2
- package/src/deep-interview/render-middleware.ts +1 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +40 -8
- package/src/defaults/gjc/skills/ralplan/SKILL.md +14 -7
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +37 -112
- package/src/extensibility/extensions/types.ts +11 -0
- package/src/gjc-runtime/deep-interview-runtime.ts +1 -1
- package/src/gjc-runtime/launch-tmux.ts +366 -48
- package/src/gjc-runtime/team-runtime.ts +69 -4
- package/src/gjc-runtime/ultragoal-guard.ts +150 -24
- package/src/gjc-runtime/ultragoal-runtime.ts +16 -124
- package/src/gjc-runtime/workflow-manifest.generated.json +0 -8
- package/src/gjc-runtime/workflow-manifest.ts +0 -1
- package/src/hooks/skill-state.ts +33 -73
- package/src/internal-urls/docs-index.generated.ts +8 -7
- package/src/modes/components/custom-model-preset-wizard.ts +2 -4
- package/src/modes/components/hook-editor.ts +7 -4
- package/src/modes/components/hook-input.ts +4 -0
- package/src/modes/components/hook-selector.ts +21 -3
- package/src/modes/components/model-selector.ts +84 -13
- package/src/modes/components/settings-selector.ts +83 -24
- package/src/modes/components/status-line/presets.ts +11 -0
- package/src/modes/components/status-line/segments.ts +10 -2
- package/src/modes/components/status-line.ts +1 -0
- package/src/modes/controllers/extension-ui-controller.ts +20 -2
- package/src/modes/controllers/selector-controller.ts +130 -7
- package/src/modes/interactive-mode.ts +7 -2
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +64 -13
- package/src/modes/types.ts +6 -1
- package/src/notifications/daemon-paths.ts +22 -0
- package/src/notifications/html-format.ts +75 -1
- package/src/notifications/index.ts +12 -1
- package/src/notifications/recent-activity.ts +32 -8
- package/src/notifications/telegram-daemon-cli.ts +13 -4
- package/src/notifications/telegram-daemon-control.ts +9 -0
- package/src/notifications/telegram-daemon.ts +69 -45
- package/src/notifications/telegram-reference.ts +36 -14
- package/src/notifications/threaded-render.ts +14 -6
- package/src/prompts/system/system-prompt.md +10 -1
- package/src/sdk.ts +13 -6
- package/src/session/agent-session.ts +10 -1
- package/src/tools/ask.ts +147 -17
- package/src/tools/eval.ts +2 -2
- package/src/tools/render-utils.ts +2 -0
- package/src/tools/ultragoal-ask-guard.ts +39 -5
- package/src/utils/cmux-workspace.ts +106 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/search/index.ts +22 -10
- package/src/web/search/provider.ts +15 -0
- package/src/web/search/render.ts +3 -0
package/src/web/search/index.ts
CHANGED
|
@@ -68,6 +68,18 @@ function formatProviderError(error: unknown, provider: SearchProvider): string {
|
|
|
68
68
|
return `Unknown error from ${provider.label}`;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
function formatProviderFailure(error: unknown, provider: SearchProvider): string {
|
|
72
|
+
if (error instanceof SearchProviderError) return error.message;
|
|
73
|
+
return `${provider.id}: ${formatProviderError(error, provider)}`;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function formatFallbackWarning(
|
|
77
|
+
failures: Array<{ provider: SearchProvider; error: unknown }>,
|
|
78
|
+
provider: SearchProvider,
|
|
79
|
+
): string {
|
|
80
|
+
return `Web search provider fallback: ${failures.map(f => formatProviderFailure(f.error, f.provider)).join("; ")}; using ${provider.label}.`;
|
|
81
|
+
}
|
|
82
|
+
|
|
71
83
|
/** Truncate text for tool output */
|
|
72
84
|
function truncateText(text: string, maxLen: number): string {
|
|
73
85
|
if (text.length <= maxLen) return text;
|
|
@@ -185,10 +197,11 @@ async function executeSearch(
|
|
|
185
197
|
});
|
|
186
198
|
|
|
187
199
|
const text = formatForLLM(response);
|
|
200
|
+
const warning = failures.length > 0 ? formatFallbackWarning(failures, provider) : undefined;
|
|
188
201
|
|
|
189
202
|
return {
|
|
190
|
-
content: [{ type: "text" as const, text }],
|
|
191
|
-
details: { response },
|
|
203
|
+
content: [{ type: "text" as const, text: warning ? `Warning: ${warning}\n\n${text}` : text }],
|
|
204
|
+
details: { response, ...(warning ? { warning } : {}) },
|
|
192
205
|
};
|
|
193
206
|
} catch (error) {
|
|
194
207
|
// Surface user-initiated cancellation immediately so the session sees
|
|
@@ -207,13 +220,7 @@ async function executeSearch(
|
|
|
207
220
|
: `Unknown error from ${lastProvider.label}`;
|
|
208
221
|
const message =
|
|
209
222
|
providers.length > 1
|
|
210
|
-
? `All web search providers failed: ${failures
|
|
211
|
-
.map(f =>
|
|
212
|
-
f.error instanceof SearchProviderError
|
|
213
|
-
? f.error.message
|
|
214
|
-
: `${f.provider.id}: ${formatProviderError(f.error, f.provider)}`,
|
|
215
|
-
)
|
|
216
|
-
.join("; ")}`
|
|
223
|
+
? `All web search providers failed: ${failures.map(f => formatProviderFailure(f.error, f.provider)).join("; ")}`
|
|
217
224
|
: baseMessage;
|
|
218
225
|
|
|
219
226
|
return {
|
|
@@ -321,7 +328,12 @@ export function getSearchTools(): CustomTool<any, any>[] {
|
|
|
321
328
|
return [webSearchCustomTool];
|
|
322
329
|
}
|
|
323
330
|
|
|
324
|
-
export {
|
|
331
|
+
export {
|
|
332
|
+
getConfiguredSearchProviderPreference,
|
|
333
|
+
getSearchProvider,
|
|
334
|
+
setPreferredSearchProvider,
|
|
335
|
+
setSearchFallbackProviders,
|
|
336
|
+
} from "./provider";
|
|
325
337
|
export { setSearchHardTimeoutMs } from "./providers/utils";
|
|
326
338
|
export type { SearchProviderId as SearchProvider, SearchResponse } from "./types";
|
|
327
339
|
export { isConfigurableSearchProviderId, isSearchProviderPreference } from "./types";
|
|
@@ -149,6 +149,21 @@ export function setSearchFallbackProviders(ids: readonly string[]): void {
|
|
|
149
149
|
fallbackProvIds = ids.filter(isConfigurableSearchProviderId);
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
export interface SearchProviderPreferenceSource {
|
|
153
|
+
get(path: "providers.webSearch" | "web_search.provider"): SearchProviderId | "auto";
|
|
154
|
+
has(path: "providers.webSearch" | "web_search.provider"): boolean;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function getConfiguredSearchProviderPreference(
|
|
158
|
+
settings: SearchProviderPreferenceSource,
|
|
159
|
+
): SearchProviderId | "auto" {
|
|
160
|
+
const providerPreference = settings.get("providers.webSearch");
|
|
161
|
+
if (settings.has("providers.webSearch") || providerPreference !== "auto") return providerPreference;
|
|
162
|
+
|
|
163
|
+
const legacyProviderPreference = settings.get("web_search.provider");
|
|
164
|
+
return legacyProviderPreference;
|
|
165
|
+
}
|
|
166
|
+
|
|
152
167
|
export interface ResolveProviderChainOptions {
|
|
153
168
|
authStorage: AuthStorage;
|
|
154
169
|
sessionId?: string;
|
package/src/web/search/render.ts
CHANGED
|
@@ -66,6 +66,7 @@ function renderFallbackText(contentText: string, expanded: boolean, theme: Theme
|
|
|
66
66
|
export interface SearchRenderDetails {
|
|
67
67
|
response: SearchResponse;
|
|
68
68
|
error?: string;
|
|
69
|
+
warning?: string;
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
/** Render web search result with tree-based layout */
|
|
@@ -130,6 +131,8 @@ export function renderSearchResult(
|
|
|
130
131
|
|
|
131
132
|
const metaLines: string[] = [];
|
|
132
133
|
metaLines.push(`${theme.fg("muted", "Provider:")} ${theme.fg("text", providerLabel)}`);
|
|
134
|
+
if (details.warning)
|
|
135
|
+
metaLines.push(`${theme.fg("muted", "Fallback:")} ${theme.fg("warning", truncateToWidth(details.warning, 110))}`);
|
|
133
136
|
if (response.authMode)
|
|
134
137
|
metaLines.push(
|
|
135
138
|
`${theme.fg("muted", "Auth:")} ${theme.fg("text", response.authMode === "oauth" ? "OAuth" : response.authMode === "api_key" ? "API key" : response.authMode)}`,
|