@noodleseed/one 0.89.1 → 0.90.0

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.
Files changed (178) hide show
  1. package/dist/commands/billing-enforcement-activation-ops.js +1 -11
  2. package/dist/commands/billing-enforcement-activation-ops.js.map +1 -1
  3. package/dist/commands/billing-enforcement-ops.js +1 -11
  4. package/dist/commands/billing-enforcement-ops.js.map +1 -1
  5. package/dist/commands/billing-metering-ops.js +1 -11
  6. package/dist/commands/billing-metering-ops.js.map +1 -1
  7. package/dist/commands/billing-metering-validation-ops.js +1 -11
  8. package/dist/commands/billing-metering-validation-ops.js.map +1 -1
  9. package/dist/commands/billing-read-ops.js +1 -11
  10. package/dist/commands/billing-read-ops.js.map +1 -1
  11. package/dist/commands/billing-stripe-ops.js +1 -11
  12. package/dist/commands/billing-stripe-ops.js.map +1 -1
  13. package/dist/commands/org-admin.d.ts +6 -0
  14. package/dist/commands/org-admin.d.ts.map +1 -1
  15. package/dist/commands/org-admin.js +1 -29
  16. package/dist/commands/org-admin.js.map +1 -1
  17. package/dist/commands/org-domains.js +1 -22
  18. package/dist/commands/org-domains.js.map +1 -1
  19. package/dist/commands/org-member-args.d.ts +1 -1
  20. package/dist/commands/org-member-args.d.ts.map +1 -1
  21. package/dist/commands/org-member-args.js +1 -10
  22. package/dist/commands/org-member-args.js.map +1 -1
  23. package/dist/commands/org-openai-challenge.js +1 -22
  24. package/dist/commands/org-openai-challenge.js.map +1 -1
  25. package/dist/commands/platform-account-reset-args.d.ts.map +1 -1
  26. package/dist/commands/platform-account-reset-args.js +1 -6
  27. package/dist/commands/platform-account-reset-args.js.map +1 -1
  28. package/dist/commands/platform-account-reset-ops.js +1 -11
  29. package/dist/commands/platform-account-reset-ops.js.map +1 -1
  30. package/dist/commands/platform-auth-migration-args.d.ts +2 -0
  31. package/dist/commands/platform-auth-migration-args.d.ts.map +1 -1
  32. package/dist/commands/platform-auth-migration-args.js +2 -1
  33. package/dist/commands/platform-auth-migration-args.js.map +1 -1
  34. package/dist/commands/platform-auth-migration-ops.js +1 -11
  35. package/dist/commands/platform-auth-migration-ops.js.map +1 -1
  36. package/dist/commands/shared.d.ts +6 -0
  37. package/dist/commands/shared.d.ts.map +1 -1
  38. package/dist/commands/shared.js +34 -0
  39. package/dist/commands/shared.js.map +1 -1
  40. package/dist/deploy.d.ts +2 -0
  41. package/dist/deploy.d.ts.map +1 -1
  42. package/dist/deploy.js +4 -4
  43. package/dist/deploy.js.map +1 -1
  44. package/dist/dev.d.ts.map +1 -1
  45. package/dist/dev.js +1 -7
  46. package/dist/dev.js.map +1 -1
  47. package/dist/devtools-brand.d.ts +14 -0
  48. package/dist/devtools-brand.d.ts.map +1 -0
  49. package/dist/devtools-brand.js +98 -0
  50. package/dist/devtools-brand.js.map +1 -0
  51. package/dist/devtools-chat-anthropic.d.ts +3 -0
  52. package/dist/devtools-chat-anthropic.d.ts.map +1 -0
  53. package/dist/devtools-chat-anthropic.js +75 -0
  54. package/dist/devtools-chat-anthropic.js.map +1 -0
  55. package/dist/devtools-chat-gemini.d.ts +3 -0
  56. package/dist/devtools-chat-gemini.d.ts.map +1 -0
  57. package/dist/devtools-chat-gemini.js +82 -0
  58. package/dist/devtools-chat-gemini.js.map +1 -0
  59. package/dist/devtools-chat-types.d.ts +64 -0
  60. package/dist/devtools-chat-types.d.ts.map +1 -0
  61. package/dist/devtools-chat-types.js +64 -0
  62. package/dist/devtools-chat-types.js.map +1 -0
  63. package/dist/devtools-chat.d.ts +7 -39
  64. package/dist/devtools-chat.d.ts.map +1 -1
  65. package/dist/devtools-chat.js +33 -48
  66. package/dist/devtools-chat.js.map +1 -1
  67. package/dist/devtools-copy-styles.d.ts +3 -0
  68. package/dist/devtools-copy-styles.d.ts.map +1 -0
  69. package/dist/devtools-copy-styles.js +54 -0
  70. package/dist/devtools-copy-styles.js.map +1 -0
  71. package/dist/devtools-design.d.ts +5 -0
  72. package/dist/devtools-design.d.ts.map +1 -0
  73. package/dist/devtools-design.js +62 -0
  74. package/dist/devtools-design.js.map +1 -0
  75. package/dist/devtools-harness.d.ts +2 -2
  76. package/dist/devtools-harness.d.ts.map +1 -1
  77. package/dist/devtools-harness.js +130 -216
  78. package/dist/devtools-harness.js.map +1 -1
  79. package/dist/devtools-json.d.ts +10 -0
  80. package/dist/devtools-json.d.ts.map +1 -0
  81. package/dist/devtools-json.js +23 -0
  82. package/dist/devtools-json.js.map +1 -0
  83. package/dist/devtools-preview-control-styles.d.ts +3 -0
  84. package/dist/devtools-preview-control-styles.d.ts.map +1 -0
  85. package/dist/devtools-preview-control-styles.js +207 -0
  86. package/dist/devtools-preview-control-styles.js.map +1 -0
  87. package/dist/devtools-preview.d.ts +7 -3
  88. package/dist/devtools-preview.d.ts.map +1 -1
  89. package/dist/devtools-preview.js +189 -43
  90. package/dist/devtools-preview.js.map +1 -1
  91. package/dist/devtools-provider-logos.d.ts +5 -0
  92. package/dist/devtools-provider-logos.d.ts.map +1 -0
  93. package/dist/devtools-provider-logos.js +5 -0
  94. package/dist/devtools-provider-logos.js.map +1 -0
  95. package/dist/devtools-responsive-styles.d.ts +3 -0
  96. package/dist/devtools-responsive-styles.d.ts.map +1 -0
  97. package/dist/devtools-responsive-styles.js +75 -0
  98. package/dist/devtools-responsive-styles.js.map +1 -0
  99. package/dist/devtools-styles.d.ts +3 -0
  100. package/dist/devtools-styles.d.ts.map +1 -0
  101. package/dist/devtools-styles.js +694 -0
  102. package/dist/devtools-styles.js.map +1 -0
  103. package/dist/local-target.d.ts.map +1 -1
  104. package/dist/local-target.js +1 -6
  105. package/dist/local-target.js.map +1 -1
  106. package/dist/plugin-mode/build-readiness-server.d.ts +4 -10
  107. package/dist/plugin-mode/build-readiness-server.d.ts.map +1 -1
  108. package/dist/plugin-mode/build-readiness-server.js +68 -67
  109. package/dist/plugin-mode/build-readiness-server.js.map +1 -1
  110. package/dist/plugin-mode/plugin-command-runner.d.ts +41 -0
  111. package/dist/plugin-mode/plugin-command-runner.d.ts.map +1 -0
  112. package/dist/plugin-mode/plugin-command-runner.js +122 -0
  113. package/dist/plugin-mode/plugin-command-runner.js.map +1 -0
  114. package/dist/plugin-mode/plugin-operation-contract.d.ts +237 -0
  115. package/dist/plugin-mode/plugin-operation-contract.d.ts.map +1 -0
  116. package/dist/plugin-mode/plugin-operation-contract.js +164 -0
  117. package/dist/plugin-mode/plugin-operation-contract.js.map +1 -0
  118. package/dist/plugin-mode/plugin-operation-tools.d.ts +20 -0
  119. package/dist/plugin-mode/plugin-operation-tools.d.ts.map +1 -0
  120. package/dist/plugin-mode/plugin-operation-tools.js +289 -0
  121. package/dist/plugin-mode/plugin-operation-tools.js.map +1 -0
  122. package/dist/preview-session.d.ts.map +1 -1
  123. package/dist/preview-session.js +22 -5
  124. package/dist/preview-session.js.map +1 -1
  125. package/dist/project.d.ts.map +1 -1
  126. package/dist/project.js +1 -7
  127. package/dist/project.js.map +1 -1
  128. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
  129. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  130. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
  131. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +16 -12
  132. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
  133. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +9 -9
  134. package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js +4 -4
  135. package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js.map +1 -1
  136. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts.map +1 -1
  137. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +6 -3
  138. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -1
  139. package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts +1 -1
  140. package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts.map +1 -1
  141. package/node_modules/@noodle-borg/connector-defs/dist/index.js.map +1 -1
  142. package/node_modules/@noodle-borg/module-audit/dist/route.d.ts +0 -2
  143. package/node_modules/@noodle-borg/module-audit/dist/route.d.ts.map +1 -1
  144. package/node_modules/@noodle-borg/module-audit/dist/route.js +0 -4
  145. package/node_modules/@noodle-borg/module-audit/dist/route.js.map +1 -1
  146. package/node_modules/@noodle-borg/protocol/dist/input-validation.d.ts +0 -2
  147. package/node_modules/@noodle-borg/protocol/dist/input-validation.d.ts.map +1 -1
  148. package/node_modules/@noodle-borg/protocol/dist/input-validation.js +1 -5
  149. package/node_modules/@noodle-borg/protocol/dist/input-validation.js.map +1 -1
  150. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +0 -2
  151. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
  152. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +0 -7
  153. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
  154. package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts +1 -3
  155. package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts.map +1 -1
  156. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +1 -14
  157. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js.map +1 -1
  158. package/node_modules/@noodle-borg/service/dist/index.d.ts +5 -5
  159. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  160. package/node_modules/@noodle-borg/service/dist/index.js +1 -1
  161. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  162. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts +0 -2
  163. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts.map +1 -1
  164. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js +0 -6
  165. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js.map +1 -1
  166. package/node_modules/@noodle-borg/service/dist/oauth/console-url.d.ts +2 -0
  167. package/node_modules/@noodle-borg/service/dist/oauth/console-url.d.ts.map +1 -0
  168. package/node_modules/@noodle-borg/service/dist/oauth/console-url.js +4 -0
  169. package/node_modules/@noodle-borg/service/dist/oauth/console-url.js.map +1 -0
  170. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
  171. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +2 -1
  172. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
  173. package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts +1 -3
  174. package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
  175. package/node_modules/@noodle-borg/service/dist/registry-targets.js +0 -17
  176. package/node_modules/@noodle-borg/service/dist/registry-targets.js.map +1 -1
  177. package/node_modules/@noodle-borg/service/package.json +0 -1
  178. package/package.json +1 -1
@@ -0,0 +1,64 @@
1
+ export type ChatProviderId = 'openai' | 'anthropic' | 'gemini';
2
+ /** Browser-facing conversation message plus the OpenAI-only fields used inside its adapter. */
3
+ export interface ChatMessage {
4
+ readonly role: 'system' | 'user' | 'assistant' | 'tool';
5
+ readonly content?: string | null;
6
+ readonly tool_calls?: ReadonlyArray<{
7
+ readonly id: string;
8
+ readonly type: 'function';
9
+ readonly function: {
10
+ readonly name: string;
11
+ readonly arguments: string;
12
+ };
13
+ }>;
14
+ readonly tool_call_id?: string;
15
+ }
16
+ /** A tool projected from MCP `tools/list`. */
17
+ export interface ChatToolDef {
18
+ readonly name: string;
19
+ readonly description?: string;
20
+ readonly inputSchema?: Record<string, unknown>;
21
+ readonly resourceUri?: string;
22
+ }
23
+ export type ChatToolArguments = Record<string, unknown>;
24
+ /** A tool call executed during one provider turn. */
25
+ export interface ChatToolInvocation {
26
+ readonly id: string;
27
+ readonly name: string;
28
+ readonly arguments: ChatToolArguments;
29
+ readonly result: unknown;
30
+ readonly isError: boolean;
31
+ readonly resourceUri?: string;
32
+ }
33
+ export interface ChatTurnResult {
34
+ readonly messages: ChatMessage[];
35
+ readonly toolCalls: ChatToolInvocation[];
36
+ readonly text: string;
37
+ }
38
+ export interface RunProviderChatTurnInput {
39
+ readonly provider: ChatProviderId;
40
+ readonly messages: readonly ChatMessage[];
41
+ readonly tools: readonly ChatToolDef[];
42
+ readonly apiKey: string;
43
+ readonly model: string;
44
+ readonly callTool: (name: string, args: ChatToolArguments) => Promise<{
45
+ result: unknown;
46
+ isError: boolean;
47
+ }>;
48
+ readonly fetchImpl?: typeof fetch;
49
+ readonly baseUrl?: string;
50
+ readonly maxIterations?: number;
51
+ readonly timeoutMs?: number;
52
+ }
53
+ export declare const DEFAULT_MAX_ITERATIONS = 8;
54
+ export declare const DEFAULT_REQUEST_TIMEOUT_MS = 60000;
55
+ export declare const EMPTY_OBJECT_SCHEMA: Record<string, unknown>;
56
+ export declare function visibleMessages(messages: readonly ChatMessage[]): ChatMessage[];
57
+ export declare function resultText(value: unknown): string;
58
+ export declare function validateToolArguments(value: unknown): ChatToolArguments;
59
+ export declare function parseToolArguments(value: string): ChatToolArguments;
60
+ export declare function requireDeclaredTool(byName: ReadonlyMap<string, ChatToolDef>, name: string): ChatToolDef;
61
+ export declare function completeTurn(input: RunProviderChatTurnInput, text: string, toolCalls: ChatToolInvocation[]): ChatTurnResult;
62
+ export declare function limitTurn(input: RunProviderChatTurnInput, toolCalls: ChatToolInvocation[]): ChatTurnResult;
63
+ export declare function providerFetch(providerName: string, fetchImpl: typeof fetch, url: string, init: RequestInit, timeoutMs: number): Promise<Response>;
64
+ //# sourceMappingURL=devtools-chat-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-chat-types.d.ts","sourceRoot":"","sources":["../src/devtools-chat-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ export const DEFAULT_MAX_ITERATIONS = 8;
2
+ export const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
3
+ export const EMPTY_OBJECT_SCHEMA = { type: 'object', properties: {} };
4
+ export function visibleMessages(messages) {
5
+ return messages
6
+ .filter((message) => message.role !== 'tool' &&
7
+ (message.role === 'system' || message.role === 'user' || message.role === 'assistant'))
8
+ .map((message) => ({ role: message.role, content: message.content ?? '' }));
9
+ }
10
+ export function resultText(value) {
11
+ return typeof value === 'string' ? value : JSON.stringify(value ?? null);
12
+ }
13
+ export function validateToolArguments(value) {
14
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
15
+ throw new Error('Tool arguments must be a JSON object.');
16
+ }
17
+ return value;
18
+ }
19
+ export function parseToolArguments(value) {
20
+ let parsed;
21
+ try {
22
+ parsed = value ? JSON.parse(value) : {};
23
+ }
24
+ catch {
25
+ throw new Error('Tool arguments must be a JSON object.');
26
+ }
27
+ return validateToolArguments(parsed);
28
+ }
29
+ export function requireDeclaredTool(byName, name) {
30
+ const definition = byName.get(name);
31
+ if (!definition)
32
+ throw new Error(`Model requested undeclared tool "${name}".`);
33
+ return definition;
34
+ }
35
+ export function completeTurn(input, text, toolCalls) {
36
+ return {
37
+ messages: [...visibleMessages(input.messages), { role: 'assistant', content: text }],
38
+ toolCalls,
39
+ text,
40
+ };
41
+ }
42
+ export function limitTurn(input, toolCalls) {
43
+ return completeTurn(input, 'Stopped after reaching the tool-call limit for this turn. Ask a follow-up to continue.', toolCalls);
44
+ }
45
+ export async function providerFetch(providerName, fetchImpl, url, init, timeoutMs) {
46
+ const controller = new AbortController();
47
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
48
+ try {
49
+ const response = await fetchImpl(url, { ...init, signal: controller.signal });
50
+ if (!response.ok)
51
+ throw new Error(`${providerName} request failed (${response.status}).`);
52
+ return response;
53
+ }
54
+ catch (error) {
55
+ if (controller.signal.aborted) {
56
+ throw new Error(`${providerName} request timed out after ${Math.round(timeoutMs / 1000)}s.`);
57
+ }
58
+ throw error;
59
+ }
60
+ finally {
61
+ clearTimeout(timer);
62
+ }
63
+ }
64
+ //# sourceMappingURL=devtools-chat-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-chat-types.js","sourceRoot":"","sources":["../src/devtools-chat-types.ts"],"names":[],"mappings":"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"}
@@ -7,30 +7,11 @@
7
7
  * This is an extension of `dev`'s local, loopback-only tool exercise, not a general MCP client (ADR 0043):
8
8
  * the agent can only reach the tools of the local server the devtools session is already previewing.
9
9
  */
10
- /** The default model overridable per session via `--model` or `OPENAI_MODEL`. */
11
- export declare const DEFAULT_CHAT_MODEL = "gpt-5.5";
12
- /** An OpenAI chat-completions message (subset we produce/consume). */
13
- export interface ChatMessage {
14
- readonly role: 'system' | 'user' | 'assistant' | 'tool';
15
- readonly content?: string | null;
16
- readonly tool_calls?: ReadonlyArray<{
17
- readonly id: string;
18
- readonly type: 'function';
19
- readonly function: {
20
- readonly name: string;
21
- readonly arguments: string;
22
- };
23
- }>;
24
- readonly tool_call_id?: string;
25
- }
26
- /** A tool the agent may call, projected from the MCP `tools/list` entry. */
27
- export interface ChatToolDef {
28
- readonly name: string;
29
- readonly description?: string;
30
- readonly inputSchema?: Record<string, unknown>;
31
- /** `ui://` resource URI when the tool renders a widget — carried through for inline rendering. */
32
- readonly resourceUri?: string;
33
- }
10
+ import { type ChatMessage, type ChatProviderId, type ChatToolDef, type ChatTurnResult, type RunProviderChatTurnInput } from './devtools-chat-types.js';
11
+ export type { ChatMessage, ChatProviderId, ChatToolDef, ChatToolInvocation, ChatTurnResult, RunProviderChatTurnInput, } from './devtools-chat-types.js';
12
+ export declare const DEFAULT_CHAT_MODELS: Readonly<Record<ChatProviderId, string>>;
13
+ /** Existing CLI option default. Provider-aware routes use {@link DEFAULT_CHAT_MODELS}. */
14
+ export declare const DEFAULT_CHAT_MODEL: string;
34
15
  export interface OpenAiFunctionTool {
35
16
  readonly type: 'function';
36
17
  readonly function: {
@@ -39,20 +20,6 @@ export interface OpenAiFunctionTool {
39
20
  readonly parameters: Record<string, unknown>;
40
21
  };
41
22
  }
42
- /** A tool the agent actually called this turn, with its inputs/outputs, for inline rendering. */
43
- export interface ChatToolInvocation {
44
- readonly name: string;
45
- readonly arguments: unknown;
46
- readonly result: unknown;
47
- readonly isError: boolean;
48
- readonly resourceUri?: string;
49
- }
50
- export interface ChatTurnResult {
51
- /** The full conversation including the new assistant/tool messages — the browser resends it next turn. */
52
- readonly messages: ChatMessage[];
53
- readonly toolCalls: ChatToolInvocation[];
54
- readonly text: string;
55
- }
56
23
  /** Project MCP tool defs into OpenAI function-tool schema. */
57
24
  export declare function toOpenAiTools(tools: readonly ChatToolDef[]): OpenAiFunctionTool[];
58
25
  /**
@@ -64,7 +31,7 @@ export declare function runChatTurn(opts: {
64
31
  readonly tools: readonly ChatToolDef[];
65
32
  readonly apiKey: string;
66
33
  readonly model: string;
67
- readonly callTool: (name: string, args: unknown) => Promise<{
34
+ readonly callTool: (name: string, args: Record<string, unknown>) => Promise<{
68
35
  result: unknown;
69
36
  isError: boolean;
70
37
  }>;
@@ -73,4 +40,5 @@ export declare function runChatTurn(opts: {
73
40
  readonly maxIterations?: number;
74
41
  readonly timeoutMs?: number;
75
42
  }): Promise<ChatTurnResult>;
43
+ export declare function runProviderChatTurn(input: RunProviderChatTurnInput): Promise<ChatTurnResult>;
76
44
  //# sourceMappingURL=devtools-chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools-chat.d.ts","sourceRoot":"","sources":["../src/devtools-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAO5C,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;QAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1E,CAAC,CAAC;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,kGAAkG;IAClG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC9C,CAAC;CACH;AAED,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,0GAA0G;IAC1G,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,kBAAkB,EAAE,CASjF;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,KACV,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,cAAc,CAAC,CAkF1B"}
1
+ {"version":3,"file":"devtools-chat.d.ts","sourceRoot":"","sources":["../src/devtools-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAEhB,KAAK,cAAc,EAQnB,KAAK,wBAAwB,EAE9B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAIxE,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,QAA6B,CAAC;AAI7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC9C,CAAC;CACH;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,kBAAkB,EAAE,CASjF;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,cAAc,CAAC,CA+D1B;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAKzB"}
@@ -7,12 +7,17 @@
7
7
  * This is an extension of `dev`'s local, loopback-only tool exercise, not a general MCP client (ADR 0043):
8
8
  * the agent can only reach the tools of the local server the devtools session is already previewing.
9
9
  */
10
- /** The default model overridable per session via `--model` or `OPENAI_MODEL`. */
11
- export const DEFAULT_CHAT_MODEL = 'gpt-5.5';
10
+ import { runAnthropicChatTurn } from './devtools-chat-anthropic.js';
11
+ import { runGeminiChatTurn } from './devtools-chat-gemini.js';
12
+ import { completeTurn, DEFAULT_MAX_ITERATIONS, DEFAULT_REQUEST_TIMEOUT_MS, EMPTY_OBJECT_SCHEMA, limitTurn, parseToolArguments, providerFetch, requireDeclaredTool, } from './devtools-chat-types.js';
13
+ export const DEFAULT_CHAT_MODELS = {
14
+ openai: 'gpt-5.5',
15
+ anthropic: 'claude-opus-5',
16
+ gemini: 'gemini-3.6-flash',
17
+ };
18
+ /** Existing CLI option default. Provider-aware routes use {@link DEFAULT_CHAT_MODELS}. */
19
+ export const DEFAULT_CHAT_MODEL = DEFAULT_CHAT_MODELS.openai;
12
20
  const OPENAI_DEFAULT_BASE = 'https://api.openai.com/v1';
13
- const DEFAULT_MAX_ITERATIONS = 8;
14
- /** Per-request timeout so a hung/slow OpenAI-compatible endpoint can't block the /chat route forever. */
15
- const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
16
21
  /** Project MCP tool defs into OpenAI function-tool schema. */
17
22
  export function toOpenAiTools(tools) {
18
23
  return tools.map((t) => ({
@@ -20,7 +25,7 @@ export function toOpenAiTools(tools) {
20
25
  function: {
21
26
  name: t.name,
22
27
  ...(t.description ? { description: t.description } : {}),
23
- parameters: t.inputSchema ?? { type: 'object', properties: {} },
28
+ parameters: t.inputSchema ?? EMPTY_OBJECT_SCHEMA,
24
29
  },
25
30
  }));
26
31
  }
@@ -40,34 +45,15 @@ export async function runChatTurn(opts) {
40
45
  for (let iteration = 0; iteration < maxIterations; iteration += 1) {
41
46
  // Bound each request: a hung OpenAI-compatible endpoint (BYO baseUrl/key) must not block the /chat
42
47
  // route forever. Abort after timeoutMs and surface it as a clear timeout error, not a raw AbortError.
43
- const controller = new AbortController();
44
- const timer = setTimeout(() => controller.abort(), timeoutMs);
45
- let res;
46
- try {
47
- res = await doFetch(`${base}/chat/completions`, {
48
- method: 'POST',
49
- headers: { 'content-type': 'application/json', authorization: `Bearer ${opts.apiKey}` },
50
- body: JSON.stringify({
51
- model: opts.model,
52
- messages,
53
- ...(openAiTools.length > 0 ? { tools: openAiTools, tool_choice: 'auto' } : {}),
54
- }),
55
- signal: controller.signal,
56
- });
57
- }
58
- catch (error) {
59
- if (controller.signal.aborted) {
60
- throw new Error(`OpenAI request timed out after ${Math.round(timeoutMs / 1000)}s`);
61
- }
62
- throw error;
63
- }
64
- finally {
65
- clearTimeout(timer);
66
- }
67
- if (!res.ok) {
68
- const detail = await res.text().catch(() => '');
69
- throw new Error(`OpenAI request failed (${res.status}): ${detail.slice(0, 500)}`);
70
- }
48
+ const res = await providerFetch('OpenAI', doFetch, `${base}/chat/completions`, {
49
+ method: 'POST',
50
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${opts.apiKey}` },
51
+ body: JSON.stringify({
52
+ model: opts.model,
53
+ messages,
54
+ ...(openAiTools.length > 0 ? { tools: openAiTools, tool_choice: 'auto' } : {}),
55
+ }),
56
+ }, timeoutMs);
71
57
  const data = (await res.json());
72
58
  const message = data.choices?.[0]?.message;
73
59
  if (!message)
@@ -82,21 +68,16 @@ export async function runChatTurn(opts) {
82
68
  };
83
69
  }
84
70
  for (const call of calls) {
85
- let args = {};
86
- try {
87
- args = call.function.arguments ? JSON.parse(call.function.arguments) : {};
88
- }
89
- catch {
90
- args = {};
91
- }
92
- const def = byName.get(call.function.name);
71
+ const def = requireDeclaredTool(byName, call.function.name);
72
+ const args = parseToolArguments(call.function.arguments);
93
73
  const { result, isError } = await opts.callTool(call.function.name, args);
94
74
  toolCalls.push({
75
+ id: call.id,
95
76
  name: call.function.name,
96
77
  arguments: args,
97
78
  result,
98
79
  isError,
99
- ...(def?.resourceUri ? { resourceUri: def.resourceUri } : {}),
80
+ ...(def.resourceUri ? { resourceUri: def.resourceUri } : {}),
100
81
  });
101
82
  messages.push({
102
83
  role: 'tool',
@@ -105,10 +86,14 @@ export async function runChatTurn(opts) {
105
86
  });
106
87
  }
107
88
  }
108
- return {
109
- messages,
110
- toolCalls,
111
- text: 'Stopped after reaching the tool-call limit for this turn. Ask a follow-up to continue.',
112
- };
89
+ return limitTurn({ ...opts, provider: 'openai' }, toolCalls);
90
+ }
91
+ export async function runProviderChatTurn(input) {
92
+ if (input.provider === 'anthropic')
93
+ return runAnthropicChatTurn(input);
94
+ if (input.provider === 'gemini')
95
+ return runGeminiChatTurn(input);
96
+ const result = await runChatTurn(input);
97
+ return completeTurn(input, result.text, result.toolCalls);
113
98
  }
114
99
  //# sourceMappingURL=devtools-chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools-chat.js","sourceRoot":"","sources":["../src/devtools-chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devtools-chat.js","sourceRoot":"","sources":["../src/devtools-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Sticky response actions and copy-to-check feedback for developer output. */
2
+ export declare const DEVTOOLS_COPY_STYLES = "\n.result__bar{\n position:sticky;\n top:0;\n z-index:2;\n display:flex;\n align-items:center;\n justify-content:space-between;\n gap:12px;\n min-height:42px;\n padding:0 2px 10px;\n background:linear-gradient(180deg,rgba(8,8,10,.99) 74%,rgba(8,8,10,0));\n}\n.copy-action{\n display:inline-flex;\n min-height:30px;\n align-items:center;\n gap:7px;\n padding:6px 10px;\n border:0;\n border-radius:999px;\n background:rgba(255,255,255,.055);\n color:var(--nd-muted);\n font-size:10.5px;\n font-weight:620;\n cursor:pointer;\n transition:background .18s ease,color .18s ease,transform .18s ease;\n}\n.copy-action:hover{background:rgba(255,255,255,.09);color:var(--nd-text);transform:translateY(-1px)}\n.copy-action__icons{position:relative;display:block;width:14px;height:14px}\n.copy-action svg{\n position:absolute;\n inset:0;\n width:14px;\n height:14px;\n transition:opacity .16s ease,transform .16s ease;\n}\n.copy-action__check{opacity:0;transform:scale(.72) rotate(-12deg)}\n.copy-action.is-copied{color:var(--nd-success)}\n.copy-action.is-copied .copy-action__copy{opacity:0;transform:scale(.72) rotate(12deg)}\n.copy-action.is-copied .copy-action__check{opacity:1;transform:scale(1) rotate(0)}\n.sr-only{\n position:absolute!important;\n width:1px!important;\n height:1px!important;\n padding:0!important;\n overflow:hidden!important;\n clip:rect(0,0,0,0)!important;\n white-space:nowrap!important;\n border:0!important;\n}\n";
3
+ //# sourceMappingURL=devtools-copy-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-copy-styles.d.ts","sourceRoot":"","sources":["../src/devtools-copy-styles.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,g8CAmDhC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /** Sticky response actions and copy-to-check feedback for developer output. */
2
+ export const DEVTOOLS_COPY_STYLES = `
3
+ .result__bar{
4
+ position:sticky;
5
+ top:0;
6
+ z-index:2;
7
+ display:flex;
8
+ align-items:center;
9
+ justify-content:space-between;
10
+ gap:12px;
11
+ min-height:42px;
12
+ padding:0 2px 10px;
13
+ background:linear-gradient(180deg,rgba(8,8,10,.99) 74%,rgba(8,8,10,0));
14
+ }
15
+ .copy-action{
16
+ display:inline-flex;
17
+ min-height:30px;
18
+ align-items:center;
19
+ gap:7px;
20
+ padding:6px 10px;
21
+ border:0;
22
+ border-radius:999px;
23
+ background:rgba(255,255,255,.055);
24
+ color:var(--nd-muted);
25
+ font-size:10.5px;
26
+ font-weight:620;
27
+ cursor:pointer;
28
+ transition:background .18s ease,color .18s ease,transform .18s ease;
29
+ }
30
+ .copy-action:hover{background:rgba(255,255,255,.09);color:var(--nd-text);transform:translateY(-1px)}
31
+ .copy-action__icons{position:relative;display:block;width:14px;height:14px}
32
+ .copy-action svg{
33
+ position:absolute;
34
+ inset:0;
35
+ width:14px;
36
+ height:14px;
37
+ transition:opacity .16s ease,transform .16s ease;
38
+ }
39
+ .copy-action__check{opacity:0;transform:scale(.72) rotate(-12deg)}
40
+ .copy-action.is-copied{color:var(--nd-success)}
41
+ .copy-action.is-copied .copy-action__copy{opacity:0;transform:scale(.72) rotate(12deg)}
42
+ .copy-action.is-copied .copy-action__check{opacity:1;transform:scale(1) rotate(0)}
43
+ .sr-only{
44
+ position:absolute!important;
45
+ width:1px!important;
46
+ height:1px!important;
47
+ padding:0!important;
48
+ overflow:hidden!important;
49
+ clip:rect(0,0,0,0)!important;
50
+ white-space:nowrap!important;
51
+ border:0!important;
52
+ }
53
+ `;
54
+ //# sourceMappingURL=devtools-copy-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-copy-styles.js","sourceRoot":"","sources":["../src/devtools-copy-styles.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDnC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Quiet placeholder for the future visual annotation workflow. */
2
+ export declare const DEVTOOLS_DESIGN_HTML: string;
3
+ /** Styles are isolated so the core devtools stylesheet stays below the repository size threshold. */
4
+ export declare const DEVTOOLS_DESIGN_STYLES = "\n.mode--design{display:inline-flex;min-width:104px;align-items:center;justify-content:center;gap:7px}\n.mode__soon{\n padding:2px 5px;\n border-radius:999px;\n background:rgba(244,63,94,.11);\n color:#fb7185;\n font-size:7px;\n font-weight:750;\n letter-spacing:.06em;\n line-height:1.35;\n text-transform:uppercase;\n}\n.mode--design.is-active .mode__soon{background:rgba(249,115,22,.16);color:#fdba74}\n#design-view{\n min-height:0;\n flex:1;\n overflow:auto;\n padding:clamp(28px,5vw,72px);\n}\n.design-view{align-items:center;justify-content:center;text-align:center}\n.design-placeholder{\n display:grid;\n width:min(560px,100%);\n place-items:center;\n gap:14px;\n margin:auto;\n}\n.design-placeholder h3{\n margin:0;\n color:var(--nd-text);\n font-size:clamp(30px,4vw,52px);\n font-weight:560;\n letter-spacing:-.05em;\n line-height:1.02;\n}\n.design-placeholder p{\n margin:0;\n color:#f59e0b;\n font-family:var(--nd-mono);\n font-size:10px;\n font-weight:700;\n letter-spacing:.14em;\n text-transform:uppercase;\n}\n@media (max-width:560px){\n #design-view{padding:28px 18px}\n .mode{min-width:66px;padding-left:10px;padding-right:10px}\n .mode--design{min-width:92px}\n}\n";
5
+ //# sourceMappingURL=devtools-design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-design.d.ts","sourceRoot":"","sources":["../src/devtools-design.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,QAOvB,CAAC;AAEX,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,ssCAkDlC,CAAC"}
@@ -0,0 +1,62 @@
1
+ /** Quiet placeholder for the future visual annotation workflow. */
2
+ export const DEVTOOLS_DESIGN_HTML = [
3
+ '<div id="design-view" class="design-view hidden" role="tabpanel" aria-labelledby="mode-design">',
4
+ '<section class="design-placeholder" aria-labelledby="design-title">',
5
+ '<h3 id="design-title">Fine-tune the widget you already built</h3>',
6
+ '<p>Coming soon.</p>',
7
+ '</section>',
8
+ '</div>',
9
+ ].join('');
10
+ /** Styles are isolated so the core devtools stylesheet stays below the repository size threshold. */
11
+ export const DEVTOOLS_DESIGN_STYLES = `
12
+ .mode--design{display:inline-flex;min-width:104px;align-items:center;justify-content:center;gap:7px}
13
+ .mode__soon{
14
+ padding:2px 5px;
15
+ border-radius:999px;
16
+ background:rgba(244,63,94,.11);
17
+ color:#fb7185;
18
+ font-size:7px;
19
+ font-weight:750;
20
+ letter-spacing:.06em;
21
+ line-height:1.35;
22
+ text-transform:uppercase;
23
+ }
24
+ .mode--design.is-active .mode__soon{background:rgba(249,115,22,.16);color:#fdba74}
25
+ #design-view{
26
+ min-height:0;
27
+ flex:1;
28
+ overflow:auto;
29
+ padding:clamp(28px,5vw,72px);
30
+ }
31
+ .design-view{align-items:center;justify-content:center;text-align:center}
32
+ .design-placeholder{
33
+ display:grid;
34
+ width:min(560px,100%);
35
+ place-items:center;
36
+ gap:14px;
37
+ margin:auto;
38
+ }
39
+ .design-placeholder h3{
40
+ margin:0;
41
+ color:var(--nd-text);
42
+ font-size:clamp(30px,4vw,52px);
43
+ font-weight:560;
44
+ letter-spacing:-.05em;
45
+ line-height:1.02;
46
+ }
47
+ .design-placeholder p{
48
+ margin:0;
49
+ color:#f59e0b;
50
+ font-family:var(--nd-mono);
51
+ font-size:10px;
52
+ font-weight:700;
53
+ letter-spacing:.14em;
54
+ text-transform:uppercase;
55
+ }
56
+ @media (max-width:560px){
57
+ #design-view{padding:28px 18px}
58
+ .mode{min-width:66px;padding-left:10px;padding-right:10px}
59
+ .mode--design{min-width:92px}
60
+ }
61
+ `;
62
+ //# sourceMappingURL=devtools-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-design.js","sourceRoot":"","sources":["../src/devtools-design.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iGAAiG;IACjG,qEAAqE;IACrE,mEAAmE;IACnE,qBAAqB;IACrB,YAAY;IACZ,QAAQ;CACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX,qGAAqG;AACrG,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDrC,CAAC"}
@@ -8,6 +8,8 @@
8
8
  */
9
9
  export type PreviewTheme = 'light' | 'dark' | 'both';
10
10
  export type PreviewDevice = 'desktop' | 'mobile' | 'both';
11
+ /** Convert a native range value to a clamped percentage using its actual, non-zero bounds. */
12
+ export declare function calculateRangeProgress(value: number, min: number, max: number): number;
11
13
  /** Build the classic (non-module) `window.openai` shim injected ahead of the deferred widget bridge. */
12
14
  export declare function openAiShimScript(init: {
13
15
  readonly toolInput?: unknown;
@@ -23,7 +25,5 @@ export declare function harnessHtml(options: {
23
25
  readonly mcpUrl: string;
24
26
  readonly theme: PreviewTheme;
25
27
  readonly device: PreviewDevice;
26
- /** True when the server already has an OPENAI_API_KEY, so the chat key-entry gate can be skipped. */
27
- readonly hasServerKey?: boolean;
28
28
  }): string;
29
29
  //# sourceMappingURL=devtools-harness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools-harness.d.ts","sourceRoot":"","sources":["../src/devtools-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAgB1D,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC,GAAG,MAAM,CA8BT;AAUD,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAcvE;AAcD,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,qGAAqG;IACrG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,MAAM,CA8ET"}
1
+ {"version":3,"file":"devtools-harness.d.ts","sourceRoot":"","sources":["../src/devtools-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,8FAA8F;AAC9F,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtF;AAgBD,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC,GAAG,MAAM,CA8BT;AAUD,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAcvE;AAMD,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,GAAG,MAAM,CAkHT"}