@astralyn/pi 0.82.1 → 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.
- package/CHANGELOG.md +27 -0
- package/LICENSE +21 -0
- package/README.md +71 -624
- package/dist/core/agent-session.d.ts +4 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +193 -43
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +6 -13
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +2 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +13 -3
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +19 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +3 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +7 -2
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -0
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +3 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +10 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +22 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +53 -28
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/bundled/README.md +38 -0
- package/docs/bundled/extensions/README.md +18 -0
- package/docs/bundled/extensions/deepwiki.md +62 -0
- package/docs/bundled/extensions/question.md +48 -0
- package/docs/bundled/extensions/rewind.md +75 -0
- package/docs/bundled/extensions/router.md +126 -0
- package/docs/bundled/extensions/statusline.md +109 -0
- package/docs/bundled/extensions/subagent.md +95 -0
- package/docs/bundled/extensions/todo.md +28 -0
- package/docs/bundled/themes.md +51 -0
- package/docs/bundled/tool-presentation.md +85 -0
- package/docs/compaction.md +20 -14
- package/docs/containerization.md +1 -1
- package/docs/custom-provider.md +8 -8
- package/docs/docs.json +57 -9
- package/docs/extensions.md +14 -13
- package/docs/index.md +12 -7
- package/docs/json.md +4 -4
- package/docs/providers.md +1 -1
- package/docs/rpc.md +3 -9
- package/docs/session-format.md +5 -5
- package/docs/skills.md +1 -1
- package/docs/themes.md +4 -8
- package/docs/tui.md +1 -1
- package/examples/extensions/README.md +0 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +4 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +3 -3
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +0 -0
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/gondolin/index.ts +4 -6
- package/examples/extensions/message-renderer.ts +2 -2
- package/examples/extensions/overlay-qa-tests.ts +2 -2
- package/examples/extensions/project-trust.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/sdk/README.md +38 -44
- package/npm-shrinkwrap.json +3465 -624
- package/package.json +34 -18
- package/docs/development.md +0 -71
- package/examples/extensions/subagent/README.md +0 -175
- package/examples/extensions/subagent/agents/planner.md +0 -37
- package/examples/extensions/subagent/agents/reviewer.md +0 -35
- package/examples/extensions/subagent/agents/scout.md +0 -50
- package/examples/extensions/subagent/agents/worker.md +0 -24
- package/examples/extensions/subagent/agents.ts +0 -126
- package/examples/extensions/subagent/index.ts +0 -1009
- package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
- package/examples/extensions/subagent/prompts/implement.md +0 -10
- package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
|
@@ -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";
|
|
@@ -2315,6 +2315,17 @@ export class InteractiveMode {
|
|
|
2315
2315
|
}
|
|
2316
2316
|
this.ui.requestRender();
|
|
2317
2317
|
break;
|
|
2318
|
+
case "turn_start":
|
|
2319
|
+
// A mid-run compaction replaces the working indicator. Restore it before the
|
|
2320
|
+
// next provider request without waiting for another agent_start event.
|
|
2321
|
+
if (this.settingsManager.getShowTerminalProgress()) {
|
|
2322
|
+
this.ui.terminal.setProgress(true);
|
|
2323
|
+
}
|
|
2324
|
+
if (this.workingVisible && this.activeStatusIndicator?.kind !== "working") {
|
|
2325
|
+
this.showStatusIndicator(new WorkingStatusIndicator(this.ui, this.workingMessage ?? this.defaultWorkingMessage, this.workingIndicatorOptions));
|
|
2326
|
+
}
|
|
2327
|
+
this.ui.requestRender();
|
|
2328
|
+
break;
|
|
2318
2329
|
case "queue_update":
|
|
2319
2330
|
this.updatePendingMessagesDisplay();
|
|
2320
2331
|
this.ui.requestRender();
|
|
@@ -2491,19 +2502,21 @@ export class InteractiveMode {
|
|
|
2491
2502
|
this.showStatus("Auto-compaction cancelled");
|
|
2492
2503
|
}
|
|
2493
2504
|
}
|
|
2494
|
-
else
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
else if (event.errorMessage) {
|
|
2501
|
-
if (event.reason === "manual") {
|
|
2502
|
-
this.showError(event.errorMessage);
|
|
2505
|
+
else {
|
|
2506
|
+
if (event.result) {
|
|
2507
|
+
this.chatContainer.clear();
|
|
2508
|
+
this.rebuildChatFromMessages();
|
|
2509
|
+
this.addMessageToChat(createCompactionSummaryMessage(event.result.summary, event.result.tokensBefore, new Date().toISOString()));
|
|
2510
|
+
this.footer.invalidate();
|
|
2503
2511
|
}
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2512
|
+
if (event.errorMessage) {
|
|
2513
|
+
if (event.reason === "manual") {
|
|
2514
|
+
this.showError(event.errorMessage);
|
|
2515
|
+
}
|
|
2516
|
+
else {
|
|
2517
|
+
this.chatContainer.addChild(new Spacer(1));
|
|
2518
|
+
this.chatContainer.addChild(new Text(theme.fg("error", event.errorMessage), 1, 0));
|
|
2519
|
+
}
|
|
2507
2520
|
}
|
|
2508
2521
|
}
|
|
2509
2522
|
void this.flushCompactionQueue({ willRetry: event.willRetry });
|
|
@@ -2623,7 +2636,7 @@ export class InteractiveMode {
|
|
|
2623
2636
|
case "custom": {
|
|
2624
2637
|
if (message.display) {
|
|
2625
2638
|
const renderer = this.session.extensionRunner.getMessageRenderer(message.customType);
|
|
2626
|
-
const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());
|
|
2639
|
+
const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings(), this.outputPad);
|
|
2627
2640
|
component.setExpanded(this.toolOutputExpanded);
|
|
2628
2641
|
this.chatContainer.addChild(component);
|
|
2629
2642
|
}
|
|
@@ -3518,7 +3531,9 @@ export class InteractiveMode {
|
|
|
3518
3531
|
this.outputPad = padding;
|
|
3519
3532
|
if (this.streamingComponent || this.session.isStreaming) {
|
|
3520
3533
|
for (const child of this.chatContainer.children) {
|
|
3521
|
-
if (child instanceof AssistantMessageComponent ||
|
|
3534
|
+
if (child instanceof AssistantMessageComponent ||
|
|
3535
|
+
child instanceof CustomMessageComponent ||
|
|
3536
|
+
child instanceof UserMessageComponent) {
|
|
3522
3537
|
child.setOutputPad(padding);
|
|
3523
3538
|
}
|
|
3524
3539
|
}
|
|
@@ -3703,12 +3718,17 @@ export class InteractiveMode {
|
|
|
3703
3718
|
// Get all available models
|
|
3704
3719
|
await this.session.modelRuntime.refresh();
|
|
3705
3720
|
const allModels = [...(await this.session.modelRuntime.getAvailable())];
|
|
3706
|
-
|
|
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) {
|
|
3707
3725
|
this.showStatus("No models available");
|
|
3708
3726
|
return;
|
|
3709
3727
|
}
|
|
3728
|
+
const configuredScope = configuredPatterns?.length
|
|
3729
|
+
? await resolveModelScopeWithDiagnostics(configuredPatterns, this.session.modelRuntime)
|
|
3730
|
+
: undefined;
|
|
3710
3731
|
// Check if session has scoped models (from previous session-only changes or CLI --models)
|
|
3711
|
-
const sessionScopedModels = this.session.scopedModels;
|
|
3712
3732
|
const hasSessionScope = sessionScopedModels.length > 0;
|
|
3713
3733
|
// Build enabled model IDs from session state or settings
|
|
3714
3734
|
let currentEnabledIds = null;
|
|
@@ -3716,18 +3736,22 @@ export class InteractiveMode {
|
|
|
3716
3736
|
// Use current session's scoped models
|
|
3717
3737
|
currentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
|
|
3718
3738
|
}
|
|
3719
|
-
else {
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
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);
|
|
3726
3748
|
}
|
|
3727
3749
|
// Helper to update session's scoped models (session-only, no persist)
|
|
3728
3750
|
const updateSessionModels = async (enabledIds) => {
|
|
3729
3751
|
currentEnabledIds = enabledIds === null ? null : [...enabledIds];
|
|
3730
|
-
|
|
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) {
|
|
3731
3755
|
const newScopedModels = await resolveModelScope(enabledIds, this.session.modelRuntime);
|
|
3732
3756
|
this.session.setScopedModels(newScopedModels.map((sm) => ({
|
|
3733
3757
|
model: sm.model,
|
|
@@ -3751,9 +3775,10 @@ export class InteractiveMode {
|
|
|
3751
3775
|
},
|
|
3752
3776
|
onPersist: (enabledIds) => {
|
|
3753
3777
|
// Persist to settings
|
|
3754
|
-
const
|
|
3755
|
-
|
|
3756
|
-
|
|
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;
|
|
3757
3782
|
this.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);
|
|
3758
3783
|
this.showStatus("Model selection saved to settings");
|
|
3759
3784
|
},
|