@levelcode/cli 0.3.1 → 0.3.3

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 (2) hide show
  1. package/dist/index.js +47 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -75886,6 +75886,15 @@ Spawn context-gathering agents before making edits. Spawn the code-reviewer afte
75886
75886
  - Do not cast types as "any". Maintain strong typing throughout.
75887
75887
  - When modifying exported symbols, find and update all references.
75888
75888
 
75889
+ # Output Completeness \u2014 CRITICAL
75890
+
75891
+ - NEVER truncate or abbreviate your output. There are NO length constraints.
75892
+ - NEVER create stubs, placeholders, or TODO comments instead of real implementations.
75893
+ - NEVER say "due to length constraints" or "for brevity" \u2014 write the complete code.
75894
+ - If the task asks for 2000+ lines, write 2000+ lines. The system handles context automatically.
75895
+ - If you run out of context, the context-pruner will handle it. Just keep writing.
75896
+ - Deliver production-ready, complete, compilable code every time.
75897
+
75889
75898
  ${PLACEHOLDER.FILE_TREE_PROMPT_SMALL}
75890
75899
  ${PLACEHOLDER.KNOWLEDGE_FILES_CONTENTS}
75891
75900
  ${PLACEHOLDER.SYSTEM_INFO_PROMPT}
@@ -86733,6 +86742,22 @@ When no tasks are available for you to work on:
86733
86742
  2. If no tasks are available, send an idle notification by using SendMessage with type "message" to the team leader, summarizing what you completed and that you are waiting for work.
86734
86743
  3. Do not spin or poll repeatedly. Wait for new messages in your inbox.`;
86735
86744
  }
86745
+ function buildQualityStandards() {
86746
+ return `## Output Quality Standards
86747
+
86748
+ CRITICAL: Never truncate, abbreviate, or create stub/placeholder implementations.
86749
+
86750
+ - **Never say** "due to length constraints" or "for brevity" \u2014 there are no length constraints. Produce complete, full implementations.
86751
+ - **Never create stubs** like "// TODO: implement" or "// remaining implementation here". Write the actual code.
86752
+ - **Never skip sections** of code with comments like "// ... rest of implementation similar to above". Write every line.
86753
+ - **If your output is getting long**, that is fine. Continue writing. The system handles context limits automatically via context-pruner.
86754
+ - **If you run out of context space**, the system will spawn a context-pruner to summarize and continue. You do not need to manage this yourself.
86755
+ - **Quality over speed.** A complete 2000-line implementation is better than a 200-line stub with TODOs.
86756
+ - **Production-ready code only.** Every file you create should compile, have proper error handling, and be ready to ship.
86757
+ - **Include all imports, all types, all tests** that were requested. Do not skip any part of the specification.
86758
+
86759
+ If a task is genuinely too large for a single step, break it into sub-tasks and complete each one fully. Never deliver partial work.`;
86760
+ }
86736
86761
  function buildShutdownProtocol() {
86737
86762
  return `## Shutdown Protocol
86738
86763
 
@@ -86803,6 +86828,8 @@ function generateTeamContextPrompt(config2) {
86803
86828
  "",
86804
86829
  buildAvailableTools(config2),
86805
86830
  "",
86831
+ buildQualityStandards(),
86832
+ "",
86806
86833
  buildCommunicationProtocol(),
86807
86834
  "",
86808
86835
  buildTaskWorkflow(),
@@ -108665,7 +108692,7 @@ var init_provider_registry = __esm(() => {
108665
108692
  perplexity: {
108666
108693
  id: "perplexity",
108667
108694
  name: "Perplexity",
108668
- baseUrl: "https://api.perplexity.ai",
108695
+ baseUrl: "https://api.perplexity.ai/v1",
108669
108696
  envVars: ["PERPLEXITY_API_KEY"],
108670
108697
  apiFormat: "openai-compatible",
108671
108698
  authType: "bearer",
@@ -108756,10 +108783,11 @@ var init_provider_registry = __esm(() => {
108756
108783
  id: "azure-openai",
108757
108784
  name: "Azure OpenAI",
108758
108785
  baseUrl: "",
108759
- envVars: ["AZURE_OPENAI_API_KEY"],
108786
+ envVars: ["AZURE_OPENAI_API_KEY", "AZURE_API_KEY"],
108760
108787
  apiFormat: "openai-compatible",
108761
108788
  authType: "bearer",
108762
- category: "enterprise"
108789
+ category: "enterprise",
108790
+ description: "Requires custom baseUrl: https://<resource>.openai.azure.com/openai/deployments/<deployment>/v1"
108763
108791
  },
108764
108792
  "github-models": {
108765
108793
  id: "github-models",
@@ -109039,6 +109067,9 @@ function createProviderModel(providerId, modelId, apiKey, baseUrl, oauthAccessTo
109039
109067
  const definition2 = getProviderDefinition(providerId);
109040
109068
  const effectiveBaseUrl = baseUrl ?? definition2?.baseUrl ?? "";
109041
109069
  const effectiveApiKey = oauthAccessToken ?? apiKey;
109070
+ if (!effectiveBaseUrl && definition2?.apiFormat !== "anthropic") {
109071
+ throw new Error(`Provider "${providerId}" requires a custom baseUrl. ` + (definition2?.description ?? `Set baseUrl in /provider:add or providers.json.`));
109072
+ }
109042
109073
  if (definition2?.apiFormat === "anthropic") {
109043
109074
  const anthropic2 = createAnthropic({ apiKey: effectiveApiKey });
109044
109075
  return anthropic2(modelId);
@@ -109052,6 +109083,8 @@ function createProviderModel(providerId, modelId, apiKey, baseUrl, oauthAccessTo
109052
109083
  h2["Authorization"] = `Bearer ${effectiveApiKey}`;
109053
109084
  } else if (definition2?.authType === "x-api-key" && effectiveApiKey) {
109054
109085
  h2["x-api-key"] = effectiveApiKey;
109086
+ } else if (definition2?.authType === "aws-credentials" && effectiveApiKey) {
109087
+ h2["Authorization"] = `Bearer ${effectiveApiKey}`;
109055
109088
  }
109056
109089
  if (definition2?.defaultHeaders) {
109057
109090
  Object.assign(h2, definition2.defaultHeaders);
@@ -109105,7 +109138,7 @@ async function resolveModelFromProviders(modelId) {
109105
109138
  }
109106
109139
  }
109107
109140
  if (modelId.includes("/")) {
109108
- const aggregatorProviders = ["openrouter", "together", "deepinfra", "fireworks-ai"];
109141
+ const aggregatorProviders = ["openrouter", "together", "deepinfra", "fireworks", "groq", "aihubmix"];
109109
109142
  for (const providerId of aggregatorProviders) {
109110
109143
  const entry = config2.providers[providerId];
109111
109144
  if (!entry?.enabled)
@@ -166215,6 +166248,15 @@ Spawn context-gathering agents before making edits. Spawn the code-reviewer afte
166215
166248
  - Do not cast types as "any". Maintain strong typing throughout.
166216
166249
  - When modifying exported symbols, find and update all references.
166217
166250
 
166251
+ # Output Completeness \u2014 CRITICAL
166252
+
166253
+ - NEVER truncate or abbreviate your output. There are NO length constraints.
166254
+ - NEVER create stubs, placeholders, or TODO comments instead of real implementations.
166255
+ - NEVER say "due to length constraints" or "for brevity" \u2014 write the complete code.
166256
+ - If the task asks for 2000+ lines, write 2000+ lines. The system handles context automatically.
166257
+ - If you run out of context, the context-pruner will handle it. Just keep writing.
166258
+ - Deliver production-ready, complete, compilable code every time.
166259
+
166218
166260
  {LEVELCODE_FILE_TREE_PROMPT_SMALL}
166219
166261
  {LEVELCODE_KNOWLEDGE_FILES_CONTENTS}
166220
166262
  {LEVELCODE_SYSTEM_INFO_PROMPT}
@@ -198342,6 +198384,7 @@ async function testProvider(providerId, apiKey, baseUrl, oauthAccessToken) {
198342
198384
  const headers = {};
198343
198385
  switch (definition2.authType) {
198344
198386
  case "bearer":
198387
+ case "aws-credentials":
198345
198388
  headers["Authorization"] = `Bearer ${effectiveApiKey}`;
198346
198389
  break;
198347
198390
  case "x-api-key":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levelcode/cli",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "LevelCode CLI - Terminal-based AI coding agent that outperforms Claude Code",
5
5
  "author": {
6
6
  "name": "Yethikrishna R",