@pentoshi/clai 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/runner.js +8 -9
  3. package/dist/agent/runner.js.map +1 -1
  4. package/dist/app/commands/catalog.js +4 -5
  5. package/dist/app/commands/catalog.js.map +1 -1
  6. package/dist/app/commands/registry.js +0 -1
  7. package/dist/app/commands/registry.js.map +1 -1
  8. package/dist/app/controllers/session-controller.d.ts +3 -0
  9. package/dist/app/controllers/session-controller.js +11 -25
  10. package/dist/app/controllers/session-controller.js.map +1 -1
  11. package/dist/app/controllers/session-persistence.d.ts +4 -1
  12. package/dist/app/controllers/session-persistence.js +23 -5
  13. package/dist/app/controllers/session-persistence.js.map +1 -1
  14. package/dist/app/controllers/session-responder.d.ts +1 -0
  15. package/dist/app/controllers/session-responder.js +8 -0
  16. package/dist/app/controllers/session-responder.js.map +1 -1
  17. package/dist/app/controllers/session-usage-ledger.d.ts +63 -0
  18. package/dist/app/controllers/session-usage-ledger.js +232 -0
  19. package/dist/app/controllers/session-usage-ledger.js.map +1 -0
  20. package/dist/classic/app/ClassicApp.js +2 -1
  21. package/dist/classic/app/ClassicApp.js.map +1 -1
  22. package/dist/classic/chrome/toast-rows.d.ts +1 -0
  23. package/dist/classic/chrome/toast-rows.js +18 -0
  24. package/dist/classic/chrome/toast-rows.js.map +1 -1
  25. package/dist/index.js +6 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/llm/custom-provider-profile.js +2 -2
  28. package/dist/llm/custom-provider-profile.js.map +1 -1
  29. package/dist/llm/http.js +33 -0
  30. package/dist/llm/http.js.map +1 -1
  31. package/dist/llm/key-rotation.d.ts +1 -0
  32. package/dist/llm/key-rotation.js +8 -0
  33. package/dist/llm/key-rotation.js.map +1 -1
  34. package/dist/llm/provider-profile-layers.js +14 -13
  35. package/dist/llm/provider-profile-layers.js.map +1 -1
  36. package/dist/llm/provider-profile.d.ts +1 -0
  37. package/dist/llm/provider-profile.js +5 -0
  38. package/dist/llm/provider-profile.js.map +1 -1
  39. package/dist/llm/provider-profiles.js +2 -2
  40. package/dist/llm/provider-profiles.js.map +1 -1
  41. package/dist/llm/stream-terminal.js +2 -1
  42. package/dist/llm/stream-terminal.js.map +1 -1
  43. package/dist/store/history.d.ts +1 -0
  44. package/dist/store/history.js +7 -0
  45. package/dist/store/history.js.map +1 -1
  46. package/dist/store/scope.d.ts +8 -0
  47. package/dist/store/scope.js +138 -1
  48. package/dist/store/scope.js.map +1 -1
  49. package/dist/tools/interactive-session-tools.js +5 -5
  50. package/dist/tools/interactive-session-tools.js.map +1 -1
  51. package/dist/tools/registry.js +2 -2
  52. package/dist/tools/registry.js.map +1 -1
  53. package/dist/ui-core/bootstrap/composition-root.js +8 -2
  54. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  55. package/dist/ui-core/commands/command-handlers.js +2 -1
  56. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  57. package/dist/ui-core/commands/config-commands.js +17 -14
  58. package/dist/ui-core/commands/config-commands.js.map +1 -1
  59. package/dist/ui-core/commands/session-commands.d.ts +1 -0
  60. package/dist/ui-core/commands/session-commands.js +20 -0
  61. package/dist/ui-core/commands/session-commands.js.map +1 -1
  62. package/dist/ui-core/rendering/format-help.js +2 -2
  63. package/dist/ui-core/rendering/format-help.js.map +1 -1
  64. package/dist/ui-core/rendering/format-usage.d.ts +6 -0
  65. package/dist/ui-core/rendering/format-usage.js +116 -0
  66. package/dist/ui-core/rendering/format-usage.js.map +1 -0
  67. package/dist/version.generated.d.ts +2 -2
  68. package/dist/version.generated.js +2 -2
  69. package/package.json +1 -1
package/README.md CHANGED
@@ -412,7 +412,7 @@ Tool cards show the command/input clearly, with a live elapsed timer next to the
412
412
  |---------|------|
413
413
  | `/ask` · `/agent` · `/plan` | Switch mode (plan = design-then-approve) |
414
414
  | `/implement` · `/discard` | Approve+execute or drop the current plan |
415
- | `/model [name\|#]` · `/provider [name]` · `/use <provider>` | Pick model / switch provider |
415
+ | `/model [name\|#]` · `/provider [name]` | Pick model / switch provider |
416
416
  | `/set [provider]` · `/unset [provider]` · `/keys` · `/info [provider]` | Manage API keys, endpoint URLs, and view provider setup / pricing info |
417
417
  | `/effort [level]` · `/reasoning [level]` | Thinking / reasoning effort |
418
418
  | `/freeonly [on\|off]` · `/fallback [on\|off]` | Free-only filter · cross-provider fallback |
@@ -1,5 +1,6 @@
1
1
  import { join } from "node:path";
2
2
  import { streamWithProvider } from "../llm/router.js";
3
+ import { isProviderFailureStatus } from "../llm/key-rotation.js";
3
4
  import { operationUsageFromError } from "../llm/operation-ledger.js";
4
5
  import { contextAttemptFromOperationUsage } from "../llm/context-snapshot.js";
5
6
  import { modelContextWindow } from "../llm/token-usage.js";
@@ -50,7 +51,7 @@ import { accountAssembledRequest, RequestOverLimitError, } from "./request-accou
50
51
  import { autoCompactTriggerTokens, dedupeToolContextOutput, freeTierGuardNotices, getReliabilityPolicy, resolveStepMaxTokens, } from "./reliability-policy.js";
51
52
  import { auditLog } from "../store/logs.js";
52
53
  import { loadProjectContext } from "../store/project.js";
53
- import { loadScope, isScopeActive } from "../store/scope.js";
54
+ import { loadScopeForSession, isScopeActive } from "../store/scope.js";
54
55
  import { ensureProviderConfigured } from "../commands/providers.js";
55
56
  import { createThinkingStreamParser, rememberThinking, stripThinking, } from "../ui/thinking.js";
56
57
  import { hasReasoningMarker } from "../llm/reasoning-marker.js";
@@ -640,7 +641,7 @@ export async function runAgentTurn(prompt, options = {}) {
640
641
  systemSections.push(pentestNoLocalServerDirective());
641
642
  }
642
643
  {
643
- const engScope = await loadScope().catch(() => undefined);
644
+ const engScope = await loadScopeForSession(session.sessionId).catch(() => undefined);
644
645
  const scopeBlock = scopeContextMessage(engScope);
645
646
  if (scopeBlock && (pentestSession || pentestLikeTurn) && !idleOrSocialPrompt) {
646
647
  systemSections.push(scopeBlock);
@@ -1567,7 +1568,7 @@ export async function runAgentTurn(prompt, options = {}) {
1567
1568
  };
1568
1569
  }
1569
1570
  }
1570
- const scope = await loadScope();
1571
+ const scope = await loadScopeForSession(session.sessionId);
1571
1572
  const decision = classifyToolCall(call, { scope });
1572
1573
  await auditLog("tool.classified", {
1573
1574
  call,
@@ -3261,11 +3262,9 @@ export async function runAgentTurn(prompt, options = {}) {
3261
3262
  }, {
3262
3263
  onStatus: (status) => {
3263
3264
  writeStatus(status);
3264
- // Toast only on key *switch* after a failure — never on sticky
3265
- // "using" or retry countdown ticks (those stay in composer status).
3266
- if (/^switching /i.test(status.trim())) {
3267
- writeNotice("warn", status.trim());
3268
- }
3265
+ const full = status.replace(/\s+/g, " ").trim();
3266
+ if (isProviderFailureStatus(full))
3267
+ writeNotice("warn", full);
3269
3268
  },
3270
3269
  onStreamEvent: (event) => {
3271
3270
  if (event.type !== "reasoning_delta")
@@ -4421,7 +4420,7 @@ export async function runAgentTurn(prompt, options = {}) {
4421
4420
  .join("\n\n");
4422
4421
  pushAssistantHistory(standardizedContent, completion);
4423
4422
  }
4424
- const scopeForBatch = await loadScope().catch(() => undefined);
4423
+ const scopeForBatch = await loadScopeForSession(session.sessionId).catch(() => undefined);
4425
4424
  const isParallelSafe = (c) => {
4426
4425
  if (c.name === "pentest.recon" ||
4427
4426
  c.name === "net.context" ||