manifest 5.44.0 → 5.45.1

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 (46) hide show
  1. package/dist/backend/analytics/services/message-details.service.js +1 -0
  2. package/dist/backend/analytics/services/messages-query.service.js +1 -0
  3. package/dist/backend/common/middleware/http-error-logger.middleware.js +19 -0
  4. package/dist/backend/database/database.module.js +2 -0
  5. package/dist/backend/database/migrations/1775000000000-AddErrorHttpStatus.js +18 -0
  6. package/dist/backend/entities/agent-message.entity.js +5 -0
  7. package/dist/backend/main.js +2 -1
  8. package/dist/backend/public-stats/public-stats.service.js +23 -6
  9. package/dist/backend/routing/proxy/proxy-message-recorder.js +2 -0
  10. package/dist/backend/routing/proxy/proxy-response-handler.js +1 -1
  11. package/dist/index.js +14 -8
  12. package/dist/openclaw.plugin.json +1 -1
  13. package/dist/server.d.ts +1 -0
  14. package/openclaw.plugin.json +1 -1
  15. package/package.json +1 -1
  16. package/public/assets/{Account-zQzvTzY5.js → Account-C5g6WhPe.js} +1 -1
  17. package/public/assets/{AuthBadge-zJLfTd7g.js → AuthBadge-Dj2KkXRW.js} +1 -1
  18. package/public/assets/{ConnectProvider-CijtACuN.js → ConnectProvider-axzk92LC.js} +1 -1
  19. package/public/assets/{CopyButton-DlLfDy-9.js → CopyButton-BWMVlK2w.js} +1 -1
  20. package/public/assets/{FreeModels-CxCyPQ1u.js → FreeModels-D14GhDL_.js} +1 -1
  21. package/public/assets/{Help-CR2U5i6U.js → Help-ifWIlcDo.js} +1 -1
  22. package/public/assets/{Limits-BFY5lLxN.js → Limits-Xgc4xTl5.js} +1 -1
  23. package/public/assets/{Login-BdBBgvkK.js → Login-DMXD4PMZ.js} +1 -1
  24. package/public/assets/{MessageLog-DnWLFpnv.js → MessageLog-DoriYlHo.js} +1 -1
  25. package/public/assets/{ModelPrices-B5e9PrSU.js → ModelPrices-MhBT_7Zb.js} +1 -1
  26. package/public/assets/Overview-Bi9FuoLx.js +1 -0
  27. package/public/assets/{Pagination-Ctujg2Tx.js → Pagination-D8BOkffh.js} +1 -1
  28. package/public/assets/ProviderTokens-Cu2RUqQG.js +1 -0
  29. package/public/assets/{Register-DSkxK2OW.js → Register-CrovWG_d.js} +1 -1
  30. package/public/assets/{ResetPassword-t4R6xn-I.js → ResetPassword-C6B1ubhL.js} +1 -1
  31. package/public/assets/{Routing-Otvyer_1.js → Routing-B-On2pvv.js} +1 -1
  32. package/public/assets/{Settings-DB4Cb5ot.js → Settings-BH-xNoID.js} +1 -1
  33. package/public/assets/{SetupStepAddProvider-D3OEzrCA.js → SetupStepAddProvider-CSNkQmoC.js} +2 -2
  34. package/public/assets/{SocialButtons-CEq5n4xZ.js → SocialButtons-DudwEJ6b.js} +1 -1
  35. package/public/assets/{auth-DmX5tAfx.js → auth-CU91cd7V.js} +1 -1
  36. package/public/assets/chart-utils-DTt1NOye.js +1 -0
  37. package/public/assets/index-C4Qw7vZo.js +2 -0
  38. package/public/assets/{index-nVifXYeY.css → index-DhaXpWfr.css} +1 -1
  39. package/public/assets/{model-display-C1JaCTzE.js → model-display-DHwvDtl4.js} +1 -1
  40. package/public/assets/{overview-CheX4llv.js → overview-DKLGwfLs.js} +1 -1
  41. package/public/assets/{routing-DEZq9Ja8.js → routing-CLLAl6kl.js} +1 -1
  42. package/public/assets/{routing-utils-DH67yPsd.js → routing-utils-CHapjwyd.js} +1 -1
  43. package/public/assets/{vendor-pl6Q4jbW.js → vendor-C-Y5oNOq.js} +1 -1
  44. package/public/index.html +4 -4
  45. package/public/assets/Overview-DRj_bQH9.js +0 -1
  46. package/public/assets/index-onE2M38p.js +0 -2
@@ -79,6 +79,7 @@ let MessageDetailsService = class MessageDetailsService {
79
79
  model: message.model,
80
80
  status: message.status,
81
81
  error_message: message.error_message,
82
+ error_http_status: message.error_http_status,
82
83
  description: message.description,
83
84
  service_type: message.service_type,
84
85
  input_tokens: message.input_tokens,
@@ -93,6 +93,7 @@ let MessagesQueryService = class MessagesQueryService {
93
93
  .addSelect('at.cache_creation_tokens', 'cache_creation_tokens')
94
94
  .addSelect('at.duration_ms', 'duration_ms')
95
95
  .addSelect('at.error_message', 'error_message')
96
+ .addSelect('at.error_http_status', 'error_http_status')
96
97
  .addSelect('at.auth_type', 'auth_type')
97
98
  .addSelect('at.fallback_from_model', 'fallback_from_model')
98
99
  .addSelect('at.fallback_index', 'fallback_index');
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpErrorLogger = httpErrorLogger;
4
+ const common_1 = require("@nestjs/common");
5
+ const logger = new common_1.Logger('HttpErrors');
6
+ function httpErrorLogger(req, res, next) {
7
+ const start = Date.now();
8
+ res.on('finish', () => {
9
+ if (res.statusCode < 400)
10
+ return;
11
+ const elapsed = Date.now() - start;
12
+ const ua = (req.headers['user-agent'] ?? '').slice(0, 120);
13
+ const ip = req.headers['x-forwarded-for'] ?? req.ip ?? '';
14
+ const forwardedIp = Array.isArray(ip) ? ip[0] : ip;
15
+ logger.warn(`${res.statusCode} ${req.method} ${req.originalUrl} ${elapsed}ms ip=${forwardedIp} ua=${ua}`);
16
+ });
17
+ next();
18
+ }
19
+ //# sourceMappingURL=http-error-logger.middleware.js.map
@@ -73,6 +73,7 @@ const _1773800000000_FixNegativeCosts_1 = require("./migrations/1773800000000-Fi
73
73
  const _1773900000000_AddKeyPrefixIndex_1 = require("./migrations/1773900000000-AddKeyPrefixIndex");
74
74
  const _1774000000000_WidenKeyHashColumn_1 = require("./migrations/1774000000000-WidenKeyHashColumn");
75
75
  const _1774896789000_WidenApiKeyColumn_1 = require("./migrations/1774896789000-WidenApiKeyColumn");
76
+ const _1775000000000_AddErrorHttpStatus_1 = require("./migrations/1775000000000-AddErrorHttpStatus");
76
77
  const entities = [
77
78
  agent_message_entity_1.AgentMessage,
78
79
  llm_call_entity_1.LlmCall,
@@ -133,6 +134,7 @@ const migrations = [
133
134
  _1773900000000_AddKeyPrefixIndex_1.AddKeyPrefixIndex1773900000000,
134
135
  _1774000000000_WidenKeyHashColumn_1.WidenKeyHashColumn1774000000000,
135
136
  _1774896789000_WidenApiKeyColumn_1.WidenApiKeyColumn1774896789000,
137
+ _1775000000000_AddErrorHttpStatus_1.AddErrorHttpStatus1775000000000,
136
138
  ];
137
139
  const isLocalMode = process.env['MANIFEST_MODE'] === 'local';
138
140
  function buildModeServices() {
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddErrorHttpStatus1775000000000 = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ class AddErrorHttpStatus1775000000000 {
6
+ async up(queryRunner) {
7
+ await queryRunner.addColumn('agent_messages', new typeorm_1.TableColumn({
8
+ name: 'error_http_status',
9
+ type: 'integer',
10
+ isNullable: true,
11
+ }));
12
+ }
13
+ async down(queryRunner) {
14
+ await queryRunner.dropColumn('agent_messages', 'error_http_status');
15
+ }
16
+ }
17
+ exports.AddErrorHttpStatus1775000000000 = AddErrorHttpStatus1775000000000;
18
+ //# sourceMappingURL=1775000000000-AddErrorHttpStatus.js.map
@@ -28,6 +28,7 @@ let AgentMessage = class AgentMessage {
28
28
  cost_usd;
29
29
  status;
30
30
  error_message;
31
+ error_http_status;
31
32
  description;
32
33
  service_type;
33
34
  agent_name;
@@ -101,6 +102,10 @@ __decorate([
101
102
  (0, typeorm_1.Column)('varchar', { nullable: true }),
102
103
  __metadata("design:type", Object)
103
104
  ], AgentMessage.prototype, "error_message", void 0);
105
+ __decorate([
106
+ (0, typeorm_1.Column)('integer', { nullable: true }),
107
+ __metadata("design:type", Object)
108
+ ], AgentMessage.prototype, "error_http_status", void 0);
104
109
  __decorate([
105
110
  (0, typeorm_1.Column)('varchar', { nullable: true }),
106
111
  __metadata("design:type", Object)
@@ -46,6 +46,7 @@ const app_module_1 = require("./app.module");
46
46
  const auth_instance_1 = require("./auth/auth.instance");
47
47
  const local_mode_constants_1 = require("./common/constants/local-mode.constants");
48
48
  const spa_fallback_filter_1 = require("./common/filters/spa-fallback.filter");
49
+ const http_error_logger_middleware_1 = require("./common/middleware/http-error-logger.middleware");
49
50
  const local_ip_1 = require("./common/utils/local-ip");
50
51
  async function bootstrap() {
51
52
  const logger = new common_1.Logger('Bootstrap');
@@ -82,9 +83,9 @@ async function bootstrap() {
82
83
  app.useGlobalPipes(new common_1.ValidationPipe({
83
84
  transform: true,
84
85
  whitelist: true,
85
- forbidNonWhitelisted: true,
86
86
  }));
87
87
  const expressApp = app.getHttpAdapter().getInstance();
88
+ expressApp.use(http_error_logger_middleware_1.httpErrorLogger);
88
89
  if (!isDev && process.env['MANIFEST_MODE'] !== 'local') {
89
90
  expressApp.set('trust proxy', 1);
90
91
  }
@@ -127,11 +127,14 @@ let PublicStatsService = class PublicStatsService {
127
127
  .createQueryBuilder('at')
128
128
  .select('at.model', 'model')
129
129
  .addSelect(dateBucket, 'date')
130
+ .addSelect('at.auth_type', 'auth_type')
130
131
  .addSelect('SUM(at.input_tokens + at.output_tokens)', 'tokens')
132
+ .addSelect('SUM(at.cost_usd)', 'cost')
131
133
  .where('at.model IS NOT NULL')
132
134
  .andWhere('at.timestamp >= :cutoff30d', { cutoff30d })
133
135
  .groupBy('at.model')
134
136
  .addGroupBy('date')
137
+ .addGroupBy('at.auth_type')
135
138
  .orderBy('date', 'ASC')
136
139
  .getRawMany();
137
140
  const modelMap = new Map();
@@ -143,17 +146,29 @@ let PublicStatsService = class PublicStatsService {
143
146
  const provider = pricing?.provider || 'Unknown';
144
147
  if (EXCLUDED_PROVIDERS.has(provider))
145
148
  continue;
146
- let entry = modelMap.get(modelName);
149
+ const key = `${modelName}:${r.auth_type ?? ''}`;
150
+ let entry = modelMap.get(key);
147
151
  if (!entry) {
148
- entry = { provider, total: 0, daily: new Map() };
149
- modelMap.set(modelName, entry);
152
+ entry = {
153
+ modelName,
154
+ provider,
155
+ authType: r.auth_type ?? null,
156
+ total: 0,
157
+ cost: null,
158
+ daily: new Map(),
159
+ };
160
+ modelMap.set(key, entry);
150
161
  }
151
162
  const tokens = Number(r.tokens ?? 0);
152
163
  entry.total += tokens;
153
- entry.daily.set(r.date, tokens);
164
+ const rowCost = r.cost != null ? Number(r.cost) : null;
165
+ if (rowCost != null) {
166
+ entry.cost = (entry.cost ?? 0) + rowCost;
167
+ }
168
+ entry.daily.set(r.date, (entry.daily.get(r.date) ?? 0) + tokens);
154
169
  }
155
170
  const providerMap = new Map();
156
- for (const [modelName, entry] of modelMap) {
171
+ for (const [, entry] of modelMap) {
157
172
  let prov = providerMap.get(entry.provider);
158
173
  if (!prov) {
159
174
  prov = { total: 0, models: [] };
@@ -161,8 +176,10 @@ let PublicStatsService = class PublicStatsService {
161
176
  }
162
177
  prov.total += entry.total;
163
178
  prov.models.push({
164
- model: modelName,
179
+ model: entry.modelName,
180
+ auth_type: entry.authType,
165
181
  total_tokens: entry.total,
182
+ total_cost: entry.cost,
166
183
  daily: Array.from(entry.daily.entries())
167
184
  .sort(([a], [b]) => a.localeCompare(b))
168
185
  .map(([date, tokens]) => ({ date, tokens })),
@@ -69,6 +69,7 @@ let ProxyMessageRecorder = class ProxyMessageRecorder {
69
69
  timestamp: new Date().toISOString(),
70
70
  status: messageStatus,
71
71
  error_message: errorMessage.slice(0, 2000),
72
+ error_http_status: httpStatus,
72
73
  agent_name: ctx.agentName,
73
74
  model: model ?? null,
74
75
  routing_tier: tier ?? null,
@@ -105,6 +106,7 @@ let ProxyMessageRecorder = class ProxyMessageRecorder {
105
106
  timestamp: ts,
106
107
  status,
107
108
  error_message: f.errorBody.slice(0, 2000),
109
+ error_http_status: f.status,
108
110
  agent_name: ctx.agentName,
109
111
  model: f.model,
110
112
  routing_tier: tier,
@@ -43,7 +43,7 @@ async function handleProviderError(res, ctx, meta, metaHeaders, errorStatus, err
43
43
  authType: meta.auth_type,
44
44
  })
45
45
  .catch((e) => logger.warn(`Failed to record provider error: ${e}`));
46
- logger.warn(`Upstream error ${errorStatus}: ${errorBody.slice(0, 200)}`);
46
+ logger.warn(`Upstream error ${errorStatus}: provider=${meta.provider} model=${meta.model} tier=${meta.tier} body=${errorBody.slice(0, 500)}`);
47
47
  res.status(errorStatus);
48
48
  setHeaders(res, metaHeaders);
49
49
  res.json({
package/dist/index.js CHANGED
@@ -1,12 +1,18 @@
1
1
  /* manifest-local — OpenClaw Self-Hosted LLM Router */
2
- "use strict";var f=require("fs"),l=require("path"),g=require("os"),u=(0,l.join)((0,g.homedir)(),".openclaw","manifest"),h=3e3;async function d(i,t){try{let e=await fetch(`http://${i}:${t}/api/v1/health`,{signal:AbortSignal.timeout(h)});if(!e.ok)return!1;let n=await e.json();return n!==null&&typeof n=="object"&&"status"in n&&n.status==="healthy"}catch{return!1}}function m(i,t,e,n){(0,f.existsSync)(u)||(0,f.mkdirSync)(u,{recursive:!0,mode:448});let a=(0,l.join)(u,"manifest.db");n.debug("[manifest] Starting embedded server...");let o;try{o=require("./server")}catch(r){let s=r instanceof Error?r.message:String(r);n.error(`[manifest] Failed to load embedded server.
2
+ "use strict";var d=require("fs"),l=require("path"),m=require("os"),u=(0,l.join)((0,m.homedir)(),".openclaw","manifest"),p=3e3;async function g(i,t){try{let e=await fetch(`http://${i}:${t}/api/v1/health`,{signal:AbortSignal.timeout(p)});if(!e.ok)return!1;let n=await e.json();return n!==null&&typeof n=="object"&&"status"in n&&n.status==="healthy"}catch{return!1}}function h(i,t,e,n){(0,d.existsSync)(u)||(0,d.mkdirSync)(u,{recursive:!0,mode:448});let a=(0,l.join)(u,"manifest.db");n.debug("[manifest] Starting embedded server...");let o;try{o=require("./server")}catch(c){let s=c instanceof Error?c.message:String(c);n.error(`[manifest] Failed to load embedded server.
3
3
  Error: ${s}
4
- This is a packaging error \u2014 please reinstall the manifest plugin.`);return}i.registerService({id:"manifest",start:async()=>{if(n.debug("[manifest] Service start callback invoked"),await d(e,t)){n.info(`[manifest] Reusing existing server at http://${e}:${t}`);return}try{await o.start({port:t,host:e,dbPath:a,quiet:!0}),await d(e,t)?(n.info(`[manifest] Dashboard -> http://${e}:${t}`),n.info(`[manifest] DB: ${a}`)):(n.warn??n.info)(`[manifest] Server started but health check failed.
5
- The dashboard may not be accessible at http://${e}:${t}`)}catch(s){let c=s instanceof Error?s.message:String(s);c.includes("EADDRINUSE")||c.includes("address already in use")?await d(e,t)?n.info(`[manifest] Reusing existing server at http://${e}:${t}`):n.error(`[manifest] Port ${t} is already in use by another process.
4
+ This is a packaging error \u2014 please reinstall the manifest plugin.`);return}let r=async()=>{if(n.debug("[manifest] Service start callback invoked"),await g(e,t)){n.info(`
5
+ [\u{1F99A} Manifest] Dashboard: http://${e}:${t}
6
+ [\u{1F99A} Manifest] Reusing existing server.
7
+ [\u{1F99A} Manifest] Open the dashboard to connect a provider and start routing.`);return}try{await o.start({port:t,host:e,dbPath:a,quiet:!0}),await g(e,t)?(n.info(`
8
+ [\u{1F99A} Manifest] Dashboard: http://${e}:${t}
9
+ [\u{1F99A} Manifest] The embedded server is running.
10
+ [\u{1F99A} Manifest] Open the dashboard to connect a provider and start routing.`),n.debug(`[manifest] DB: ${a}`)):(n.warn??n.info)(`[manifest] Server started but health check failed.
11
+ The dashboard may not be accessible at http://${e}:${t}`)}catch(s){let f=s instanceof Error?s.message:String(s);f.includes("EADDRINUSE")||f.includes("address already in use")?await g(e,t)?n.info(`
12
+ [\u{1F99A} Manifest] Dashboard: http://${e}:${t}
13
+ [\u{1F99A} Manifest] Reusing existing server.
14
+ [\u{1F99A} Manifest] Open the dashboard to connect a provider and start routing.`):n.error(`[manifest] Port ${t} is already in use by another process.
6
15
  Change it with: openclaw config set plugins.entries.manifest.config.port ${t+1}
7
- Then restart the gateway.`):n.error(`[manifest] Failed to start local server: ${c}
16
+ Then restart the gateway.`):n.error(`[manifest] Failed to start local server: ${f}
8
17
  Try reinstalling: openclaw plugins install manifest
9
- Then restart: openclaw gateway restart`)}}})}module.exports={id:"manifest",name:"Manifest Self-Hosted LLM Router",register(i){let t=i.logger||{info:(...r)=>console.log(...r),debug:()=>{},error:(...r)=>console.error(...r),warn:(...r)=>console.warn(...r)},e=i.pluginConfig||{},n=e&&typeof e=="object"&&"config"in e&&e.config!=null&&typeof e.config=="object"?e.config:e,a=typeof n.port=="number"&&n.port>0?n.port:2099,o=typeof n.host=="string"&&n.host.length>0?n.host:"127.0.0.1";t.info(`
10
- [\u{1F99A} Manifest] Dashboard: http://${o}:${a}
11
- [\u{1F99A} Manifest] The plugin starts an embedded server.
12
- [\u{1F99A} Manifest] Open the dashboard to connect a provider and start routing.`),m(i,a,o,t)}};
18
+ Then restart: openclaw gateway restart`)}};i.registerService({id:"manifest",start:r}),r().catch(()=>{})}module.exports={id:"manifest",name:"Manifest Self-Hosted LLM Router",register(i){let t=i.logger||{info:(...r)=>console.log(...r),debug:()=>{},error:(...r)=>console.error(...r),warn:(...r)=>console.warn(...r)},e=i.pluginConfig||{},n=e&&typeof e=="object"&&"config"in e&&e.config!=null&&typeof e.config=="object"?e.config:e,a=typeof n.port=="number"&&n.port>0?n.port:2099,o=typeof n.host=="string"&&n.host.length>0?n.host:"127.0.0.1";t.info("[\u{1F99A} Manifest] Loading embedded server..."),h(i,a,o,t)}};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "manifest",
3
3
  "name": "Manifest Self-Hosted LLM Router",
4
- "version": "5.44.0",
4
+ "version": "5.45.1",
5
5
  "description": "Run the Manifest LLM router locally with SQLite. Zero-config dashboard included.",
6
6
  "author": "MNFST Inc.",
7
7
  "homepage": "https://manifest.build",
package/dist/server.d.ts CHANGED
@@ -3,6 +3,7 @@ interface StartOptions {
3
3
  port?: number;
4
4
  host?: string;
5
5
  dbPath?: string;
6
+ quiet?: boolean;
6
7
  }
7
8
  export declare function start(options?: StartOptions): Promise<unknown>;
8
9
  export {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "manifest",
3
3
  "name": "Manifest Self-Hosted LLM Router",
4
- "version": "5.44.0",
4
+ "version": "5.45.1",
5
5
  "description": "Run the Manifest LLM router locally with SQLite. Zero-config dashboard included.",
6
6
  "author": "MNFST Inc.",
7
7
  "homepage": "https://manifest.build",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "manifest",
3
- "version": "5.44.0",
3
+ "version": "5.45.1",
4
4
  "description": "Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
@@ -1 +1 @@
1
- import{b as H,a as b,e as R,i as c,g as h,T as V,M as W,h as d,m as Z,s as F,S as L,t as r,d as G}from"./vendor-pl6Q4jbW.js";import{s as J,u as K,v as O,d as E,w as D}from"./index-onE2M38p.js";import"./auth-DmX5tAfx.js";var Q=r("<h3 class=settings-section__title>Profile information"),X=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"readonly></div></div><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Email</span><span class=settings-card__label-desc>Used for account notifications and limit alerts.</span></div><div class=settings-card__control><input class=settings-card__input type=email aria-label=Email readonly></div></div><div class=settings-card__footer><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>Profile information is managed through your authentication provider.'),ee=r("<h3 class=settings-section__title>Workspace"),te=r("<div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Your unique workspace identifier. You may need this for support requests or advanced integrations.</p><div class=settings-card__id-row><code class=settings-card__id-value></code><button class=settings-card__copy-btn title=Copy>"),se=r("<h3 class=settings-section__title>Profile"),ie=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"placeholder="Local User">'),ae=r('<div class=account-modal><div class=account-modal__inner><button class=account-modal__back><svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m15 18-6-6 6-6"></path></svg>Back</button><div class=page-header><div><h1>Account Preferences</h1><span class=breadcrumb>Your profile, workspace details, and display preferences</span></div></div><h3 class=settings-section__title>Appearance</h3><div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Choose how Manifest looks for you.</p><div class=theme-picker><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=12 cy=12 r=4></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg>Light</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg>Dark</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=2 y=3 width=20 height=14 rx=2></rect><path d="M8 21h8"></path><path d="M12 17v4"></path></svg>System'),re=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="20 6 9 17 4 12">'),le=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=9 y=9 width=13 height=13 rx=2></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">');const de=()=>{const N=H(),p=J.useSession(),[w,y]=b(!1),[_,g]=b("system"),[u,C]=b(""),T=()=>p()?.data?.user?.name??"",B=()=>p()?.data?.user?.email??"",x=()=>p()?.data?.user?.id??"";R(()=>{K(),C(O()||"Local User");const t=localStorage.getItem("theme");g(t==="dark"||t==="light"?t:"system")});const m=t=>{if(g(t),t==="system"){localStorage.removeItem("theme");const o=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.classList.toggle("dark",o)}else localStorage.setItem("theme",t),document.documentElement.classList.toggle("dark",t==="dark")},j=()=>{navigator.clipboard.writeText(x()),y(!0),setTimeout(()=>y(!1),2e3)};return(()=>{var t=ae(),o=t.firstChild,S=o.firstChild,I=S.nextSibling,v=I.nextSibling,A=v.nextSibling,P=A.firstChild,U=P.firstChild,Y=U.nextSibling,k=Y.firstChild,f=k.nextSibling,M=f.nextSibling;return c(t,h(V,{children:"Account Preferences - Manifest"}),o),c(t,h(W,{name:"description",content:"Manage your profile, workspace, and theme preferences."}),o),S.$$click=()=>N(-1),c(o,h(L,{get when(){return!E()},get children(){return[Q(),(()=>{var e=X(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=i.nextSibling,$=s.firstChild,q=$.nextSibling,z=q.firstChild;return d(()=>a.value=T()),d(()=>z.value=B()),e})(),ee(),(()=>{var e=te(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=a.nextSibling;return c(a,x),s.$$click=j,c(s,(()=>{var $=Z(()=>!!w());return()=>$()?re():le()})()),d(()=>F(s,"aria-label",w()?"Copied":"Copy workspace ID")),e})()]}}),v),c(o,h(L,{get when(){return E()},get children(){return[se(),(()=>{var e=ie(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild;return a.$$keydown=s=>{s.key==="Enter"&&(D(u()),s.currentTarget.blur())},a.addEventListener("blur",()=>D(u())),a.$$input=s=>C(s.currentTarget.value),d(()=>a.value=u()),e})()]}}),v),k.$$click=()=>m("light"),f.$$click=()=>m("dark"),M.$$click=()=>m("system"),d(e=>{var i=_()==="light",l=_()==="dark",n=_()==="system";return i!==e.e&&k.classList.toggle("theme-picker__option--active",e.e=i),l!==e.t&&f.classList.toggle("theme-picker__option--active",e.t=l),n!==e.a&&M.classList.toggle("theme-picker__option--active",e.a=n),e},{e:void 0,t:void 0,a:void 0}),t})()};G(["click","input","keydown"]);export{de as default};
1
+ import{b as H,a as b,e as R,i as c,g as h,T as V,M as W,h as d,m as Z,s as F,S as L,t as r,d as G}from"./vendor-C-Y5oNOq.js";import{s as J,u as K,v as O,d as E,w as D}from"./index-C4Qw7vZo.js";import"./auth-CU91cd7V.js";var Q=r("<h3 class=settings-section__title>Profile information"),X=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"readonly></div></div><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Email</span><span class=settings-card__label-desc>Used for account notifications and limit alerts.</span></div><div class=settings-card__control><input class=settings-card__input type=email aria-label=Email readonly></div></div><div class=settings-card__footer><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>Profile information is managed through your authentication provider.'),ee=r("<h3 class=settings-section__title>Workspace"),te=r("<div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Your unique workspace identifier. You may need this for support requests or advanced integrations.</p><div class=settings-card__id-row><code class=settings-card__id-value></code><button class=settings-card__copy-btn title=Copy>"),se=r("<h3 class=settings-section__title>Profile"),ie=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"placeholder="Local User">'),ae=r('<div class=account-modal><div class=account-modal__inner><button class=account-modal__back><svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m15 18-6-6 6-6"></path></svg>Back</button><div class=page-header><div><h1>Account Preferences</h1><span class=breadcrumb>Your profile, workspace details, and display preferences</span></div></div><h3 class=settings-section__title>Appearance</h3><div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Choose how Manifest looks for you.</p><div class=theme-picker><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=12 cy=12 r=4></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg>Light</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg>Dark</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=2 y=3 width=20 height=14 rx=2></rect><path d="M8 21h8"></path><path d="M12 17v4"></path></svg>System'),re=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="20 6 9 17 4 12">'),le=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=9 y=9 width=13 height=13 rx=2></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">');const de=()=>{const N=H(),p=J.useSession(),[w,y]=b(!1),[_,g]=b("system"),[u,C]=b(""),T=()=>p()?.data?.user?.name??"",B=()=>p()?.data?.user?.email??"",x=()=>p()?.data?.user?.id??"";R(()=>{K(),C(O()||"Local User");const t=localStorage.getItem("theme");g(t==="dark"||t==="light"?t:"system")});const m=t=>{if(g(t),t==="system"){localStorage.removeItem("theme");const o=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.classList.toggle("dark",o)}else localStorage.setItem("theme",t),document.documentElement.classList.toggle("dark",t==="dark")},j=()=>{navigator.clipboard.writeText(x()),y(!0),setTimeout(()=>y(!1),2e3)};return(()=>{var t=ae(),o=t.firstChild,S=o.firstChild,I=S.nextSibling,v=I.nextSibling,A=v.nextSibling,P=A.firstChild,U=P.firstChild,Y=U.nextSibling,k=Y.firstChild,f=k.nextSibling,M=f.nextSibling;return c(t,h(V,{children:"Account Preferences - Manifest"}),o),c(t,h(W,{name:"description",content:"Manage your profile, workspace, and theme preferences."}),o),S.$$click=()=>N(-1),c(o,h(L,{get when(){return!E()},get children(){return[Q(),(()=>{var e=X(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=i.nextSibling,$=s.firstChild,q=$.nextSibling,z=q.firstChild;return d(()=>a.value=T()),d(()=>z.value=B()),e})(),ee(),(()=>{var e=te(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=a.nextSibling;return c(a,x),s.$$click=j,c(s,(()=>{var $=Z(()=>!!w());return()=>$()?re():le()})()),d(()=>F(s,"aria-label",w()?"Copied":"Copy workspace ID")),e})()]}}),v),c(o,h(L,{get when(){return E()},get children(){return[se(),(()=>{var e=ie(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild;return a.$$keydown=s=>{s.key==="Enter"&&(D(u()),s.currentTarget.blur())},a.addEventListener("blur",()=>D(u())),a.$$input=s=>C(s.currentTarget.value),d(()=>a.value=u()),e})()]}}),v),k.$$click=()=>m("light"),f.$$click=()=>m("dark"),M.$$click=()=>m("system"),d(e=>{var i=_()==="light",l=_()==="dark",n=_()==="system";return i!==e.e&&k.classList.toggle("theme-picker__option--active",e.e=i),l!==e.t&&f.classList.toggle("theme-picker__option--active",e.t=l),n!==e.a&&M.classList.toggle("theme-picker__option--active",e.a=n),e},{e:void 0,t:void 0,a:void 0}),t})()};G(["click","input","keydown"]);export{de as default};
@@ -1 +1 @@
1
- import{q as l,B as a,i as u,t as o,s as i}from"./vendor-pl6Q4jbW.js";var p=o('<svg viewBox="2 1 20 22"fill=none stroke=currentColor stroke-width=3 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx=12 cy=7 r=4>'),d=o('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=3 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4">'),s=o("<span aria-label=Subscription>"),h=o('<span aria-label="API Key">');const c=e=>(()=>{var r=p();return i(r,"width",e),i(r,"height",e),r})(),v=e=>(()=>{var r=d();return i(r,"width",e),i(r,"height",e),r})();function $(e){return e==="subscription"?"Subscription":"API Key"}function m(e,r){const n=r<=8?" provider-auth-badge--overlay":"";return e==="subscription"?(()=>{var t=s();return l(t,`provider-auth-badge provider-auth-badge--sub${n}`),a(t,"width",`${r}px`),a(t,"height",`${r}px`),u(t,()=>c(r*.58)),t})():e==="api_key"?(()=>{var t=h();return l(t,`provider-auth-badge provider-auth-badge--key${n}`),a(t,"width",`${r}px`),a(t,"height",`${r}px`),u(t,()=>v(r*.58)),t})():null}export{m as a,$ as b};
1
+ import{q as l,z as a,i as u,t as o,s as i}from"./vendor-C-Y5oNOq.js";var p=o('<svg viewBox="2 1 20 22"fill=none stroke=currentColor stroke-width=3 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx=12 cy=7 r=4>'),d=o('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=3 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4">'),s=o("<span aria-label=Subscription>"),h=o('<span aria-label="API Key">');const c=e=>(()=>{var r=p();return i(r,"width",e),i(r,"height",e),r})(),v=e=>(()=>{var r=d();return i(r,"width",e),i(r,"height",e),r})();function $(e){return e==="subscription"?"Subscription":"API Key"}function m(e,r){const n=r<=8?" provider-auth-badge--overlay":"";return e==="subscription"?(()=>{var t=s();return l(t,`provider-auth-badge provider-auth-badge--sub${n}`),a(t,"width",`${r}px`),a(t,"height",`${r}px`),u(t,()=>c(r*.58)),t})():e==="api_key"?(()=>{var t=h();return l(t,`provider-auth-badge provider-auth-badge--key${n}`),a(t,"width",`${r}px`),a(t,"height",`${r}px`),u(t,()=>v(r*.58)),t})():null}export{m as a,$ as b};
@@ -1 +1 @@
1
- import{b as _,D as $,a as b,k as w,i as c,g as u,F as S,m as C,S as y,t as g,d as A}from"./vendor-pl6Q4jbW.js";import{x as k,y as U,n as P}from"./index-onE2M38p.js";import"./auth-DmX5tAfx.js";var K=g('<div class=panel style="max-width:440px;margin:0 auto;padding:32px"><h2 style="margin:0 0 8px">Select an agent</h2><p style="color:hsl(var(--muted-foreground));font-size:var(--font-size-sm);margin:0 0 24px">Which agent should this provider be added to?</p><div style=display:flex;flex-direction:column;gap:8px>'),R=g("<div style=display:flex;align-items:center;justify-content:center;min-height:200px><span class=spinner role=status aria-label=Loading style=width:24px;height:24px>"),j=g("<div class=container--sm style=padding-top:80px>"),z=g('<button class="btn btn--outline"style=justify-content:flex-start;text-align:left>');const D=()=>{const p=_(),[s]=$(),[f,h]=b(!1),r=t=>Array.isArray(t)?t[0]:t,m=t=>{const e=new URLSearchParams,d=r(s.provider)||"custom";e.set("provider",d);const i=r(s.name),o=r(s.baseUrl),a=r(s.apiKey),n=r(s.models);return i&&e.set("name",i),o&&e.set("baseUrl",o),a&&e.set("apiKey",a),n&&e.set("models",n),`/agents/${encodeURIComponent(t)}/routing?${e.toString()}`},x=async()=>{h(!0);try{const e=(await U("my-agent"))?.agent?.name??"my-agent";P(e),p(m(e),{replace:!0})}catch{h(!1)}},[l]=w(async()=>{const e=(await k())?.agents??[];return e.length===1&&e[0]?p(m(e[0].agent_name),{replace:!0}):e.length===0&&await x(),e}),v=t=>{p(m(t),{replace:!0})};return(()=>{var t=j();return c(t,u(y,{get when(){return C(()=>!l.loading)()&&(l()?.length??0)>1},get children(){var e=K(),d=e.firstChild,i=d.nextSibling,o=i.nextSibling;return c(o,u(S,{get each(){return l()},children:a=>(()=>{var n=z();return n.$$click=()=>v(a.agent_name),c(n,()=>a.display_name??a.agent_name),n})()})),e}}),null),c(t,u(y,{get when(){return l.loading||f()||(l()?.length??0)<=1},get children(){return R()}}),null),t})()};A(["click"]);export{D as default};
1
+ import{b as _,D as $,a as b,k as w,i as c,g as u,F as S,m as C,S as y,t as g,d as A}from"./vendor-C-Y5oNOq.js";import{x as k,y as U,n as P}from"./index-C4Qw7vZo.js";import"./auth-CU91cd7V.js";var K=g('<div class=panel style="max-width:440px;margin:0 auto;padding:32px"><h2 style="margin:0 0 8px">Select an agent</h2><p style="color:hsl(var(--muted-foreground));font-size:var(--font-size-sm);margin:0 0 24px">Which agent should this provider be added to?</p><div style=display:flex;flex-direction:column;gap:8px>'),R=g("<div style=display:flex;align-items:center;justify-content:center;min-height:200px><span class=spinner role=status aria-label=Loading style=width:24px;height:24px>"),j=g("<div class=container--sm style=padding-top:80px>"),z=g('<button class="btn btn--outline"style=justify-content:flex-start;text-align:left>');const D=()=>{const p=_(),[s]=$(),[f,h]=b(!1),r=t=>Array.isArray(t)?t[0]:t,m=t=>{const e=new URLSearchParams,d=r(s.provider)||"custom";e.set("provider",d);const i=r(s.name),o=r(s.baseUrl),a=r(s.apiKey),n=r(s.models);return i&&e.set("name",i),o&&e.set("baseUrl",o),a&&e.set("apiKey",a),n&&e.set("models",n),`/agents/${encodeURIComponent(t)}/routing?${e.toString()}`},x=async()=>{h(!0);try{const e=(await U("my-agent"))?.agent?.name??"my-agent";P(e),p(m(e),{replace:!0})}catch{h(!1)}},[l]=w(async()=>{const e=(await k())?.agents??[];return e.length===1&&e[0]?p(m(e[0].agent_name),{replace:!0}):e.length===0&&await x(),e}),v=t=>{p(m(t),{replace:!0})};return(()=>{var t=j();return c(t,u(y,{get when(){return C(()=>!l.loading)()&&(l()?.length??0)>1},get children(){var e=K(),d=e.firstChild,i=d.nextSibling,o=i.nextSibling;return c(o,u(S,{get each(){return l()},children:a=>(()=>{var n=z();return n.$$click=()=>v(a.agent_name),c(n,()=>a.display_name??a.agent_name),n})()})),e}}),null),c(t,u(y,{get when(){return l.loading||f()||(l()?.length??0)<=1},get children(){return R()}}),null),t})()};A(["click"]);export{D as default};
@@ -1 +1 @@
1
- import{a as o,i as d,m as p,h,s as u,t,d as m}from"./vendor-pl6Q4jbW.js";var f=t("<button class=modal-terminal__copy title=Copy>"),y=t('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 aria-hidden=true><polyline points="20 6 9 17 4 12">'),v=t('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 aria-hidden=true><rect x=9 y=9 width=13 height=13 rx=2 ry=2></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1">');const w=s=>{const[a,r]=o(!1),[l,i]=o(!1),n=async()=>{try{await navigator.clipboard.writeText(s.text),r(!0),setTimeout(()=>r(!1),2e3)}catch{i(!0),setTimeout(()=>i(!1),2e3)}};return(()=>{var e=f();return e.$$click=n,d(e,(()=>{var c=p(()=>!!a());return()=>c()?y():v()})()),h(()=>u(e,"aria-label",a()?"Copied":l()?"Copy failed":"Copy to clipboard")),e})()};m(["click"]);export{w as C};
1
+ import{a as o,i as d,m as p,h,s as u,t,d as m}from"./vendor-C-Y5oNOq.js";var f=t("<button class=modal-terminal__copy title=Copy>"),y=t('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 aria-hidden=true><polyline points="20 6 9 17 4 12">'),v=t('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 aria-hidden=true><rect x=9 y=9 width=13 height=13 rx=2 ry=2></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1">');const w=s=>{const[a,r]=o(!1),[l,i]=o(!1),n=async()=>{try{await navigator.clipboard.writeText(s.text),r(!0),setTimeout(()=>r(!1),2e3)}catch{i(!0),setTimeout(()=>i(!1),2e3)}};return(()=>{var e=f();return e.$$click=n,d(e,(()=>{var c=p(()=>!!a());return()=>c()?y():v()})()),h(()=>u(e,"aria-label",a()?"Copied":l()?"Copy failed":"Copy to clipboard")),e})()};m(["click"]);export{w as C};
@@ -1 +1 @@
1
- import{i as e,g as n,T as N,M as F,m as U,h as y,s as z,F as C,a as R,C as q,S as L,t as o,n as A,d as B}from"./vendor-pl6Q4jbW.js";import{b as G,t as I}from"./index-onE2M38p.js";import"./auth-DmX5tAfx.js";var D=o('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>'),E=o('<button class="btn btn--outline btn--sm"aria-label="Copy to clipboard"style="padding:2px 8px;font-size:var(--font-size-xs)">'),H=o('<a class="btn btn--primary btn--sm"style=text-decoration:none>Connect '),O=o("<div class=container--lg><div class=page-header><div><h1>Free Models</h1><span class=breadcrumb>Cloud providers offering free API access for </span></div></div><div style=display:flex;flex-direction:column;gap:10px;margin-bottom:24px><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>1</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Get your free API key from the provider website</span></div><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>2</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Hit the provider Connect button, paste your key, and validate the connection</span></div><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>3</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Done! The provider models are now included in your routing. Customize tiers and preferences from the routing page."),V=o('<div class=panel style=margin-bottom:24px><div style=display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:8px><h2 style=margin:0;font-size:var(--font-size-lg);display:flex;align-items:center;gap:8px></h2><div style=display:flex;gap:8px;flex-shrink:0><a target=_blank rel="noopener noreferrer"class="btn btn--outline btn--sm"style=text-decoration:none>Get API key</a></div></div><div style=display:flex;align-items:center;gap:20px;margin-bottom:16px;flex-wrap:wrap>'),J=o("<img alt style=height:20px>"),Q=o("<span style=display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:hsl(var(--foreground));white-space:nowrap><span style=width:5px;height:5px;border-radius:50%;background:hsl(var(--foreground));flex-shrink:0>"),W=o('<div class=free-models-base-url-row><div style=display:flex;align-items:center;gap:8px;min-width:0><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground));flex-shrink:0>Base URL:</span><code style="font-family:var(--font-mono);font-size:var(--font-size-xs);background:hsl(var(--muted) / 0.5);padding:4px 8px;border-radius:var(--radius);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0"></code></div><button style=display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:hsl(var(--foreground));padding:0;background:none;border:none;cursor:pointer;white-space:nowrap;margin-left:auto;font-weight:500><img src=/icons/caret-down.svg alt class=free-models-caret>'),X=o('<div style="display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border-radius:var(--radius);background:#f7f5ed;margin-top:16px;margin-bottom:16px;font-size:var(--font-size-sm)"><svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=currentColor viewBox="0 0 24 24"style=flex-shrink:0;color:hsl(var(--primary));margin-top:1px><path d="M12 17c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1M12 7a1 1 0 1 0 0 2 1 1 0 1 0 0-2"></path><path d="M12 22c5.51 0 10-4.49 10-10S17.51 2 12 2 2 6.49 2 12s4.49 10 10 10m0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8"></path></svg><span style="color:hsl(var(--foreground) / 0.8)">'),Y=o("<div class=free-models-accordion><div><table class=data-table><colgroup><col style=width:36%><col style=width:12%><col style=width:14%><col style=width:16%><col style=width:22%></colgroup><thead><tr><th>Model Name</th><th>Context</th><th>Max Output</th><th>Modality</th><th>Rate Limit</th></tr></thead><tbody>"),Z=o("<tr><td style=font-family:var(--font-mono);font-size:var(--font-size-xs)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)>");const ee=[{name:"Cohere",logo:"/icons/cohere.svg",description:"",tags:["Up to 1,000 calls/month","No credit card required"],apiKeyUrl:"https://dashboard.cohere.com/api-keys",baseUrl:"https://api.cohere.ai/compatibility/v1",warning:"Trial keys cannot be used for production or commercial workloads. Data may be used for training.",models:[{model_id:"command-a-03-2025",context:"256K",max_output:"8K",modality:"Text",trial_rate_limit:"20 req / min"},{model_id:"command-a-reasoning-08-2025",context:"256K",max_output:"32K",modality:"Text",trial_rate_limit:"20 req / min"}]},{name:"Gemini",logo:"/icons/gemini.svg",description:"",tags:["250K TPM (Tokens / Minute) shared across models","No credit card required"],apiKeyUrl:"https://aistudio.google.com/apikey",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",warning:"Rate limits apply per Google Cloud project, not per API key. On the free tier, prompts and responses may be used to improve Google products.",models:[{model_id:"gemini-2.5-pro",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"5 req / min"},{model_id:"gemini-2.5-flash",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"10 req / min"},{model_id:"gemini-2.5-flash-lite",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"15 req / min"},{model_id:"gemini-3-flash-preview",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"Preview limits"},{model_id:"gemini-3.1-flash-lite-preview",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"Preview limits"}]},{name:"Kilo Code",logo:"/icons/kilocode.jpg",description:"",tags:["No credit card required"],apiKeyUrl:"https://app.kilo.ai/profile",baseUrl:"https://api.kilo.ai/api/gateway",warning:"Prompts and outputs are logged on free models to improve provider products.",models:[{model_id:"qwen/qwen3.6-plus:free",context:"1M",max_output:"65K",modality:"Text + Image + Video",trial_rate_limit:"~200 req / hr"},{model_id:"nvidia/nemotron-3-super-120b-a12b:free",context:"262K",max_output:"262K",modality:"Text",trial_rate_limit:"~200 req / hr"},{model_id:"stepfun/step-3.5-flash:free",context:"256K",max_output:"256K",modality:"Text",trial_rate_limit:"~200 req / hr"},{model_id:"corethink:free",context:"78K",max_output:"8K",modality:"Text",trial_rate_limit:"~200 req / hr"}]}],te=()=>D(),ie=r=>{const[a,m]=R(!1),f=async()=>{try{await navigator.clipboard.writeText(r.text),m(!0),I.success("Copied to clipboard"),setTimeout(()=>m(!1),2e3)}catch{I.error("Failed to copy")}};return(()=>{var l=E();return l.$$click=f,e(l,()=>a()?"Copied":"Copy"),l})()},re=r=>{const a=A(),m=()=>decodeURIComponent(a.agentName),f=()=>r.provider.models.map(t=>`${t.model_id}:0:0`).join(","),l=()=>`/agents/${encodeURIComponent(m())}/routing?provider=custom&name=${encodeURIComponent(r.provider.name)}&baseUrl=${encodeURIComponent(r.provider.baseUrl)}&models=${encodeURIComponent(f())}`;return(()=>{var t=H();return t.firstChild,e(t,()=>r.provider.name,null),y(()=>z(t,"href",l())),t})()},le=()=>(()=>{var r=O(),a=r.firstChild,m=a.firstChild,f=m.firstChild,l=f.nextSibling;return l.firstChild,a.nextSibling,e(r,n(N,{children:"Free Models - Manifest"}),a),e(r,n(F,{name:"description",content:"Free LLM models you can use with Manifest. No credit card required."}),a),e(l,()=>G()??"your agent",null),e(r,n(C,{each:ee,children:t=>(()=>{var _=V(),k=_.firstChild,b=k.firstChild,M=b.nextSibling,w=M.firstChild;w.firstChild;var P=k.nextSibling;return e(b,(()=>{var d=U(()=>!!t.logo);return()=>d()&&(()=>{var s=J();return y(()=>z(s,"src",t.logo)),s})()})(),null),e(b,()=>t.name,null),e(w,n(te,{}),null),e(M,n(re,{provider:t}),null),e(P,n(C,{get each(){return t.tags??[]},children:d=>(()=>{var s=Q();return s.firstChild,e(s,d,null),s})()})),e(_,()=>{const[d,s]=R(!0);return[(()=>{var c=W(),g=c.firstChild,u=g.firstChild,$=u.nextSibling,x=g.nextSibling,v=x.firstChild;return e($,()=>t.baseUrl),e(g,n(ie,{get text(){return t.baseUrl}}),null),x.$$click=()=>s(i=>!i),e(x,(()=>{var i=U(()=>!!d());return()=>i()?"Hide models":`Show models (${t.models.length})`})(),v),y(i=>q(v,`width: 20px; height: 20px; transition: transform 250ms ease; transform: rotate(${d()?"180deg":"0deg"});`,i)),c})(),(()=>{var c=Y(),g=c.firstChild,u=g.firstChild,$=u.firstChild,x=$.nextSibling,v=x.nextSibling;return e(g,n(L,{get when(){return t.warning},get children(){var i=X(),p=i.firstChild,h=p.nextSibling;return e(h,()=>t.warning),i}}),u),e(v,n(C,{get each(){return t.models},children:i=>(()=>{var p=Z(),h=p.firstChild,K=h.nextSibling,S=K.nextSibling,T=S.nextSibling,j=T.nextSibling;return e(h,()=>i.model_id),e(K,()=>i.context),e(S,()=>i.max_output),e(T,()=>i.modality),e(j,()=>i.trial_rate_limit),p})()})),y(i=>{var p=!!d(),h=`table-layout: fixed; width: 100%;${t.warning?"":" margin-top: 16px;"}`;return p!==i.e&&c.classList.toggle("free-models-accordion--open",i.e=p),i.t=q(u,h,i.t),i},{e:void 0,t:void 0}),c})()]},null),y(()=>z(w,"href",t.apiKeyUrl)),_})()}),null),r})();B(["click"]);export{le as default};
1
+ import{i as e,g as n,T as N,M as F,m as U,h as y,s as z,F as C,a as R,B as q,S as B,t as o,n as L,d as A}from"./vendor-C-Y5oNOq.js";import{b as G,t as I}from"./index-C4Qw7vZo.js";import"./auth-CU91cd7V.js";var D=o('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>'),E=o('<button class="btn btn--outline btn--sm"aria-label="Copy to clipboard"style="padding:2px 8px;font-size:var(--font-size-xs)">'),H=o('<a class="btn btn--primary btn--sm"style=text-decoration:none>Connect '),O=o("<div class=container--lg><div class=page-header><div><h1>Free Models</h1><span class=breadcrumb>Cloud providers offering free API access for </span></div></div><div style=display:flex;flex-direction:column;gap:10px;margin-bottom:24px><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>1</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Get your free API key from the provider website</span></div><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>2</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Hit the provider Connect button, paste your key, and validate the connection</span></div><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>3</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Done! The provider models are now included in your routing. Customize tiers and preferences from the routing page."),V=o('<div class=panel style=margin-bottom:24px><div style=display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:8px><h2 style=margin:0;font-size:var(--font-size-lg);display:flex;align-items:center;gap:8px></h2><div style=display:flex;gap:8px;flex-shrink:0><a target=_blank rel="noopener noreferrer"class="btn btn--outline btn--sm"style=text-decoration:none>Get API key</a></div></div><div style=display:flex;align-items:center;gap:20px;margin-bottom:16px;flex-wrap:wrap>'),J=o("<img alt style=height:20px>"),Q=o("<span style=display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:hsl(var(--foreground));white-space:nowrap><span style=width:5px;height:5px;border-radius:50%;background:hsl(var(--foreground));flex-shrink:0>"),W=o('<div class=free-models-base-url-row><div style=display:flex;align-items:center;gap:8px;min-width:0><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground));flex-shrink:0>Base URL:</span><code style="font-family:var(--font-mono);font-size:var(--font-size-xs);background:hsl(var(--muted) / 0.5);padding:4px 8px;border-radius:var(--radius);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0"></code></div><button style=display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:hsl(var(--foreground));padding:0;background:none;border:none;cursor:pointer;white-space:nowrap;margin-left:auto;font-weight:500><img src=/icons/caret-down.svg alt class=free-models-caret>'),X=o('<div style="display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border-radius:var(--radius);background:#f7f5ed;margin-top:16px;margin-bottom:16px;font-size:var(--font-size-sm)"><svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=currentColor viewBox="0 0 24 24"style=flex-shrink:0;color:hsl(var(--primary));margin-top:1px><path d="M12 17c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1M12 7a1 1 0 1 0 0 2 1 1 0 1 0 0-2"></path><path d="M12 22c5.51 0 10-4.49 10-10S17.51 2 12 2 2 6.49 2 12s4.49 10 10 10m0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8"></path></svg><span style="color:hsl(var(--foreground) / 0.8)">'),Y=o("<div class=free-models-accordion><div><table class=data-table><colgroup><col style=width:36%><col style=width:12%><col style=width:14%><col style=width:16%><col style=width:22%></colgroup><thead><tr><th>Model Name</th><th>Context</th><th>Max Output</th><th>Modality</th><th>Rate Limit</th></tr></thead><tbody>"),Z=o("<tr><td style=font-family:var(--font-mono);font-size:var(--font-size-xs)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)>");const ee=[{name:"Cohere",logo:"/icons/cohere.svg",description:"",tags:["Up to 1,000 calls/month","No credit card required"],apiKeyUrl:"https://dashboard.cohere.com/api-keys",baseUrl:"https://api.cohere.ai/compatibility/v1",warning:"Trial keys cannot be used for production or commercial workloads. Data may be used for training.",models:[{model_id:"command-a-03-2025",context:"256K",max_output:"8K",modality:"Text",trial_rate_limit:"20 req / min"},{model_id:"command-a-reasoning-08-2025",context:"256K",max_output:"32K",modality:"Text",trial_rate_limit:"20 req / min"}]},{name:"Gemini",logo:"/icons/gemini.svg",description:"",tags:["250K TPM (Tokens / Minute) shared across models","No credit card required"],apiKeyUrl:"https://aistudio.google.com/apikey",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",warning:"Rate limits apply per Google Cloud project, not per API key. On the free tier, prompts and responses may be used to improve Google products.",models:[{model_id:"gemini-2.5-pro",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"5 req / min"},{model_id:"gemini-2.5-flash",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"10 req / min"},{model_id:"gemini-2.5-flash-lite",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"15 req / min"},{model_id:"gemini-3-flash-preview",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"Preview limits"},{model_id:"gemini-3.1-flash-lite-preview",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"Preview limits"}]},{name:"Kilo Code",logo:"/icons/kilocode.jpg",description:"",tags:["No credit card required"],apiKeyUrl:"https://app.kilo.ai/profile",baseUrl:"https://api.kilo.ai/api/gateway",warning:"Prompts and outputs are logged on free models to improve provider products.",models:[{model_id:"qwen/qwen3.6-plus:free",context:"1M",max_output:"65K",modality:"Text + Image + Video",trial_rate_limit:"~200 req / hr"},{model_id:"nvidia/nemotron-3-super-120b-a12b:free",context:"262K",max_output:"262K",modality:"Text",trial_rate_limit:"~200 req / hr"},{model_id:"stepfun/step-3.5-flash:free",context:"256K",max_output:"256K",modality:"Text",trial_rate_limit:"~200 req / hr"},{model_id:"corethink:free",context:"78K",max_output:"8K",modality:"Text",trial_rate_limit:"~200 req / hr"}]}],te=()=>D(),ie=r=>{const[a,m]=R(!1),f=async()=>{try{await navigator.clipboard.writeText(r.text),m(!0),I.success("Copied to clipboard"),setTimeout(()=>m(!1),2e3)}catch{I.error("Failed to copy")}};return(()=>{var l=E();return l.$$click=f,e(l,()=>a()?"Copied":"Copy"),l})()},re=r=>{const a=L(),m=()=>decodeURIComponent(a.agentName),f=()=>r.provider.models.map(t=>`${t.model_id}:0:0`).join(","),l=()=>`/agents/${encodeURIComponent(m())}/routing?provider=custom&name=${encodeURIComponent(r.provider.name)}&baseUrl=${encodeURIComponent(r.provider.baseUrl)}&models=${encodeURIComponent(f())}`;return(()=>{var t=H();return t.firstChild,e(t,()=>r.provider.name,null),y(()=>z(t,"href",l())),t})()},le=()=>(()=>{var r=O(),a=r.firstChild,m=a.firstChild,f=m.firstChild,l=f.nextSibling;return l.firstChild,a.nextSibling,e(r,n(N,{children:"Free Models - Manifest"}),a),e(r,n(F,{name:"description",content:"Free LLM models you can use with Manifest. No credit card required."}),a),e(l,()=>G()??"your agent",null),e(r,n(C,{each:ee,children:t=>(()=>{var _=V(),k=_.firstChild,b=k.firstChild,M=b.nextSibling,w=M.firstChild;w.firstChild;var P=k.nextSibling;return e(b,(()=>{var d=U(()=>!!t.logo);return()=>d()&&(()=>{var s=J();return y(()=>z(s,"src",t.logo)),s})()})(),null),e(b,()=>t.name,null),e(w,n(te,{}),null),e(M,n(re,{provider:t}),null),e(P,n(C,{get each(){return t.tags??[]},children:d=>(()=>{var s=Q();return s.firstChild,e(s,d,null),s})()})),e(_,()=>{const[d,s]=R(!0);return[(()=>{var c=W(),g=c.firstChild,u=g.firstChild,$=u.nextSibling,x=g.nextSibling,v=x.firstChild;return e($,()=>t.baseUrl),e(g,n(ie,{get text(){return t.baseUrl}}),null),x.$$click=()=>s(i=>!i),e(x,(()=>{var i=U(()=>!!d());return()=>i()?"Hide models":`Show models (${t.models.length})`})(),v),y(i=>q(v,`width: 20px; height: 20px; transition: transform 250ms ease; transform: rotate(${d()?"180deg":"0deg"});`,i)),c})(),(()=>{var c=Y(),g=c.firstChild,u=g.firstChild,$=u.firstChild,x=$.nextSibling,v=x.nextSibling;return e(g,n(B,{get when(){return t.warning},get children(){var i=X(),p=i.firstChild,h=p.nextSibling;return e(h,()=>t.warning),i}}),u),e(v,n(C,{get each(){return t.models},children:i=>(()=>{var p=Z(),h=p.firstChild,K=h.nextSibling,S=K.nextSibling,T=S.nextSibling,j=T.nextSibling;return e(h,()=>i.model_id),e(K,()=>i.context),e(S,()=>i.max_output),e(T,()=>i.modality),e(j,()=>i.trial_rate_limit),p})()})),y(i=>{var p=!!d(),h=`table-layout: fixed; width: 100%;${t.warning?"":" margin-top: 16px;"}`;return p!==i.e&&c.classList.toggle("free-models-accordion--open",i.e=p),i.t=q(u,h,i.t),i},{e:void 0,t:void 0}),c})()]},null),y(()=>z(w,"href",t.apiKeyUrl)),_})()}),null),r})();A(["click"]);export{le as default};
@@ -1 +1 @@
1
- import{i as s,g as a,T as n,M as i,t as l}from"./vendor-pl6Q4jbW.js";var r=l(`<div class=container--sm><div class=page-header><div><h1>Help & Support</h1><span class=breadcrumb>Questions or issues? Reach out and we'll get back to you quickly</span></div></div><div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Schedule a Call</span><span class=settings-card__label-desc>Book a 30-min call with us to get help setting things up.</span></div><div class=settings-card__control><a href="https://calendly.com/sebastien-manifest/30min?month=2026-02"target=_blank rel="noopener noreferrer"class="btn btn--outline btn--sm"style=text-decoration:none>Book<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3></line></svg></a></div></div><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Email Support</span><span class=settings-card__label-desc>sebastien@manifest.build &mdash; we typically respond within 24 hours.</span></div><div class=settings-card__control><a href=mailto:sebastien@manifest.build class="btn btn--outline btn--sm"style=text-decoration:none>Contact<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6">`);const c=()=>(()=>{var t=r(),e=t.firstChild;return s(t,a(n,{children:"Help & Support - Manifest"}),e),s(t,a(i,{name:"description",content:"Get help with Manifest. Schedule a call or contact support."}),e),t})();export{c as default};
1
+ import{i as s,g as a,T as n,M as i,t as l}from"./vendor-C-Y5oNOq.js";var r=l(`<div class=container--sm><div class=page-header><div><h1>Help & Support</h1><span class=breadcrumb>Questions or issues? Reach out and we'll get back to you quickly</span></div></div><div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Schedule a Call</span><span class=settings-card__label-desc>Book a 30-min call with us to get help setting things up.</span></div><div class=settings-card__control><a href="https://calendly.com/sebastien-manifest/30min?month=2026-02"target=_blank rel="noopener noreferrer"class="btn btn--outline btn--sm"style=text-decoration:none>Book<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3></line></svg></a></div></div><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Email Support</span><span class=settings-card__label-desc>sebastien@manifest.build &mdash; we typically respond within 24 hours.</span></div><div class=settings-card__control><a href=mailto:sebastien@manifest.build class="btn btn--outline btn--sm"style=text-decoration:none>Contact<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6">`);const c=()=>(()=>{var t=r(),e=t.firstChild;return s(t,a(n,{children:"Help & Support - Manifest"}),e),s(t,a(i,{name:"description",content:"Get help with Manifest. Schedule a call or contact support."}),e),t})();export{c as default};