@profoundlogic/coderflow-server 0.2.5 → 0.2.7
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/dist/base-image/Dockerfile +5 -0
- package/dist/base-image/agent-wrapper.sh +12 -2
- package/dist/coder-server.js +1 -1
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.js +1 -1
- package/dist/lib/api-keys.js +1 -1
- package/dist/lib/apiKeys.js +1 -1
- package/dist/lib/app-server-ports.js +1 -1
- package/dist/lib/auto-judge.js +1 -1
- package/dist/lib/basic-auth.js +1 -1
- package/dist/lib/build-history.js +1 -1
- package/dist/lib/build-output-service.js +1 -1
- package/dist/lib/build-scheduler.js +1 -1
- package/dist/lib/build-service.js +1 -1
- package/dist/lib/ca-certificates.js +1 -1
- package/dist/lib/claude-oauth-refresh.js +1 -1
- package/dist/lib/cli/build.js +1 -1
- package/dist/lib/cli/config-command.js +1 -1
- package/dist/lib/cli/config.js +1 -1
- package/dist/lib/cli/create-user.js +1 -1
- package/dist/lib/cli/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/container-tokens.js +1 -1
- package/dist/lib/data-dir.js +1 -1
- package/dist/lib/deployment-history.js +1 -1
- package/dist/lib/deployment-service.js +1 -1
- package/dist/lib/docker-utils.js +1 -1
- package/dist/lib/email.js +1 -1
- package/dist/lib/emailTemplates.js +1 -1
- package/dist/lib/entitlement.js +1 -1
- package/dist/lib/fetch-utils.js +1 -1
- package/dist/lib/git-commit-details-route.js +1 -1
- package/dist/lib/git-history-diff-guardrails.js +1 -1
- package/dist/lib/git-provider-service.js +1 -1
- package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
- package/dist/lib/git-provider-setup/index.js +1 -1
- package/dist/lib/git-provider-setup/setup-factory.js +1 -1
- package/dist/lib/git-provider-setup/setup-interface.js +1 -1
- package/dist/lib/git-providers/azure-devops-provider.js +1 -1
- package/dist/lib/git-providers/github-app-provider.js +1 -1
- package/dist/lib/git-providers/index.js +1 -1
- package/dist/lib/git-providers/provider-factory.js +1 -1
- package/dist/lib/git-providers/provider-interface.js +1 -1
- package/dist/lib/github-urls.js +1 -1
- package/dist/lib/group-objective-linking.js +1 -0
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -0
- package/dist/lib/logger.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.js +1 -1
- package/dist/lib/oidc-auth.js +1 -1
- package/dist/lib/oidc-device-flow.js +1 -1
- package/dist/lib/passwordTokens.js +1 -1
- package/dist/lib/pin-cascade.js +1 -1
- package/dist/lib/provider-accounts.js +1 -1
- package/dist/lib/provider-oauth.js +1 -1
- package/dist/lib/provider-profile.js +1 -1
- package/dist/lib/provider-token-refresh.js +1 -1
- package/dist/lib/request-url.js +1 -1
- package/dist/lib/rewind.js +1 -1
- package/dist/lib/roles.js +1 -1
- package/dist/lib/secrets.js +1 -1
- package/dist/lib/setup-repo-git-auth.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-name-generator.js +1 -1
- package/dist/lib/user-git-oauth.js +1 -1
- package/dist/lib/user-git-tokens.js +1 -1
- package/dist/lib/users.js +1 -1
- package/dist/middleware/requireAuth.js +1 -1
- package/dist/middleware/requireInit.js +1 -1
- package/dist/middleware/requirePermission.js +1 -1
- package/dist/package.json +1 -1
- package/dist/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/build.js +1 -1
- package/dist/routes/containers.js +1 -1
- package/dist/routes/deploy-task.js +1 -1
- package/dist/routes/environment-management.js +1 -1
- package/dist/routes/environments.js +1 -1
- package/dist/routes/external-skills.js +1 -1
- package/dist/routes/git-credentials.js +1 -1
- package/dist/routes/git-oauth.js +1 -1
- package/dist/routes/git-provider-setup.js +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/jira.js +1 -1
- package/dist/routes/objective-management.js +1 -1
- package/dist/routes/password.js +1 -1
- package/dist/routes/prompt.js +1 -1
- package/dist/routes/provider-auth.js +1 -1
- package/dist/routes/qa.js +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/skill-management.js +1 -1
- package/dist/routes/skills.js +1 -1
- package/dist/routes/tasks.js +1 -1
- package/dist/routes/templates.js +1 -1
- package/dist/routes/test-task.js +1 -1
- package/dist/routes/test.js +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/visualizations.js +1 -1
- package/dist/scripts/create-user.js +1 -1
- package/dist/start.js +1 -1
- package/dist/web-ui/public/activity-detail-modal.js +1 -1
- package/dist/web-ui/public/activity-feed.js +1 -1
- package/dist/web-ui/public/activity-formatters.js +1 -1
- package/dist/web-ui/public/agent-event-parser.js +1 -1
- package/dist/web-ui/public/app.js +1 -1
- package/dist/web-ui/public/approve-dialog.js +1 -1
- package/dist/web-ui/public/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/environments.html +4 -1
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
- package/dist/web-ui/public/git-history.js +1 -1
- package/dist/web-ui/public/git-status.js +1 -1
- package/dist/web-ui/public/index.html +2 -0
- package/dist/web-ui/public/index.js +1 -1
- package/dist/web-ui/public/login.js +1 -1
- package/dist/web-ui/public/markdown-editor.js +1 -1
- package/dist/web-ui/public/markdown-file-editor.js +1 -1
- package/dist/web-ui/public/modal-maximize.js +1 -1
- package/dist/web-ui/public/notifications.js +1 -1
- package/dist/web-ui/public/server-health.js +1 -1
- package/dist/web-ui/public/settings.css +181 -44
- package/dist/web-ui/public/settings.html +156 -167
- package/dist/web-ui/public/settings.js +1 -1
- package/dist/web-ui/public/setup-password.js +1 -1
- package/dist/web-ui/public/skills.js +1 -1
- package/dist/web-ui/public/sse-client.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +136 -2
- package/dist/web-ui/public/task.js +1 -1
- package/dist/web-ui/public/terminal.js +1 -1
- package/dist/web-ui/public/theme.js +1 -1
- package/dist/web-ui/public/users.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
})();
|
|
24
24
|
</script>
|
|
25
25
|
<link rel="stylesheet" href="styles.css?v=84">
|
|
26
|
-
<link rel="stylesheet" href="settings.css?v=
|
|
26
|
+
<link rel="stylesheet" href="settings.css?v=7">
|
|
27
27
|
<script type="module" src="app.js?v=67"></script>
|
|
28
|
-
<script type="module" src="settings.js?v=
|
|
28
|
+
<script type="module" src="settings.js?v=7"></script>
|
|
29
29
|
</head>
|
|
30
30
|
<body>
|
|
31
31
|
<main class="task-detail">
|
|
@@ -138,19 +138,15 @@
|
|
|
138
138
|
</svg>
|
|
139
139
|
Agent Keepalive
|
|
140
140
|
</button>
|
|
141
|
-
<button class="settings-nav-item" data-section="
|
|
141
|
+
<button class="settings-nav-item" data-section="ai-providers" role="tab">
|
|
142
142
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
143
|
-
<path d="
|
|
143
|
+
<path d="M4 8V4h4"></path>
|
|
144
|
+
<path d="M20 8V4h-4"></path>
|
|
145
|
+
<path d="M4 16v4h4"></path>
|
|
146
|
+
<path d="M20 16v4h-4"></path>
|
|
147
|
+
<rect x="8" y="8" width="8" height="8" rx="2"></rect>
|
|
144
148
|
</svg>
|
|
145
|
-
|
|
146
|
-
</button>
|
|
147
|
-
<button class="settings-nav-item" data-section="provider-auth" role="tab">
|
|
148
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
149
|
-
<path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"></path>
|
|
150
|
-
<polyline points="10 17 15 12 10 7"></polyline>
|
|
151
|
-
<line x1="15" y1="12" x2="3" y2="12"></line>
|
|
152
|
-
</svg>
|
|
153
|
-
Provider Authentication
|
|
149
|
+
AI Providers
|
|
154
150
|
</button>
|
|
155
151
|
<button class="settings-nav-item" data-section="models" role="tab">
|
|
156
152
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
@@ -306,122 +302,26 @@
|
|
|
306
302
|
</div>
|
|
307
303
|
</div>
|
|
308
304
|
|
|
309
|
-
<!--
|
|
310
|
-
<div id="section-
|
|
305
|
+
<!-- AI Providers Settings -->
|
|
306
|
+
<div id="section-ai-providers" class="settings-panel" role="tabpanel" hidden>
|
|
311
307
|
<div class="content-card">
|
|
312
308
|
<div class="card-header">
|
|
313
|
-
<h3>
|
|
309
|
+
<h3>AI Providers</h3>
|
|
314
310
|
</div>
|
|
315
311
|
<div class="card-body" style="padding-top: 8px;">
|
|
316
|
-
<div id="
|
|
317
|
-
<
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
<div class="apikey-header">
|
|
321
|
-
<span class="apikey-name">Claude</span>
|
|
322
|
-
<span class="apikey-provider">Anthropic</span>
|
|
323
|
-
</div>
|
|
324
|
-
<div class="apikey-controls">
|
|
325
|
-
<div class="apikey-input-group">
|
|
326
|
-
<input type="password" id="apikey-claude" class="form-input code-font" placeholder="sk-ant-...">
|
|
327
|
-
<button type="button" class="btn-icon apikey-toggle-visibility" data-target="apikey-claude" title="Toggle visibility">
|
|
328
|
-
<svg class="eye-open" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
329
|
-
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
|
|
330
|
-
<circle cx="12" cy="12" r="3"></circle>
|
|
331
|
-
</svg>
|
|
332
|
-
<svg class="eye-closed" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display: none;">
|
|
333
|
-
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
|
|
334
|
-
<line x1="1" y1="1" x2="23" y2="23"></line>
|
|
335
|
-
</svg>
|
|
336
|
-
</button>
|
|
337
|
-
</div>
|
|
338
|
-
<label class="toggle-switch" title="Enable for AI tasks">
|
|
339
|
-
<input type="checkbox" id="apikey-claude-enabled">
|
|
340
|
-
<span class="toggle-slider"></span>
|
|
341
|
-
</label>
|
|
342
|
-
</div>
|
|
343
|
-
</div>
|
|
344
|
-
|
|
345
|
-
<!-- Codex (OpenAI) -->
|
|
346
|
-
<div class="apikey-row">
|
|
347
|
-
<div class="apikey-header">
|
|
348
|
-
<span class="apikey-name">Codex</span>
|
|
349
|
-
<span class="apikey-provider">OpenAI</span>
|
|
350
|
-
</div>
|
|
351
|
-
<div class="apikey-controls">
|
|
352
|
-
<div class="apikey-input-group">
|
|
353
|
-
<input type="password" id="apikey-codex" class="form-input code-font" placeholder="sk-...">
|
|
354
|
-
<button type="button" class="btn-icon apikey-toggle-visibility" data-target="apikey-codex" title="Toggle visibility">
|
|
355
|
-
<svg class="eye-open" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
356
|
-
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
|
|
357
|
-
<circle cx="12" cy="12" r="3"></circle>
|
|
358
|
-
</svg>
|
|
359
|
-
<svg class="eye-closed" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display: none;">
|
|
360
|
-
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
|
|
361
|
-
<line x1="1" y1="1" x2="23" y2="23"></line>
|
|
362
|
-
</svg>
|
|
363
|
-
</button>
|
|
364
|
-
</div>
|
|
365
|
-
<label class="toggle-switch" title="Enable for AI tasks">
|
|
366
|
-
<input type="checkbox" id="apikey-codex-enabled">
|
|
367
|
-
<span class="toggle-slider"></span>
|
|
368
|
-
</label>
|
|
369
|
-
</div>
|
|
370
|
-
</div>
|
|
371
|
-
|
|
372
|
-
<!-- Gemini (Google) -->
|
|
373
|
-
<div class="apikey-row">
|
|
374
|
-
<div class="apikey-header">
|
|
375
|
-
<span class="apikey-name">Gemini</span>
|
|
376
|
-
<span class="apikey-provider">Google</span>
|
|
377
|
-
</div>
|
|
378
|
-
<div class="apikey-controls">
|
|
379
|
-
<div class="apikey-input-group">
|
|
380
|
-
<input type="password" id="apikey-gemini" class="form-input code-font" placeholder="AIza...">
|
|
381
|
-
<button type="button" class="btn-icon apikey-toggle-visibility" data-target="apikey-gemini" title="Toggle visibility">
|
|
382
|
-
<svg class="eye-open" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
383
|
-
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
|
|
384
|
-
<circle cx="12" cy="12" r="3"></circle>
|
|
385
|
-
</svg>
|
|
386
|
-
<svg class="eye-closed" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display: none;">
|
|
387
|
-
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
|
|
388
|
-
<line x1="1" y1="1" x2="23" y2="23"></line>
|
|
389
|
-
</svg>
|
|
390
|
-
</button>
|
|
391
|
-
</div>
|
|
392
|
-
<label class="toggle-switch" title="Enable for AI tasks">
|
|
393
|
-
<input type="checkbox" id="apikey-gemini-enabled">
|
|
394
|
-
<span class="toggle-slider"></span>
|
|
395
|
-
</label>
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
</div>
|
|
399
|
-
</div>
|
|
400
|
-
<div class="card-actions">
|
|
401
|
-
<button type="button" class="btn-primary" id="save-apikeys-btn">Save</button>
|
|
402
|
-
</div>
|
|
403
|
-
</div>
|
|
404
|
-
</div>
|
|
405
|
-
|
|
406
|
-
<!-- Provider Authentication Settings -->
|
|
407
|
-
<div id="section-provider-auth" class="settings-panel" role="tabpanel" hidden>
|
|
408
|
-
<div class="content-card">
|
|
409
|
-
<div class="card-header">
|
|
410
|
-
<h3>Provider Authentication</h3>
|
|
411
|
-
</div>
|
|
412
|
-
<div class="card-body" style="padding-top: 8px;">
|
|
413
|
-
<div id="provider-auth-inline-message" class="inline-message" hidden></div>
|
|
414
|
-
<p class="text-muted" style="margin-bottom: 16px;">Sign in to AI provider accounts. Multiple accounts can be connected per provider.</p>
|
|
312
|
+
<div id="ai-providers-inline-message" class="inline-message" hidden></div>
|
|
313
|
+
<p class="text-muted" style="margin-bottom: 16px;">
|
|
314
|
+
Connect OAuth accounts and API key accounts in one place. The active account determines how credentials are injected into tasks.
|
|
315
|
+
</p>
|
|
415
316
|
|
|
416
317
|
<div class="provider-auth-list">
|
|
417
|
-
<!-- Claude (Anthropic) -->
|
|
418
318
|
<div class="provider-auth-section" data-provider="claude">
|
|
419
319
|
<div class="provider-auth-header-row">
|
|
420
320
|
<div class="provider-auth-title">
|
|
421
321
|
<span class="provider-name">Claude</span>
|
|
422
322
|
<span class="provider-company">Anthropic</span>
|
|
423
323
|
</div>
|
|
424
|
-
<button class="btn-primary btn-small" id="provider-claude-add-btn">
|
|
324
|
+
<button class="btn-primary btn-small ai-provider-add-btn" id="provider-claude-add-btn">
|
|
425
325
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 4px; vertical-align: -1px;">
|
|
426
326
|
<line x1="12" y1="5" x2="12" y2="19"></line>
|
|
427
327
|
<line x1="5" y1="12" x2="19" y2="12"></line>
|
|
@@ -434,14 +334,13 @@
|
|
|
434
334
|
</div>
|
|
435
335
|
</div>
|
|
436
336
|
|
|
437
|
-
<!-- Codex (OpenAI) -->
|
|
438
337
|
<div class="provider-auth-section" data-provider="codex">
|
|
439
338
|
<div class="provider-auth-header-row">
|
|
440
339
|
<div class="provider-auth-title">
|
|
441
340
|
<span class="provider-name">Codex</span>
|
|
442
341
|
<span class="provider-company">OpenAI</span>
|
|
443
342
|
</div>
|
|
444
|
-
<button class="btn-primary btn-small" id="provider-codex-add-btn">
|
|
343
|
+
<button class="btn-primary btn-small ai-provider-add-btn" id="provider-codex-add-btn">
|
|
445
344
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 4px; vertical-align: -1px;">
|
|
446
345
|
<line x1="12" y1="5" x2="12" y2="19"></line>
|
|
447
346
|
<line x1="5" y1="12" x2="19" y2="12"></line>
|
|
@@ -454,14 +353,13 @@
|
|
|
454
353
|
</div>
|
|
455
354
|
</div>
|
|
456
355
|
|
|
457
|
-
<!-- Gemini (Google) -->
|
|
458
356
|
<div class="provider-auth-section" data-provider="gemini">
|
|
459
357
|
<div class="provider-auth-header-row">
|
|
460
358
|
<div class="provider-auth-title">
|
|
461
359
|
<span class="provider-name">Gemini</span>
|
|
462
360
|
<span class="provider-company">Google</span>
|
|
463
361
|
</div>
|
|
464
|
-
<button class="btn-primary btn-small" id="provider-gemini-add-btn">
|
|
362
|
+
<button class="btn-primary btn-small ai-provider-add-btn" id="provider-gemini-add-btn">
|
|
465
363
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 4px; vertical-align: -1px;">
|
|
466
364
|
<line x1="12" y1="5" x2="12" y2="19"></line>
|
|
467
365
|
<line x1="5" y1="12" x2="19" y2="12"></line>
|
|
@@ -810,71 +708,162 @@
|
|
|
810
708
|
</div>
|
|
811
709
|
</main>
|
|
812
710
|
|
|
813
|
-
<!-- Provider
|
|
814
|
-
<div id="provider-
|
|
711
|
+
<!-- AI Provider Add Account Modal -->
|
|
712
|
+
<div id="ai-provider-add-modal" class="modal" hidden>
|
|
815
713
|
<div class="modal-overlay"></div>
|
|
816
714
|
<div class="modal-content">
|
|
817
715
|
<div class="modal-header">
|
|
818
|
-
<h2 id="provider-
|
|
716
|
+
<h2 id="ai-provider-add-title">Add Account</h2>
|
|
819
717
|
<button type="button" class="modal-close" aria-label="Close">×</button>
|
|
820
718
|
</div>
|
|
821
719
|
<div class="modal-body">
|
|
822
|
-
<div class="
|
|
823
|
-
<
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
</div>
|
|
827
|
-
<button class="btn-primary" id="provider-signin-open-btn" style="width: 100%; margin: 8px 0 16px 0;">
|
|
828
|
-
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 8px; vertical-align: -2px;">
|
|
829
|
-
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
|
|
830
|
-
<polyline points="15 3 21 3 21 9"></polyline>
|
|
831
|
-
<line x1="10" y1="14" x2="21" y2="3"></line>
|
|
832
|
-
</svg>
|
|
833
|
-
Open Sign-In Page
|
|
834
|
-
</button>
|
|
835
|
-
|
|
836
|
-
<div class="signin-step">
|
|
837
|
-
<span class="step-number">2</span>
|
|
838
|
-
<span class="step-text" id="provider-signin-instructions">
|
|
839
|
-
Complete sign-in and copy the authorization code
|
|
840
|
-
</span>
|
|
841
|
-
</div>
|
|
720
|
+
<div class="ai-provider-add-tabs">
|
|
721
|
+
<button type="button" class="ai-provider-tab active" data-tab="oauth">OAuth Sign-In</button>
|
|
722
|
+
<button type="button" class="ai-provider-tab" data-tab="api-key">API Key</button>
|
|
723
|
+
</div>
|
|
842
724
|
|
|
843
|
-
|
|
844
|
-
<div
|
|
845
|
-
<div class="
|
|
846
|
-
<
|
|
847
|
-
|
|
848
|
-
|
|
725
|
+
<div id="ai-provider-tab-oauth" class="ai-provider-tab-content active">
|
|
726
|
+
<div class="signin-steps">
|
|
727
|
+
<div class="signin-step">
|
|
728
|
+
<span class="step-number">1</span>
|
|
729
|
+
<span class="step-text">Open the secure sign-in page</span>
|
|
730
|
+
</div>
|
|
731
|
+
<button class="btn-primary" id="provider-signin-open-btn" style="width: 100%; margin: 8px 0 16px 0;">
|
|
732
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 8px; vertical-align: -2px;">
|
|
733
|
+
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
|
|
734
|
+
<polyline points="15 3 21 3 21 9"></polyline>
|
|
735
|
+
<line x1="10" y1="14" x2="21" y2="3"></line>
|
|
849
736
|
</svg>
|
|
850
|
-
|
|
737
|
+
Open Sign-In Page
|
|
738
|
+
</button>
|
|
739
|
+
|
|
740
|
+
<div class="signin-step">
|
|
741
|
+
<span class="step-number">2</span>
|
|
742
|
+
<span class="step-text" id="provider-signin-instructions">
|
|
743
|
+
Complete sign-in and copy the authorization code
|
|
744
|
+
</span>
|
|
851
745
|
</div>
|
|
852
|
-
|
|
853
|
-
<div class="secure-redirect-
|
|
854
|
-
<
|
|
746
|
+
|
|
747
|
+
<div id="provider-signin-localhost-notice" class="secure-redirect-notice" hidden>
|
|
748
|
+
<div class="secure-redirect-header">
|
|
749
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
750
|
+
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
|
|
751
|
+
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
|
752
|
+
</svg>
|
|
753
|
+
<span>Secure Local Redirect</span>
|
|
754
|
+
</div>
|
|
755
|
+
<p>After signing in, your browser will redirect to a local address. The page won't load; this is expected. Copy the full URL from your browser address bar.</p>
|
|
756
|
+
</div>
|
|
757
|
+
|
|
758
|
+
<div class="form-row" style="margin-top: 12px; grid-template-columns: auto 1fr; gap: 8px;">
|
|
759
|
+
<label for="provider-signin-input" id="provider-signin-label">Authorization Code or URL</label>
|
|
760
|
+
<input type="text" id="provider-signin-input" class="form-input code-font" placeholder="Paste code or URL here">
|
|
761
|
+
</div>
|
|
762
|
+
|
|
763
|
+
<div class="signin-step" style="margin-top: 16px;">
|
|
764
|
+
<span class="step-number">3</span>
|
|
765
|
+
<span class="step-text">Name this account</span>
|
|
766
|
+
</div>
|
|
767
|
+
<div class="form-row" style="margin-top: 8px; grid-template-columns: auto 1fr; gap: 8px;">
|
|
768
|
+
<label for="provider-signin-label-input">Account Label</label>
|
|
769
|
+
<input type="text" id="provider-signin-label-input" class="form-input" placeholder="e.g., Production, Team Account">
|
|
855
770
|
</div>
|
|
856
771
|
</div>
|
|
772
|
+
</div>
|
|
857
773
|
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
<
|
|
861
|
-
|
|
774
|
+
<div id="ai-provider-tab-api-key" class="ai-provider-tab-content">
|
|
775
|
+
<div class="form-single-column" style="max-width: 100%;">
|
|
776
|
+
<div class="form-row">
|
|
777
|
+
<label for="ai-provider-api-key-label">Account Label</label>
|
|
778
|
+
<input type="text" id="ai-provider-api-key-label" class="form-input" placeholder="e.g., Production Key">
|
|
779
|
+
</div>
|
|
780
|
+
<div class="form-row">
|
|
781
|
+
<label for="ai-provider-api-key-input">API Key</label>
|
|
782
|
+
<div class="apikey-input-group">
|
|
783
|
+
<input type="password" id="ai-provider-api-key-input" class="form-input code-font" placeholder="Paste API key">
|
|
784
|
+
<button type="button" class="btn-icon apikey-toggle-visibility" data-target="ai-provider-api-key-input" title="Toggle visibility">
|
|
785
|
+
<svg class="eye-open" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
786
|
+
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
|
|
787
|
+
<circle cx="12" cy="12" r="3"></circle>
|
|
788
|
+
</svg>
|
|
789
|
+
<svg class="eye-closed" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
|
|
790
|
+
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
|
|
791
|
+
<line x1="1" y1="1" x2="23" y2="23"></line>
|
|
792
|
+
</svg>
|
|
793
|
+
</button>
|
|
794
|
+
</div>
|
|
795
|
+
</div>
|
|
796
|
+
<div class="form-row">
|
|
797
|
+
<label for="ai-provider-api-key-endpoint-enabled">Custom Endpoint</label>
|
|
798
|
+
<label class="toggle-switch">
|
|
799
|
+
<input type="checkbox" id="ai-provider-api-key-endpoint-enabled">
|
|
800
|
+
<span class="toggle-slider"></span>
|
|
801
|
+
</label>
|
|
802
|
+
</div>
|
|
803
|
+
<div id="ai-provider-api-key-endpoint-fields" class="apikey-endpoint-fields" hidden>
|
|
804
|
+
<label class="apikey-endpoint-field-label" for="ai-provider-api-key-base-url">Base URL</label>
|
|
805
|
+
<input type="text" id="ai-provider-api-key-base-url" class="form-input code-font" placeholder="https://your-endpoint.example.com">
|
|
806
|
+
<label class="apikey-endpoint-field-label" for="ai-provider-api-key-api-version">API Version (optional)</label>
|
|
807
|
+
<input type="text" id="ai-provider-api-key-api-version" class="form-input code-font" placeholder="2025-04-01-preview">
|
|
808
|
+
</div>
|
|
862
809
|
</div>
|
|
810
|
+
</div>
|
|
811
|
+
</div>
|
|
812
|
+
<div class="modal-actions">
|
|
813
|
+
<button type="button" class="btn-secondary" id="ai-provider-add-cancel-btn">Cancel</button>
|
|
814
|
+
<button type="button" class="btn-primary" id="ai-provider-add-submit-btn">Complete Sign-In</button>
|
|
815
|
+
</div>
|
|
816
|
+
</div>
|
|
817
|
+
</div>
|
|
863
818
|
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
819
|
+
<!-- Edit API Key Modal -->
|
|
820
|
+
<div id="ai-provider-edit-api-key-modal" class="modal" hidden>
|
|
821
|
+
<div class="modal-overlay"></div>
|
|
822
|
+
<div class="modal-content">
|
|
823
|
+
<div class="modal-header">
|
|
824
|
+
<h2>Edit API Key Account</h2>
|
|
825
|
+
<button type="button" class="modal-close" aria-label="Close">×</button>
|
|
826
|
+
</div>
|
|
827
|
+
<div class="modal-body">
|
|
828
|
+
<div class="form-single-column" style="max-width: 100%;">
|
|
829
|
+
<div class="form-row">
|
|
830
|
+
<label for="ai-provider-edit-label">Account Label</label>
|
|
831
|
+
<input type="text" id="ai-provider-edit-label" class="form-input" placeholder="e.g., Production Key">
|
|
832
|
+
</div>
|
|
833
|
+
<div class="form-row">
|
|
834
|
+
<label for="ai-provider-edit-api-key">API Key</label>
|
|
835
|
+
<div class="apikey-input-group">
|
|
836
|
+
<input type="password" id="ai-provider-edit-api-key" class="form-input code-font" placeholder="Leave blank to keep existing">
|
|
837
|
+
<button type="button" class="btn-icon apikey-toggle-visibility" data-target="ai-provider-edit-api-key" title="Toggle visibility">
|
|
838
|
+
<svg class="eye-open" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
839
|
+
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
|
|
840
|
+
<circle cx="12" cy="12" r="3"></circle>
|
|
841
|
+
</svg>
|
|
842
|
+
<svg class="eye-closed" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
|
|
843
|
+
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
|
|
844
|
+
<line x1="1" y1="1" x2="23" y2="23"></line>
|
|
845
|
+
</svg>
|
|
846
|
+
</button>
|
|
847
|
+
</div>
|
|
848
|
+
</div>
|
|
849
|
+
<div class="form-row">
|
|
850
|
+
<label for="ai-provider-edit-endpoint-enabled">Custom Endpoint</label>
|
|
851
|
+
<label class="toggle-switch">
|
|
852
|
+
<input type="checkbox" id="ai-provider-edit-endpoint-enabled">
|
|
853
|
+
<span class="toggle-slider"></span>
|
|
854
|
+
</label>
|
|
867
855
|
</div>
|
|
868
|
-
<div
|
|
869
|
-
<label for="provider-
|
|
870
|
-
<input type="text" id="provider-
|
|
871
|
-
|
|
856
|
+
<div id="ai-provider-edit-endpoint-fields" class="apikey-endpoint-fields" hidden>
|
|
857
|
+
<label class="apikey-endpoint-field-label" for="ai-provider-edit-base-url">Base URL</label>
|
|
858
|
+
<input type="text" id="ai-provider-edit-base-url" class="form-input code-font" placeholder="https://your-endpoint.example.com">
|
|
859
|
+
<label class="apikey-endpoint-field-label" for="ai-provider-edit-api-version">API Version (optional)</label>
|
|
860
|
+
<input type="text" id="ai-provider-edit-api-version" class="form-input code-font" placeholder="2025-04-01-preview">
|
|
872
861
|
</div>
|
|
873
862
|
</div>
|
|
874
863
|
</div>
|
|
875
864
|
<div class="modal-actions">
|
|
876
|
-
<button type="button" class="btn-secondary" id="provider-
|
|
877
|
-
<button type="button" class="btn-primary" id="provider-
|
|
865
|
+
<button type="button" class="btn-secondary" id="ai-provider-edit-cancel-btn">Cancel</button>
|
|
866
|
+
<button type="button" class="btn-primary" id="ai-provider-edit-save-btn">Save</button>
|
|
878
867
|
</div>
|
|
879
868
|
</div>
|
|
880
869
|
</div>
|