@astralyn/pi 0.82.2 → 0.82.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 (78) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +70 -634
  3. package/dist/core/extensions/types.d.ts +2 -0
  4. package/dist/core/extensions/types.d.ts.map +1 -1
  5. package/dist/core/extensions/types.js.map +1 -1
  6. package/dist/core/model-resolver.d.ts +1 -0
  7. package/dist/core/model-resolver.d.ts.map +1 -1
  8. package/dist/core/model-resolver.js +13 -3
  9. package/dist/core/model-resolver.js.map +1 -1
  10. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  11. package/dist/core/remote-catalog-provider.js +19 -1
  12. package/dist/core/remote-catalog-provider.js.map +1 -1
  13. package/dist/core/resource-loader.d.ts.map +1 -1
  14. package/dist/core/resource-loader.js +3 -0
  15. package/dist/core/resource-loader.js.map +1 -1
  16. package/dist/extensions/llama/provider.d.ts.map +1 -1
  17. package/dist/extensions/llama/provider.js +6 -0
  18. package/dist/extensions/llama/provider.js.map +1 -1
  19. package/dist/modes/interactive/components/custom-message.d.ts +3 -1
  20. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  21. package/dist/modes/interactive/components/custom-message.js +10 -2
  22. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  23. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  24. package/dist/modes/interactive/components/scoped-models-selector.js +22 -13
  25. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  26. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  27. package/dist/modes/interactive/interactive-mode.js +28 -16
  28. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  29. package/docs/bundled/README.md +38 -0
  30. package/docs/bundled/extensions/README.md +18 -0
  31. package/docs/{distribution → bundled}/extensions/question.md +0 -11
  32. package/docs/{distribution → bundled}/extensions/rewind.md +0 -10
  33. package/docs/{distribution → bundled}/extensions/router.md +1 -14
  34. package/docs/{distribution → bundled}/extensions/statusline.md +1 -2
  35. package/docs/{distribution → bundled}/extensions/subagent.md +0 -7
  36. package/docs/bundled/extensions/todo.md +28 -0
  37. package/docs/{distribution → bundled}/themes.md +4 -11
  38. package/docs/{distribution → bundled}/tool-presentation.md +4 -10
  39. package/docs/compaction.md +12 -12
  40. package/docs/custom-provider.md +8 -8
  41. package/docs/docs.json +57 -9
  42. package/docs/extensions.md +10 -11
  43. package/docs/index.md +12 -7
  44. package/docs/json.md +4 -4
  45. package/docs/providers.md +1 -1
  46. package/docs/rpc.md +3 -9
  47. package/docs/session-format.md +5 -5
  48. package/docs/skills.md +1 -1
  49. package/docs/themes.md +4 -8
  50. package/docs/tui.md +1 -1
  51. package/examples/extensions/README.md +0 -1
  52. package/examples/extensions/custom-provider-anthropic/index.ts +4 -4
  53. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  54. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  55. package/examples/extensions/gondolin/index.ts +4 -6
  56. package/examples/extensions/message-renderer.ts +2 -2
  57. package/examples/extensions/overlay-qa-tests.ts +2 -2
  58. package/examples/extensions/project-trust.ts +2 -2
  59. package/examples/sdk/README.md +38 -44
  60. package/npm-shrinkwrap.json +2 -2
  61. package/package.json +6 -2
  62. package/docs/development.md +0 -68
  63. package/docs/distribution/README.md +0 -34
  64. package/docs/distribution/architecture.md +0 -102
  65. package/docs/distribution/extensions/README.md +0 -17
  66. package/docs/distribution/maintenance.md +0 -121
  67. package/docs/distribution/release.md +0 -85
  68. package/examples/extensions/subagent/README.md +0 -175
  69. package/examples/extensions/subagent/agents/planner.md +0 -37
  70. package/examples/extensions/subagent/agents/reviewer.md +0 -35
  71. package/examples/extensions/subagent/agents/scout.md +0 -50
  72. package/examples/extensions/subagent/agents/worker.md +0 -24
  73. package/examples/extensions/subagent/agents.ts +0 -126
  74. package/examples/extensions/subagent/index.ts +0 -1009
  75. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  76. package/examples/extensions/subagent/prompts/implement.md +0 -10
  77. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
  78. /package/docs/{distribution → bundled}/extensions/deepwiki.md +0 -0
@@ -17,7 +17,7 @@ import { FooterDataProvider } from "../../core/footer-data-provider.js";
17
17
  import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
18
18
  import { KeybindingsManager } from "../../core/keybindings.js";
19
19
  import { createCompactionSummaryMessage } from "../../core/messages.js";
20
- import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js";
20
+ import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope, resolveModelScopeWithDiagnostics, } from "../../core/model-resolver.js";
21
21
  import { DefaultPackageManager } from "../../core/package-manager.js";
22
22
  import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
23
23
  import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
@@ -2636,7 +2636,7 @@ export class InteractiveMode {
2636
2636
  case "custom": {
2637
2637
  if (message.display) {
2638
2638
  const renderer = this.session.extensionRunner.getMessageRenderer(message.customType);
2639
- const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());
2639
+ const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings(), this.outputPad);
2640
2640
  component.setExpanded(this.toolOutputExpanded);
2641
2641
  this.chatContainer.addChild(component);
2642
2642
  }
@@ -3531,7 +3531,9 @@ export class InteractiveMode {
3531
3531
  this.outputPad = padding;
3532
3532
  if (this.streamingComponent || this.session.isStreaming) {
3533
3533
  for (const child of this.chatContainer.children) {
3534
- if (child instanceof AssistantMessageComponent || child instanceof UserMessageComponent) {
3534
+ if (child instanceof AssistantMessageComponent ||
3535
+ child instanceof CustomMessageComponent ||
3536
+ child instanceof UserMessageComponent) {
3535
3537
  child.setOutputPad(padding);
3536
3538
  }
3537
3539
  }
@@ -3716,12 +3718,17 @@ export class InteractiveMode {
3716
3718
  // Get all available models
3717
3719
  await this.session.modelRuntime.refresh();
3718
3720
  const allModels = [...(await this.session.modelRuntime.getAvailable())];
3719
- if (allModels.length === 0) {
3721
+ const allModelIds = new Set(allModels.map((model) => `${model.provider}/${model.id}`));
3722
+ const configuredPatterns = this.settingsManager.getEnabledModels();
3723
+ const sessionScopedModels = this.session.scopedModels;
3724
+ if (allModels.length === 0 && !configuredPatterns?.length && sessionScopedModels.length === 0) {
3720
3725
  this.showStatus("No models available");
3721
3726
  return;
3722
3727
  }
3728
+ const configuredScope = configuredPatterns?.length
3729
+ ? await resolveModelScopeWithDiagnostics(configuredPatterns, this.session.modelRuntime)
3730
+ : undefined;
3723
3731
  // Check if session has scoped models (from previous session-only changes or CLI --models)
3724
- const sessionScopedModels = this.session.scopedModels;
3725
3732
  const hasSessionScope = sessionScopedModels.length > 0;
3726
3733
  // Build enabled model IDs from session state or settings
3727
3734
  let currentEnabledIds = null;
@@ -3729,18 +3736,22 @@ export class InteractiveMode {
3729
3736
  // Use current session's scoped models
3730
3737
  currentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3731
3738
  }
3732
- else {
3733
- // Fall back to settings
3734
- const patterns = this.settingsManager.getEnabledModels();
3735
- if (patterns !== undefined && patterns.length > 0) {
3736
- const scopedModels = await resolveModelScope(patterns, this.session.modelRuntime);
3737
- currentEnabledIds = scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3738
- }
3739
+ else if (configuredScope) {
3740
+ currentEnabledIds = configuredScope.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3741
+ }
3742
+ for (const diagnostic of configuredScope?.diagnostics ?? []) {
3743
+ if (diagnostic.code !== "no-match")
3744
+ continue;
3745
+ currentEnabledIds ??= [];
3746
+ if (!currentEnabledIds.includes(diagnostic.pattern))
3747
+ currentEnabledIds.push(diagnostic.pattern);
3739
3748
  }
3740
3749
  // Helper to update session's scoped models (session-only, no persist)
3741
3750
  const updateSessionModels = async (enabledIds) => {
3742
3751
  currentEnabledIds = enabledIds === null ? null : [...enabledIds];
3743
- if (enabledIds && enabledIds.length > 0 && enabledIds.length < allModels.length) {
3752
+ const hasEnabledAvailableModel = enabledIds?.some((id) => allModelIds.has(id)) ?? false;
3753
+ const allAvailableModelsEnabled = enabledIds !== null && [...allModelIds].every((id) => enabledIds.includes(id));
3754
+ if (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {
3744
3755
  const newScopedModels = await resolveModelScope(enabledIds, this.session.modelRuntime);
3745
3756
  this.session.setScopedModels(newScopedModels.map((sm) => ({
3746
3757
  model: sm.model,
@@ -3764,9 +3775,10 @@ export class InteractiveMode {
3764
3775
  },
3765
3776
  onPersist: (enabledIds) => {
3766
3777
  // Persist to settings
3767
- const newPatterns = enabledIds === null || enabledIds.length === allModels.length
3768
- ? undefined // All enabled = clear filter
3769
- : enabledIds;
3778
+ const allEnabled = enabledIds !== null &&
3779
+ enabledIds.length === allModels.length &&
3780
+ enabledIds.every((id) => allModelIds.has(id));
3781
+ const newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;
3770
3782
  this.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);
3771
3783
  this.showStatus("Model selection saved to settings");
3772
3784
  },