@agentplate/cli 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/paths.ts CHANGED
@@ -22,8 +22,9 @@ export const agentStateDir = (root: string, agentName: string): string =>
22
22
  join(root, AGENTPLATE_DIR, "agents", agentName);
23
23
  export const appliedSkillsPath = (root: string, agentName: string): string =>
24
24
  join(agentStateDir(root, agentName), "applied-skills.json");
25
+ export const specsDir = (root: string): string => join(root, AGENTPLATE_DIR, "specs");
25
26
  export const specPath = (root: string, taskId: string): string =>
26
- join(root, AGENTPLATE_DIR, "specs", `${taskId}.md`);
27
+ join(specsDir(root), `${taskId}.md`);
27
28
 
28
29
  /**
29
30
  * Path to a bundled base agent definition shipped with the package
package/src/version.ts CHANGED
@@ -4,4 +4,4 @@
4
4
  * Kept as a plain constant (not read from package.json at runtime) so the value
5
5
  * is available without filesystem access and survives bundling.
6
6
  */
7
- export const VERSION = "1.0.0";
7
+ export const VERSION = "1.1.0";
@@ -72,7 +72,7 @@ export async function runSetupWizard(currentConfig: AgentplateConfig): Promise<W
72
72
  await p.text({
73
73
  message: "Base URL for the endpoint",
74
74
  placeholder: "https://my-endpoint.example.com/v1",
75
- validate: (v) => (v.trim().length === 0 ? "A base URL is required" : undefined),
75
+ validate: (v) => (!v || v.trim().length === 0 ? "A base URL is required" : undefined),
76
76
  }),
77
77
  );
78
78
  } else {
@@ -148,7 +148,7 @@ export async function runSetupWizard(currentConfig: AgentplateConfig): Promise<W
148
148
  const key = ensure(
149
149
  await p.password({
150
150
  message: `Enter your ${spec.label} API key (${spec.authEnvVar})`,
151
- validate: (v) => (v.trim().length === 0 ? "An API key is required" : undefined),
151
+ validate: (v) => (!v || v.trim().length === 0 ? "An API key is required" : undefined),
152
152
  }),
153
153
  );
154
154
  secret = { key: spec.authEnvVar, value: key.trim() };
@@ -178,7 +178,7 @@ export async function runSetupWizard(currentConfig: AgentplateConfig): Promise<W
178
178
  ? ensure(
179
179
  await p.text({
180
180
  message: "Model id",
181
- validate: (v) => (v.trim().length === 0 ? "A model id is required" : undefined),
181
+ validate: (v) => (!v || v.trim().length === 0 ? "A model id is required" : undefined),
182
182
  }),
183
183
  ).trim()
184
184
  : choice;
@@ -187,7 +187,7 @@ export async function runSetupWizard(currentConfig: AgentplateConfig): Promise<W
187
187
  await p.text({
188
188
  message: "Model id",
189
189
  placeholder: "provider/model-name",
190
- validate: (v) => (v.trim().length === 0 ? "A model id is required" : undefined),
190
+ validate: (v) => (!v || v.trim().length === 0 ? "A model id is required" : undefined),
191
191
  }),
192
192
  ).trim();
193
193
  }
@@ -0,0 +1 @@
1
+ :root{--bg:#08090f;--bg-rail:#0b0c14;--bg-topbar:#0c0e16;--bg-card:#14161f;--bg-card-2:#1b1e2a;--bg-input:#1d2030;--border:#262a38;--border-soft:#1c1f2b;--text:#eef0f6;--text-dim:#a3a9bd;--text-faint:#6b7188;--accent:#fb4b38;--accent-2:#ff6a4d;--accent-soft:#fb4b3824;--accent-border:#fb4b3873;--grad-accent:linear-gradient(135deg, #ff6a4d 0%, #fb4b38 55%, #e0245e 100%);--grad-brand:linear-gradient(135deg, #ff7a3d, #fb4b38);--ok:#2dd4a7;--ok-soft:#2dd4a724;--grad-ok:linear-gradient(135deg, #34e7b4, #10b981);--warn:#fbbf24;--warn-soft:#fbbf2424;--grad-warn:linear-gradient(135deg, #fcd34d, #f59e0b);--err:#fb4b38;--err-soft:#fb4b3824;--info:#4f8cff;--info-soft:#4f8cff24;--grad-info:linear-gradient(135deg, #6aa8ff, #3b6cf6);--violet:#a78bfa;--violet-soft:#a78bfa24;--grad-violet:linear-gradient(135deg, #c4b5fd, #8b5cf6);--cyan:#22d3ee;--cyan-soft:#22d3ee24;--grad-cyan:linear-gradient(135deg, #67e8f9, #06b6d4);--rail-w:80px;--topbar-h:54px;--statusbar-h:30px;--radius:16px;--radius-sm:10px;--shadow-card:0 1px 0 #ffffff08 inset, 0 8px 24px #00000047;--glow-accent:0 6px 20px #fb4b3859}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;background-image:radial-gradient(900px 500px at 100% -5%,#fb4b381a,#0000 60%),radial-gradient(800px 500px at -5% 0,#7c5cf61a,#0000 55%),radial-gradient(700px 600px at 50% 110%,#22d3ee0f,#0000 60%);background-attachment:fixed;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Inter,Roboto,Helvetica,Arial,sans-serif;font-size:14px}.os{grid-template-columns:var(--rail-w) 1fr;grid-template-rows:var(--topbar-h) 1fr var(--statusbar-h);grid-template-areas:"rail topbar""rail main""rail status";height:100vh;display:grid;overflow:hidden}.rail{background:var(--bg-rail);border-right:1px solid var(--border);flex-direction:column;grid-area:rail;align-items:center;gap:4px;padding:10px 0;display:flex;overflow-y:auto}.rail::-webkit-scrollbar{width:0}.rail-logo{color:#fff;background:var(--grad-brand);width:42px;height:42px;box-shadow:var(--glow-accent);border-radius:13px;place-items:center;margin-bottom:12px;display:grid}.rail-item{width:62px;color:var(--text-faint);cursor:pointer;font:inherit;background:0 0;border:none;border-radius:14px;flex-direction:column;align-items:center;gap:5px;padding:9px 0 7px;transition:color .15s,background .15s,transform .1s;display:flex;position:relative}.rail-item:hover{color:var(--text);background:var(--bg-card)}.rail-item:active{transform:scale(.95)}.rail-item.active{color:#fff;background:var(--accent-soft)}.rail-item.active:before{content:"";background:var(--grad-accent);border-radius:0 4px 4px 0;width:4px;height:22px;position:absolute;top:50%;left:-10px;transform:translateY(-50%)}.rail-item.active .ri-icon{color:var(--accent-2);filter:drop-shadow(0 0 8px #fb4b388c)}.rail-item .ri-icon{place-items:center;line-height:1;display:grid}.rail-item .ri-label{letter-spacing:.01em;font-size:10px;font-weight:600}.topbar{background:var(--bg-topbar);border-bottom:1px solid var(--border);grid-area:topbar;align-items:center;gap:14px;padding:0 16px;display:flex}.topbar-brand{align-items:center;gap:9px;font-size:15px;font-weight:700;display:flex}.topbar-brand .brand-glyph{color:var(--accent-2);place-items:center;display:grid}.ver-pill{color:#fff;background:var(--grad-accent);letter-spacing:.04em;border-radius:7px;padding:2px 7px;font-size:10px;font-weight:800;box-shadow:0 2px 8px #fb4b3866}.topbar-spacer{flex:1}.topbar-search{background:var(--bg-input);border:1px solid var(--border);width:min(420px,38vw);color:var(--text-faint);font:inherit;text-align:left;cursor:pointer;border-radius:11px;align-items:center;gap:9px;padding:8px 12px;font-size:13px;transition:border-color .15s,box-shadow .15s;display:flex}.topbar-search span{flex:1}.topbar-search:hover{border-color:var(--accent-border);box-shadow:0 0 0 3px var(--accent-soft)}.topbar-search kbd{background:var(--bg-card-2);border:1px solid var(--border);color:var(--text-dim);border-radius:5px;margin-left:auto;padding:1px 5px;font-size:11px}.topbar-icon{width:34px;height:34px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:9px;place-items:center;font-size:16px;display:grid;position:relative}.topbar-icon:hover{background:var(--bg-card);color:var(--text)}.topbar-badge{background:var(--accent);color:#fff;text-align:center;min-width:15px;height:15px;box-shadow:0 0 0 2px var(--bg-topbar,#0d0e11);border-radius:8px;padding:0 4px;font-size:9.5px;font-weight:800;line-height:15px;position:absolute;top:1px;right:1px}.notif-wrap{display:inline-flex;position:relative}.notif-panel{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);z-index:60;width:360px;max-height:460px;position:absolute;top:calc(100% + 8px);right:0;overflow-y:auto;box-shadow:0 16px 40px #00000080}.notif-head{border-bottom:1px solid var(--border-soft);background:var(--bg-card);justify-content:space-between;align-items:center;padding:12px 14px;display:flex;position:sticky;top:0}.notif-title{font-size:13.5px;font-weight:800}.notif-count{color:var(--text-faint);font-size:12px}.notif-empty{text-align:center;color:var(--text-faint);padding:28px 16px;font-size:13px}.notif-list{margin:0;padding:0;list-style:none}.notif-item{border-bottom:1px solid var(--border-soft);align-items:flex-start;gap:10px;padding:11px 14px;display:flex}.notif-item.clickable{cursor:pointer}.notif-item.clickable:hover{background:var(--bg-card-2)}.notif-item.fresh{background:#f5402d0f}.notif-dot{border-radius:50%;flex:none;width:9px;height:9px;margin-top:4px}.notif-body{flex:1;min-width:0}.notif-row1{align-items:baseline;gap:8px;display:flex}.notif-agent{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:700;overflow:hidden}.notif-label{color:var(--text-faint);letter-spacing:.02em;font-size:10.5px}.notif-ago{color:var(--text-faint);white-space:nowrap;margin-left:auto;font-size:11px}.notif-summary{color:var(--text-dim);word-break:break-word;margin-top:2px;font-size:12.5px}.topbar-user{border-radius:18px;align-items:center;gap:8px;padding:4px 8px 4px 4px;display:flex}.avatar{background:var(--grad-accent);color:#fff;width:30px;height:30px;box-shadow:var(--glow-accent);border-radius:50%;place-items:center;font-size:13px;font-weight:800;display:grid}.main{grid-area:main;padding:26px 30px 40px;overflow-y:auto}.statusbar{background:var(--bg-topbar);border-top:1px solid var(--border);color:var(--text-dim);grid-area:status;align-items:center;gap:20px;padding:0 16px;font-size:11.5px;display:flex}.sb-item{align-items:center;gap:6px;display:flex}.sb-key{color:var(--text-faint);letter-spacing:.02em;font-weight:600}.sb-val{color:var(--text);font-weight:600}.sb-bar{background:var(--bg-card-2);border-radius:3px;width:46px;height:5px;overflow:hidden}.sb-bar>span{border-radius:3px;height:100%;display:block}.sb-spacer{flex:1}.sb-dot{border-radius:50%;width:7px;height:7px;display:inline-block}.page-head{margin-bottom:22px}.page-title{letter-spacing:-.02em;align-items:center;gap:12px;margin:0;font-size:30px;font-weight:800;display:flex}.page-sub{color:var(--text-dim);margin:6px 0 0;font-size:14px}.head-row{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:22px;display:grid}.stat{background:var(--bg-card);border:1px solid var(--border-soft);border-radius:var(--radius);min-height:150px;box-shadow:var(--shadow-card);flex-direction:column;padding:18px 20px;transition:transform .15s,border-color .15s;display:flex;position:relative;overflow:hidden}.stat:after{content:"";background:var(--grad-accent);opacity:.7;height:2px;position:absolute;inset:0 0 auto}.stat:hover{border-color:var(--border);transform:translateY(-2px)}.stat-top{justify-content:space-between;align-items:center;display:flex}.stat-label{color:var(--text-dim);font-size:14px;font-weight:500}.stat-icon{color:#fff;background:var(--grad-accent);border-radius:11px;place-items:center;width:38px;height:38px;display:grid;box-shadow:0 4px 12px #00000040}.stat-icon.ok{background:var(--grad-ok)}.stat-icon.warn{background:var(--grad-warn)}.stat-icon.info{background:var(--grad-info)}.stat-icon.violet{background:var(--grad-violet)}.stat-icon.cyan{background:var(--grad-cyan)}.stat-value{letter-spacing:-.02em;margin-top:auto;font-size:42px;font-weight:800;line-height:1}.stat-value.sm{font-size:30px}.stat-value.accent{color:var(--accent-2)}.stat-value.ok{color:var(--ok)}.stat-sub{color:var(--text-faint);margin-top:6px;font-size:12px}.title-icon{color:#fff;background:var(--grad-accent);width:40px;height:40px;box-shadow:var(--glow-accent);border-radius:13px;flex:none;place-items:center;display:grid}.title-icon.ok{background:var(--grad-ok);box-shadow:0 6px 18px #10b98152}.title-icon.warn{background:var(--grad-warn);box-shadow:0 6px 18px #f59e0b52}.title-icon.info{background:var(--grad-info);box-shadow:0 6px 18px #3b6cf652}.title-icon.violet{background:var(--grad-violet);box-shadow:0 6px 18px #8b5cf652}.title-icon.cyan{background:var(--grad-cyan);box-shadow:0 6px 18px #06b6d452}.card{background:var(--bg-card);border:1px solid var(--border-soft);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:20px}.card-head{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.card-title{align-items:center;gap:9px;font-size:16px;font-weight:700;display:flex}.card-title svg{color:var(--accent-2)}.card-meta{color:var(--text-faint);font-size:12px}.btn{border:1px solid var(--border);background:var(--bg-card-2);color:var(--text);font:inherit;cursor:pointer;border-radius:9px;align-items:center;gap:7px;padding:8px 14px;font-size:13px;font-weight:600;display:inline-flex}.btn:hover:not(:disabled){border-color:var(--accent-border)}.btn.primary{background:var(--grad-accent);color:#fff;box-shadow:var(--glow-accent);border-color:#0000}.btn.primary:hover:not(:disabled){filter:brightness(1.08);border-color:#0000}.btn:disabled{opacity:.5;cursor:not-allowed}.seg{background:var(--bg-card-2);border:1px solid var(--border);border-radius:10px;gap:2px;padding:3px;display:inline-flex}.seg button{color:var(--text-dim);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:7px;padding:6px 14px;font-size:13px;font-weight:600}.seg button.active{background:var(--grad-accent);color:#fff;box-shadow:0 2px 10px #fb4b3859}.badge{border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:3px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.badge .bdot{background:currentColor;border-radius:50%;width:6px;height:6px}.badge.ok{color:var(--ok);background:var(--ok-soft);border-color:#34d3994d}.badge.warn{color:var(--warn);background:var(--warn-soft);border-color:#fbbf244d}.badge.err{color:var(--err);background:var(--err-soft);border-color:var(--accent-border)}.badge.info{color:var(--info);background:var(--info-soft);border-color:#60a5fa4d}.badge.accent{color:var(--accent-2);background:var(--accent-soft);border-color:var(--accent-border)}.badge.neutral{color:var(--text-dim);background:var(--bg-card-2);border-color:var(--border)}.badge.violet{color:var(--violet);background:#a78bfa1f;border-color:#a78bfa4d}.bar{background:var(--bg-card-2);border-radius:4px;height:7px;overflow:hidden}.bar>span{background:var(--grad-accent);border-radius:4px;height:100%;display:block}.grid-wrap{overflow-x:auto}table.grid{border-collapse:collapse;width:100%;font-size:13px}table.grid th{text-align:left;color:var(--text-faint);letter-spacing:.05em;text-transform:uppercase;border-bottom:1px solid var(--border);padding:8px 12px;font-size:11px;font-weight:600}table.grid td{border-bottom:1px solid var(--border-soft);color:var(--text);padding:11px 12px}table.grid tr:last-child td{border-bottom:none}.row-click{cursor:pointer}.row-click:hover{background:var(--bg-card-2)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.dim{color:var(--text-dim)}.faint{color:var(--text-faint)}.nowrap{white-space:nowrap}.empty{color:var(--text-faint);text-align:center;padding:24px}.row-2col{grid-template-columns:1fr 1fr;gap:16px;display:grid}@media (width<=1000px){.row-2col{grid-template-columns:1fr}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:6px}::-webkit-scrollbar-track{background:0 0}.cmdk-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:80;background:#0405098c;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.cmdk{background:var(--bg-card);border:1px solid var(--border);border-radius:16px;flex-direction:column;width:min(560px,92vw);display:flex;overflow:hidden;box-shadow:0 24px 70px #0000008c}.cmdk-input{border:none;border-bottom:1px solid var(--border-soft);width:100%;color:var(--text);font:inherit;background:0 0;outline:none;padding:16px 18px;font-size:16px}.cmdk-input::placeholder{color:var(--text-faint)}.cmdk-list{max-height:50vh;padding:6px;overflow-y:auto}.cmdk-section{letter-spacing:.08em;text-transform:uppercase;color:var(--text-faint);padding:10px 10px 4px;font-size:10.5px;font-weight:700}.cmdk-item{width:100%;color:var(--text);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;border-radius:10px;align-items:center;gap:11px;padding:9px 11px;font-size:14px;display:flex}.cmdk-item.active{background:var(--accent-soft)}.cmdk-icon{color:var(--text-dim);flex:none;place-items:center;display:grid}.cmdk-item.active .cmdk-icon{color:var(--accent-2)}.cmdk-label{white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:600;overflow:hidden}.cmdk-kind{color:var(--text-faint);border:1px solid var(--border);border-radius:6px;padding:1px 6px;font-size:11px}.cmdk-empty{text-align:center;color:var(--text-faint);padding:26px}.cmdk-foot{border-top:1px solid var(--border-soft);color:var(--text-faint);gap:16px;padding:9px 14px;font-size:11.5px;display:flex}.cmdk-foot kbd{background:var(--bg-card-2);border:1px solid var(--border);border-radius:5px;margin-right:3px;padding:1px 5px;font-size:10.5px}