@bastani/atomic 0.9.17 → 0.9.18-alpha.1
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 +15 -0
- package/dist/builtin/intercom/index.bundle.mjs +349 -57517
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/index.bundle.mjs +28948 -58339
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/xdg-open +1267 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +7929 -78021
- package/dist/builtin/web-access/index.bundle.mjs +70791 -57707
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/builtin/adversarial-verification.js +0 -1
- package/dist/builtin/workflows/builtin/{chunk-3y1hmzw6.js → chunk-6v0yv8tj.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-w9c7rkrk.js → chunk-brerg33r.js} +5 -7
- package/dist/builtin/workflows/builtin/{chunk-bz1c9732.js → chunk-ngffz3y8.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-6rbajjf5.js → chunk-szz1ajz9.js} +1 -3
- package/dist/builtin/workflows/builtin/classify-and-act.js +0 -1
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +0 -1
- package/dist/builtin/workflows/builtin/generate-and-filter.js +0 -1
- package/dist/builtin/workflows/builtin/goal.js +2 -5
- package/dist/builtin/workflows/builtin/index.js +4 -7
- package/dist/builtin/workflows/builtin/loop-until-done.js +0 -1
- package/dist/builtin/workflows/builtin/open-claude-design.js +1 -4
- package/dist/builtin/workflows/builtin/ralph.js +2 -5
- package/dist/builtin/workflows/builtin/steering-context.js +0 -1
- package/dist/builtin/workflows/builtin/tournament.js +0 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +39989 -81500
- package/dist/builtin/workflows/src/index.js +1253 -58524
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/split-loader.js +2 -0
- package/dist/bun/split-loader.js.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli.js +5 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +19 -2
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +253 -74
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +8 -3
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +2 -7
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +1 -35
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage-backends.js.map +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/builtin-packages.d.ts +8 -0
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +11 -5
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/event-bus.d.ts +11 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +96 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/extensions/builtin-extension-entry-labels.d.ts +6 -0
- package/dist/core/extensions/builtin-extension-entry-labels.d.ts.map +1 -0
- package/dist/core/extensions/builtin-extension-entry-labels.js +22 -0
- package/dist/core/extensions/builtin-extension-entry-labels.js.map +1 -0
- package/dist/core/extensions/host-module-bridge.d.ts +22 -0
- package/dist/core/extensions/host-module-bridge.d.ts.map +1 -0
- package/dist/core/extensions/host-module-bridge.js +39 -0
- package/dist/core/extensions/host-module-bridge.js.map +1 -0
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +2 -2
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-discovery.js.map +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts +10 -0
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -0
- package/dist/core/extensions/loader-host-modules.js +88 -0
- package/dist/core/extensions/loader-host-modules.js.map +1 -0
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +1 -0
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +5 -2
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +51 -71
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/native-builtin-entries.d.ts +6 -0
- package/dist/core/extensions/native-builtin-entries.d.ts.map +1 -0
- package/dist/core/extensions/native-builtin-entries.js +23 -0
- package/dist/core/extensions/native-builtin-entries.js.map +1 -0
- package/dist/core/extensions/runtime-types.d.ts +2 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lifecycle-timings.d.ts +21 -0
- package/dist/core/lifecycle-timings.d.ts.map +1 -0
- package/dist/core/lifecycle-timings.js +57 -0
- package/dist/core/lifecycle-timings.js.map +1 -0
- package/dist/core/mandatory-resource-loader.d.ts.map +1 -1
- package/dist/core/mandatory-resource-loader.js +43 -0
- package/dist/core/mandatory-resource-loader.js.map +1 -1
- package/dist/core/model-runtime.d.ts +8 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +82 -0
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/package-manager-auto-resources.js.map +1 -1
- package/dist/core/package-manager-env.js.map +1 -1
- package/dist/core/package-manager-git.js.map +1 -1
- package/dist/core/package-manager-manifest.js.map +1 -1
- package/dist/core/package-manager-npm.js.map +1 -1
- package/dist/core/package-manager-paths.js.map +1 -1
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/prompt-templates-async.js.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-context-files.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +5 -1
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +90 -1
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-discovery.js.map +1 -1
- package/dist/core/resource-loader-paths.js.map +1 -1
- package/dist/core/resource-loader-source-info.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +16 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +4 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-paths.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts +6 -0
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +24 -0
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/skills-async.js.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +0 -6
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/session-temp-cleanup.js.map +1 -1
- package/dist/core/tools/session-temp-dir.js.map +1 -1
- package/dist/core/tools/todos-paths.js.map +1 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main-deferred-startup.d.ts +16 -0
- package/dist/main-deferred-startup.d.ts.map +1 -1
- package/dist/main-deferred-startup.js +14 -0
- package/dist/main-deferred-startup.js.map +1 -1
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +41 -22
- package/dist/main.js.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/chat-input-actions.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -1
- package/dist/modes/interactive/components/startup-identity.js +4 -0
- package/dist/modes/interactive/components/startup-identity.js.map +1 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.js +13 -5
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +2 -5
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +8 -8
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-onboarding.js +1 -1
- package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
- package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-prompt-restore.js +2 -1
- package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -1
- package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +2 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +21 -53
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-paths.js +29 -5
- package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +66 -69
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-startup-chat-container.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup-chat-container.js +2 -0
- package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts +2 -0
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +30 -10
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +12 -2
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/theme/global-theme.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/engine-child-liveness.d.ts +2 -0
- package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-child-liveness.js +16 -2
- package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-monitor.d.ts +5 -0
- package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-monitor.js +24 -0
- package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +21 -2
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +160 -7
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +9 -4
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +8 -4
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/resource-readiness-error.d.ts +6 -0
- package/dist/modes/interactive-engine/resource-readiness-error.d.ts.map +1 -0
- package/dist/modes/interactive-engine/resource-readiness-error.js +11 -0
- package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +3 -0
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +1 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +5 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts +4 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +59 -18
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +4 -13
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +31 -2
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-resource-readiness.d.ts +11 -0
- package/dist/modes/rpc/rpc-resource-readiness.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-resource-readiness.js +51 -0
- package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -0
- package/dist/modes/rpc/rpc-session-binding.d.ts +2 -0
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +21 -0
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +7 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli-parser.js.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/rpc-entry.js.map +1 -1
- package/dist/self-update-plan.js.map +1 -1
- package/dist/utils/changelog.d.ts +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/module-require.js.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/development.md +28 -1
- package/docs/extensions.md +5 -3
- package/docs/quickstart.md +1 -3
- package/docs/sdk.md +2 -0
- package/docs/usage.md +3 -1
- package/docs/windows.md +8 -0
- package/npm-shrinkwrap.json +32 -32
- package/package.json +4 -4
- package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +0 -264
- package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +0 -4
- package/dist/builtin/workflows/builtin/chunk-dattsgxg.js +0 -529
- package/dist/builtin/workflows/builtin/chunk-gdx0avpx.js +0 -70082
- package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +0 -215
- package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +0 -4110
- package/dist/core/atomic-guide-command.d.ts +0 -41
- package/dist/core/atomic-guide-command.d.ts.map +0 -1
- package/dist/core/atomic-guide-command.js +0 -311
- package/dist/core/atomic-guide-command.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getInteractiveEngineResourceOverlaps } from "../interactive-engine/extension-ui-bridge.js";
|
|
1
|
+
import { getInteractiveEngineResourceExtensions, getInteractiveEngineResourceOverlaps, } from "../interactive-engine/extension-ui-bridge.js";
|
|
2
2
|
import { InteractiveModeBase } from "./interactive-mode-base.js";
|
|
3
3
|
import { Spacer, Text, theme, } from "./interactive-mode-deps.js";
|
|
4
4
|
function formatList(values) {
|
|
@@ -48,6 +48,27 @@ function getExtensionIdentityPath(resourcePath) {
|
|
|
48
48
|
segments.pop();
|
|
49
49
|
return segments.join("/") || normalized;
|
|
50
50
|
}
|
|
51
|
+
function mergeExtensions(hostExtensions, engineExtensions) {
|
|
52
|
+
const merged = [];
|
|
53
|
+
const indexByIdentity = new Map();
|
|
54
|
+
const hiddenIdentities = new Set();
|
|
55
|
+
for (const extension of [...hostExtensions, ...engineExtensions]) {
|
|
56
|
+
const identity = getExtensionIdentityPath(extension.path);
|
|
57
|
+
if (extension.hidden === true)
|
|
58
|
+
hiddenIdentities.add(identity);
|
|
59
|
+
const existingIndex = indexByIdentity.get(identity);
|
|
60
|
+
if (existingIndex === undefined) {
|
|
61
|
+
indexByIdentity.set(identity, merged.length);
|
|
62
|
+
merged.push({ path: extension.path, sourceInfo: extension.sourceInfo });
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const existing = merged[existingIndex];
|
|
66
|
+
if (existing && !existing.sourceInfo && extension.sourceInfo) {
|
|
67
|
+
merged[existingIndex] = { ...existing, sourceInfo: extension.sourceInfo };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return merged.filter((extension) => !hiddenIdentities.has(getExtensionIdentityPath(extension.path)));
|
|
71
|
+
}
|
|
51
72
|
function getOverlapLabels(mode, overlaps) {
|
|
52
73
|
const labels = new Set();
|
|
53
74
|
const localPackageSources = new Set();
|
|
@@ -72,18 +93,19 @@ function getOverlapLabels(mode, overlaps) {
|
|
|
72
93
|
labels.add(label);
|
|
73
94
|
return [...labels];
|
|
74
95
|
}
|
|
75
|
-
const
|
|
76
|
-
function
|
|
96
|
+
const displayedOverlapNotices = new WeakMap();
|
|
97
|
+
function getOverlapNoticeFingerprint(mode, overlaps) {
|
|
77
98
|
if (overlaps.length === 0)
|
|
78
|
-
return
|
|
99
|
+
return undefined;
|
|
79
100
|
const fingerprint = overlaps
|
|
80
101
|
.map((overlap) => `${overlap.resourceType}:${overlap.name}:${overlap.inherited.path}:${overlap.bundled.path}`)
|
|
81
102
|
.sort()
|
|
82
103
|
.join("\n");
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
const displayed = displayedOverlapNotices.get(mode);
|
|
105
|
+
if (displayed?.fingerprint === fingerprint && displayed.container.children.includes(displayed.component)) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
return fingerprint;
|
|
87
109
|
}
|
|
88
110
|
InteractiveModeBase.prototype.showLoadedResources = function (options) {
|
|
89
111
|
const targetContainer = options?.targetContainer ?? this.chatContainer;
|
|
@@ -92,17 +114,18 @@ InteractiveModeBase.prototype.showLoadedResources = function (options) {
|
|
|
92
114
|
if (!showListing && !showDiagnostics) {
|
|
93
115
|
return;
|
|
94
116
|
}
|
|
117
|
+
if (targetContainer === this.resourceDisclosureContainer)
|
|
118
|
+
targetContainer.clear();
|
|
95
119
|
const skillsResult = this.session.resourceLoader.getSkills();
|
|
96
120
|
const promptsResult = this.session.resourceLoader.getPrompts();
|
|
97
121
|
const themesResult = this.session.resourceLoader.getThemes();
|
|
98
|
-
const
|
|
99
|
-
this.session.resourceLoader
|
|
100
|
-
.getExtensions()
|
|
101
|
-
.extensions.filter((extension) => extension.hidden !== true)
|
|
102
|
-
.map((extension) => ({
|
|
122
|
+
const hostExtensions = options?.extensions ??
|
|
123
|
+
this.session.resourceLoader.getExtensions().extensions.map((extension) => ({
|
|
103
124
|
path: extension.path,
|
|
104
125
|
sourceInfo: extension.sourceInfo,
|
|
126
|
+
hidden: extension.hidden,
|
|
105
127
|
}));
|
|
128
|
+
const extensions = mergeExtensions(hostExtensions, getInteractiveEngineResourceExtensions(this.runtimeHost));
|
|
106
129
|
const sourceInfos = new Map();
|
|
107
130
|
for (const extension of extensions) {
|
|
108
131
|
if (extension.sourceInfo) {
|
|
@@ -133,13 +156,12 @@ InteractiveModeBase.prototype.showLoadedResources = function (options) {
|
|
|
133
156
|
...this.session.resourceLoader.getAppendSystemPromptSources(),
|
|
134
157
|
...this.session.resourceLoader.getAgentsFiles().agentsFiles,
|
|
135
158
|
];
|
|
136
|
-
const templates = this.session.promptTemplates;
|
|
137
159
|
const customThemes = themesResult.themes.filter((t) => t.sourcePath);
|
|
138
|
-
const expandedSections =
|
|
160
|
+
const expandedSections = {};
|
|
139
161
|
if (contextFiles.length > 0) {
|
|
140
|
-
expandedSections.
|
|
162
|
+
expandedSections.context = contextFiles
|
|
141
163
|
.map((contextFile) => theme.fg("dim", ` ${this.formatDisplayPath(contextFile.path)}`))
|
|
142
|
-
.join("\n")
|
|
164
|
+
.join("\n");
|
|
143
165
|
}
|
|
144
166
|
const skills = skillsResult.skills;
|
|
145
167
|
if (skills.length > 0) {
|
|
@@ -147,81 +169,49 @@ InteractiveModeBase.prototype.showLoadedResources = function (options) {
|
|
|
147
169
|
path: skill.filePath,
|
|
148
170
|
sourceInfo: skill.sourceInfo,
|
|
149
171
|
})));
|
|
150
|
-
expandedSections.
|
|
172
|
+
expandedSections.skills = this.formatScopeGroups(groups, {
|
|
151
173
|
formatPath: (item) => this.formatDisplayPath(item.path),
|
|
152
174
|
formatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),
|
|
153
|
-
})
|
|
154
|
-
}
|
|
155
|
-
if (templates.length > 0) {
|
|
156
|
-
const groups = this.buildScopeGroups(templates.map((template) => ({
|
|
157
|
-
path: template.filePath,
|
|
158
|
-
sourceInfo: template.sourceInfo,
|
|
159
|
-
})));
|
|
160
|
-
const templateByPath = new Map(templates.map((t) => [t.filePath, t]));
|
|
161
|
-
expandedSections.push(`${theme.bold(theme.fg("muted", "PROMPTS"))}\n${this.formatScopeGroups(groups, {
|
|
162
|
-
formatPath: (item) => {
|
|
163
|
-
const template = templateByPath.get(item.path);
|
|
164
|
-
return template ? `/${template.name}` : this.formatDisplayPath(item.path);
|
|
165
|
-
},
|
|
166
|
-
formatPackagePath: (item) => {
|
|
167
|
-
const template = templateByPath.get(item.path);
|
|
168
|
-
return template ? `/${template.name}` : this.formatDisplayPath(item.path);
|
|
169
|
-
},
|
|
170
|
-
})}`);
|
|
175
|
+
});
|
|
171
176
|
}
|
|
172
177
|
const prompts = promptsResult.prompts;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
178
|
+
const promptEntries = prompts.map((prompt) => ({
|
|
179
|
+
path: prompt.filePath,
|
|
180
|
+
sourceInfo: prompt.sourceInfo,
|
|
181
|
+
label: `/${prompt.name}`,
|
|
182
|
+
}));
|
|
183
|
+
if (promptEntries.length > 0) {
|
|
184
|
+
const groups = this.buildScopeGroups(promptEntries);
|
|
185
|
+
const promptByPath = new Map(promptEntries.map((prompt) => [prompt.path, prompt.label]));
|
|
186
|
+
expandedSections.prompts = this.formatScopeGroups(groups, {
|
|
187
|
+
formatPath: (item) => promptByPath.get(item.path) ?? this.formatDisplayPath(item.path),
|
|
188
|
+
formatPackagePath: (item) => promptByPath.get(item.path) ?? this.formatDisplayPath(item.path),
|
|
189
|
+
});
|
|
183
190
|
}
|
|
184
191
|
if (extensions.length > 0) {
|
|
185
192
|
const groups = this.buildScopeGroups(extensions);
|
|
186
|
-
expandedSections.
|
|
193
|
+
expandedSections.extensions = this.formatScopeGroups(groups, {
|
|
187
194
|
formatPath: (item) => this.formatExtensionDisplayPath(item.path),
|
|
188
195
|
formatPackagePath: (item) => this.formatExtensionDisplayPath(this.getShortPath(item.path, item.sourceInfo)),
|
|
189
|
-
})
|
|
196
|
+
});
|
|
190
197
|
}
|
|
191
198
|
if (customThemes.length > 0) {
|
|
192
199
|
const groups = this.buildScopeGroups(customThemes.map((loadedTheme) => ({
|
|
193
200
|
path: loadedTheme.sourcePath,
|
|
194
201
|
sourceInfo: loadedTheme.sourceInfo,
|
|
195
202
|
})));
|
|
196
|
-
expandedSections.
|
|
203
|
+
expandedSections.themes = this.formatScopeGroups(groups, {
|
|
197
204
|
formatPath: (item) => this.formatDisplayPath(item.path),
|
|
198
205
|
formatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),
|
|
199
|
-
})}`);
|
|
200
|
-
}
|
|
201
|
-
const extensionDiagnostics = [];
|
|
202
|
-
const extensionErrors = this.session.resourceLoader.getExtensions().errors;
|
|
203
|
-
for (const error of extensionErrors) {
|
|
204
|
-
extensionDiagnostics.push({
|
|
205
|
-
type: "error",
|
|
206
|
-
message: error.error,
|
|
207
|
-
path: error.path,
|
|
208
206
|
});
|
|
209
207
|
}
|
|
210
|
-
extensionDiagnostics.push(...this.session.extensionRunner.getCommandDiagnostics(), ...this.getBuiltInCommandConflictDiagnostics(this.session.extensionRunner), ...this.session.extensionRunner.getShortcutDiagnostics());
|
|
211
208
|
this.addResourceDisclosure({
|
|
212
209
|
contextFiles,
|
|
213
210
|
skills,
|
|
214
211
|
prompts,
|
|
215
|
-
templates,
|
|
216
212
|
extensions,
|
|
217
213
|
themes: customThemes,
|
|
218
|
-
|
|
219
|
-
skillsResult.diagnostics,
|
|
220
|
-
promptsResult.diagnostics,
|
|
221
|
-
extensionDiagnostics,
|
|
222
|
-
themesResult.diagnostics,
|
|
223
|
-
]),
|
|
224
|
-
expandedBody: this.options.verbose ? expandedSections.join("\n\n") : "",
|
|
214
|
+
expandedSections,
|
|
225
215
|
targetContainer,
|
|
226
216
|
});
|
|
227
217
|
}
|
|
@@ -231,10 +221,17 @@ InteractiveModeBase.prototype.showLoadedResources = function (options) {
|
|
|
231
221
|
...getInteractiveEngineResourceOverlaps(this.runtimeHost),
|
|
232
222
|
];
|
|
233
223
|
const overlapLabels = getOverlapLabels(this, overlaps);
|
|
234
|
-
|
|
224
|
+
const overlapFingerprint = getOverlapNoticeFingerprint(this, overlaps);
|
|
225
|
+
if (overlapFingerprint && overlapLabels.length > 0) {
|
|
235
226
|
const sources = formatList(overlapLabels.map((label) => `\`${label}\``));
|
|
236
227
|
const verb = overlapLabels.length === 1 ? "provides" : "provide";
|
|
237
|
-
|
|
228
|
+
const notice = new Text(theme.fg("warning", `Extension overlap detected: ${sources} ${verb} resources already bundled with Atomic. Atomic kept its bundled versions; non-conflicting extension features remain available.`), 0, 0);
|
|
229
|
+
targetContainer.addChild(notice);
|
|
230
|
+
displayedOverlapNotices.set(this, {
|
|
231
|
+
component: notice,
|
|
232
|
+
container: targetContainer,
|
|
233
|
+
fingerprint: overlapFingerprint,
|
|
234
|
+
});
|
|
238
235
|
targetContainer.addChild(new Spacer(1));
|
|
239
236
|
}
|
|
240
237
|
const skillDiagnostics = skillsResult.diagnostics;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-resource-rendering.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-resource-rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport { getInteractiveEngineResourceOverlaps } from \"../interactive-engine/extension-ui-bridge.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Container,\n\ttype ResourceDiagnostic,\n\ttype SourceInfo,\n\tSpacer,\n\tText,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\n\nfunction formatList(values: string[]): string {\n\tif (values.length <= 1) return values[0] ?? \"\";\n\tif (values.length === 2) return `${values[0]} and ${values[1]}`;\n\treturn `${values.slice(0, -1).join(\", \")}, and ${values.at(-1)}`;\n}\n\nfunction getShortestUniqueSourceLabels(sources: string[], reservedLabels: ReadonlySet<string>): Map<string, string> {\n\tconst partsBySource = new Map(\n\t\tsources.map((source) => [source, source.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean)]),\n\t);\n\tconst depthBySource = new Map(sources.map((source) => [source, 1]));\n\twhile (true) {\n\t\tconst groups = new Map<string, string[]>();\n\t\tfor (const source of sources) {\n\t\t\tconst parts = partsBySource.get(source) ?? [source];\n\t\t\tconst depth = depthBySource.get(source) ?? 1;\n\t\t\tconst label = parts.slice(-depth).join(\"/\") || source;\n\t\t\tgroups.set(label, [...(groups.get(label) ?? []), source]);\n\t\t}\n\t\tconst duplicates = [...groups].filter(([label, group]) => group.length > 1 || reservedLabels.has(label));\n\t\tif (duplicates.length === 0) {\n\t\t\treturn new Map(\n\t\t\t\tsources.map((source) => {\n\t\t\t\t\tconst parts = partsBySource.get(source) ?? [source];\n\t\t\t\t\treturn [source, parts.slice(-(depthBySource.get(source) ?? 1)).join(\"/\") || source];\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlet expanded = false;\n\t\tfor (const [, group] of duplicates) {\n\t\t\tfor (const source of group) {\n\t\t\t\tconst maxDepth = partsBySource.get(source)?.length ?? 1;\n\t\t\t\tconst depth = depthBySource.get(source) ?? 1;\n\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\tdepthBySource.set(source, depth + 1);\n\t\t\t\t\texpanded = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!expanded) return new Map(sources.map((source) => [source, source]));\n\t}\n}\n\nfunction getExtensionIdentityPath(resourcePath: string): string {\n\tconst normalized = resourcePath.replace(/\\\\/g, \"/\");\n\tconst segments = normalized.split(\"/\").filter(Boolean);\n\tif (/^index\\.[cm]?[jt]sx?$/.test(segments.at(-1) ?? \"\")) segments.pop();\n\treturn segments.join(\"/\") || normalized;\n}\n\nfunction getOverlapLabels(mode: InteractiveModeBase, overlaps: readonly ResourceOverlap[]): string[] {\n\tconst labels = new Set<string>();\n\tconst localPackageSources = new Set<string>();\n\tconst extensionSources = new Set<string>();\n\tfor (const overlap of overlaps) {\n\t\tconst sourceInfo = overlap.inherited;\n\t\tif (sourceInfo.origin !== \"package\") {\n\t\t\textensionSources.add(getExtensionIdentityPath(sourceInfo.path));\n\t\t\tcontinue;\n\t\t}\n\t\tif (!mode.isPackageSource(sourceInfo)) {\n\t\t\tlocalPackageSources.add(sourceInfo.source);\n\t\t\tcontinue;\n\t\t}\n\t\tconst label = mode.getCompactPackageSourceLabel(sourceInfo);\n\t\tif (label) labels.add(label);\n\t}\n\tfor (const label of getShortestUniqueSourceLabels([...localPackageSources], labels).values()) labels.add(label);\n\tfor (const label of getShortestUniqueSourceLabels([...extensionSources], labels).values()) labels.add(label);\n\treturn [...labels];\n}\nconst displayedOverlapFingerprints = new WeakMap<InteractiveModeBase, string>();\n\nfunction shouldDisplayOverlapNotice(mode: InteractiveModeBase, overlaps: readonly ResourceOverlap[]): boolean {\n\tif (overlaps.length === 0) return false;\n\tconst fingerprint = overlaps\n\t\t.map((overlap) => `${overlap.resourceType}:${overlap.name}:${overlap.inherited.path}:${overlap.bundled.path}`)\n\t\t.sort()\n\t\t.join(\"\\n\");\n\tif (displayedOverlapFingerprints.get(mode) === fingerprint) return false;\n\tdisplayedOverlapFingerprints.set(mode, fingerprint);\n\treturn true;\n}\n\nInteractiveModeBase.prototype.showLoadedResources = function (\n\tthis: InteractiveModeBase,\n\toptions?: {\n\t\textensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t\ttargetContainer?: Container;\n\t},\n): void {\n\tconst targetContainer = options?.targetContainer ?? this.chatContainer;\n\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\tif (!showListing && !showDiagnostics) {\n\t\treturn;\n\t}\n\n\tconst skillsResult = this.session.resourceLoader.getSkills();\n\tconst promptsResult = this.session.resourceLoader.getPrompts();\n\tconst themesResult = this.session.resourceLoader.getThemes();\n\tconst extensions =\n\t\toptions?.extensions ??\n\t\tthis.session.resourceLoader\n\t\t\t.getExtensions()\n\t\t\t.extensions.filter((extension) => extension.hidden !== true)\n\t\t\t.map((extension) => ({\n\t\t\t\tpath: extension.path,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t}));\n\tconst sourceInfos = new Map<string, SourceInfo>();\n\tfor (const extension of extensions) {\n\t\tif (extension.sourceInfo) {\n\t\t\tsourceInfos.set(extension.path, extension.sourceInfo);\n\t\t}\n\t}\n\tfor (const skill of skillsResult.skills) {\n\t\tif (skill.sourceInfo) {\n\t\t\tsourceInfos.set(skill.filePath, skill.sourceInfo);\n\t\t}\n\t}\n\tfor (const prompt of promptsResult.prompts) {\n\t\tif (prompt.sourceInfo) {\n\t\t\tsourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t\t}\n\t}\n\tfor (const loadedTheme of themesResult.themes) {\n\t\tif (loadedTheme.sourcePath && loadedTheme.sourceInfo) {\n\t\t\tsourceInfos.set(loadedTheme.sourcePath, loadedTheme.sourceInfo);\n\t\t}\n\t}\n\n\tif (showListing) {\n\t\t// SYSTEM.md / APPEND_SYSTEM.md shape the prompt exactly like AGENTS.md does,\n\t\t// so the startup CONTEXT listing names them too.\n\t\tconst systemPromptSource = this.session.resourceLoader.getSystemPromptSource();\n\t\tconst contextFiles = [\n\t\t\t...(systemPromptSource ? [systemPromptSource] : []),\n\t\t\t...this.session.resourceLoader.getAppendSystemPromptSources(),\n\t\t\t...this.session.resourceLoader.getAgentsFiles().agentsFiles,\n\t\t];\n\t\tconst templates = this.session.promptTemplates;\n\t\tconst customThemes = themesResult.themes.filter((t) => t.sourcePath);\n\n\t\tconst expandedSections: string[] = [];\n\t\tif (contextFiles.length > 0) {\n\t\t\texpandedSections.push(\n\t\t\t\t`${theme.bold(theme.fg(\"muted\", \"CONTEXT\"))}\\n${contextFiles\n\t\t\t\t\t.map((contextFile) => theme.fg(\"dim\", ` ${this.formatDisplayPath(contextFile.path)}`))\n\t\t\t\t\t.join(\"\\n\")}`,\n\t\t\t);\n\t\t}\n\n\t\tconst skills = skillsResult.skills;\n\t\tif (skills.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\tskills.map((skill) => ({\n\t\t\t\t\tpath: skill.filePath,\n\t\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t\t})),\n\t\t\t);\n\t\t\texpandedSections.push(\n\t\t\t\t`${theme.bold(theme.fg(\"muted\", \"SKILLS\"))}\\n${this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t})}`,\n\t\t\t);\n\t\t}\n\n\t\tif (templates.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\ttemplates.map((template) => ({\n\t\t\t\t\tpath: template.filePath,\n\t\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t\t})),\n\t\t\t);\n\t\t\tconst templateByPath = new Map(templates.map((t) => [t.filePath, t]));\n\t\t\texpandedSections.push(\n\t\t\t\t`${theme.bold(theme.fg(\"muted\", \"PROMPTS\"))}\\n${this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t\tformatPackagePath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t})}`,\n\t\t\t);\n\t\t}\n\n\t\tconst prompts = promptsResult.prompts;\n\t\tif (prompts.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\tprompts.map((prompt) => ({\n\t\t\t\t\tpath: prompt.filePath,\n\t\t\t\t\tsourceInfo: prompt.sourceInfo,\n\t\t\t\t})),\n\t\t\t);\n\t\t\tconst promptByPath = new Map(prompts.map((prompt) => [prompt.filePath, prompt]));\n\t\t\texpandedSections.push(\n\t\t\t\t`${theme.bold(theme.fg(\"muted\", \"PROMPTS\"))}\\n${this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => promptByPath.get(item.path)?.name ?? this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => promptByPath.get(item.path)?.name ?? this.formatDisplayPath(item.path),\n\t\t\t\t})}`,\n\t\t\t);\n\t\t}\n\n\t\tif (extensions.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(extensions);\n\t\t\texpandedSections.push(\n\t\t\t\t`${theme.bold(theme.fg(\"muted\", \"EXTENSIONS\"))}\\n${this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatExtensionDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) =>\n\t\t\t\t\t\tthis.formatExtensionDisplayPath(this.getShortPath(item.path, item.sourceInfo)),\n\t\t\t\t})}`,\n\t\t\t);\n\t\t}\n\n\t\tif (customThemes.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\tcustomThemes.map((loadedTheme) => ({\n\t\t\t\t\tpath: loadedTheme.sourcePath!,\n\t\t\t\t\tsourceInfo: loadedTheme.sourceInfo,\n\t\t\t\t})),\n\t\t\t);\n\t\t\texpandedSections.push(\n\t\t\t\t`${theme.bold(theme.fg(\"muted\", \"THEMES\"))}\\n${this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t})}`,\n\t\t\t);\n\t\t}\n\n\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\tfor (const error of extensionErrors) {\n\t\t\textensionDiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: error.error,\n\t\t\t\tpath: error.path,\n\t\t\t});\n\t\t}\n\t\textensionDiagnostics.push(\n\t\t\t...this.session.extensionRunner.getCommandDiagnostics(),\n\t\t\t...this.getBuiltInCommandConflictDiagnostics(this.session.extensionRunner),\n\t\t\t...this.session.extensionRunner.getShortcutDiagnostics(),\n\t\t);\n\n\t\tthis.addResourceDisclosure({\n\t\t\tcontextFiles,\n\t\t\tskills,\n\t\t\tprompts,\n\t\t\ttemplates,\n\t\t\textensions,\n\t\t\tthemes: customThemes,\n\t\t\tdiagnosticsTotal: this.getResourceDiagnosticsTotal([\n\t\t\t\tskillsResult.diagnostics,\n\t\t\t\tpromptsResult.diagnostics,\n\t\t\t\textensionDiagnostics,\n\t\t\t\tthemesResult.diagnostics,\n\t\t\t]),\n\t\t\texpandedBody: this.options.verbose ? expandedSections.join(\"\\n\\n\") : \"\",\n\t\t\ttargetContainer,\n\t\t});\n\t}\n\n\tif (showDiagnostics) {\n\t\tconst overlaps = [\n\t\t\t...(this.session.resourceLoader.getExtensions().overlaps ?? []),\n\t\t\t...getInteractiveEngineResourceOverlaps(this.runtimeHost),\n\t\t];\n\t\tconst overlapLabels = getOverlapLabels(this, overlaps);\n\t\tif (shouldDisplayOverlapNotice(this, overlaps) && overlapLabels.length > 0) {\n\t\t\tconst sources = formatList(overlapLabels.map((label) => `\\`${label}\\``));\n\t\t\tconst verb = overlapLabels.length === 1 ? \"provides\" : \"provide\";\n\t\t\ttargetContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t`Extension overlap detected: ${sources} ${verb} resources already bundled with Atomic. Atomic kept its bundled versions; non-conflicting extension features remain available.`,\n\t\t\t\t\t),\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\tif (skillDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\tif (promptDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\tif (extensionErrors.length > 0) {\n\t\t\tfor (const error of extensionErrors) {\n\t\t\t\textensionDiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: error.error,\n\t\t\t\t\tpath: error.path,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst commandDiagnostics = this.session.extensionRunner.getCommandDiagnostics();\n\t\textensionDiagnostics.push(...commandDiagnostics);\n\t\textensionDiagnostics.push(...this.getBuiltInCommandConflictDiagnostics(this.session.extensionRunner));\n\n\t\tconst shortcutDiagnostics = this.session.extensionRunner.getShortcutDiagnostics();\n\t\textensionDiagnostics.push(...shortcutDiagnostics);\n\n\t\tif (extensionDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\tif (themeDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\t}\n};\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-resource-rendering.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-resource-rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport {\n\tgetInteractiveEngineResourceExtensions,\n\tgetInteractiveEngineResourceOverlaps,\n} from \"../interactive-engine/extension-ui-bridge.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Container,\n\ttype ResourceDiagnostic,\n\ttype SourceInfo,\n\tSpacer,\n\tText,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\n\nfunction formatList(values: string[]): string {\n\tif (values.length <= 1) return values[0] ?? \"\";\n\tif (values.length === 2) return `${values[0]} and ${values[1]}`;\n\treturn `${values.slice(0, -1).join(\", \")}, and ${values.at(-1)}`;\n}\n\nfunction getShortestUniqueSourceLabels(sources: string[], reservedLabels: ReadonlySet<string>): Map<string, string> {\n\tconst partsBySource = new Map(\n\t\tsources.map((source) => [source, source.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean)]),\n\t);\n\tconst depthBySource = new Map(sources.map((source) => [source, 1]));\n\twhile (true) {\n\t\tconst groups = new Map<string, string[]>();\n\t\tfor (const source of sources) {\n\t\t\tconst parts = partsBySource.get(source) ?? [source];\n\t\t\tconst depth = depthBySource.get(source) ?? 1;\n\t\t\tconst label = parts.slice(-depth).join(\"/\") || source;\n\t\t\tgroups.set(label, [...(groups.get(label) ?? []), source]);\n\t\t}\n\t\tconst duplicates = [...groups].filter(([label, group]) => group.length > 1 || reservedLabels.has(label));\n\t\tif (duplicates.length === 0) {\n\t\t\treturn new Map(\n\t\t\t\tsources.map((source) => {\n\t\t\t\t\tconst parts = partsBySource.get(source) ?? [source];\n\t\t\t\t\treturn [source, parts.slice(-(depthBySource.get(source) ?? 1)).join(\"/\") || source];\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlet expanded = false;\n\t\tfor (const [, group] of duplicates) {\n\t\t\tfor (const source of group) {\n\t\t\t\tconst maxDepth = partsBySource.get(source)?.length ?? 1;\n\t\t\t\tconst depth = depthBySource.get(source) ?? 1;\n\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\tdepthBySource.set(source, depth + 1);\n\t\t\t\t\texpanded = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!expanded) return new Map(sources.map((source) => [source, source]));\n\t}\n}\n\nfunction getExtensionIdentityPath(resourcePath: string): string {\n\tconst normalized = resourcePath.replace(/\\\\/g, \"/\");\n\tconst segments = normalized.split(\"/\").filter(Boolean);\n\tif (/^index\\.[cm]?[jt]sx?$/.test(segments.at(-1) ?? \"\")) segments.pop();\n\treturn segments.join(\"/\") || normalized;\n}\n\nfunction mergeExtensions(\n\thostExtensions: ReadonlyArray<{ path: string; sourceInfo?: SourceInfo; hidden?: boolean }>,\n\tengineExtensions: ReadonlyArray<{ path: string; sourceInfo?: SourceInfo; hidden?: boolean }>,\n): Array<{ path: string; sourceInfo?: SourceInfo }> {\n\tconst merged: Array<{ path: string; sourceInfo?: SourceInfo }> = [];\n\tconst indexByIdentity = new Map<string, number>();\n\tconst hiddenIdentities = new Set<string>();\n\tfor (const extension of [...hostExtensions, ...engineExtensions]) {\n\t\tconst identity = getExtensionIdentityPath(extension.path);\n\t\tif (extension.hidden === true) hiddenIdentities.add(identity);\n\t\tconst existingIndex = indexByIdentity.get(identity);\n\t\tif (existingIndex === undefined) {\n\t\t\tindexByIdentity.set(identity, merged.length);\n\t\t\tmerged.push({ path: extension.path, sourceInfo: extension.sourceInfo });\n\t\t\tcontinue;\n\t\t}\n\t\tconst existing = merged[existingIndex];\n\t\tif (existing && !existing.sourceInfo && extension.sourceInfo) {\n\t\t\tmerged[existingIndex] = { ...existing, sourceInfo: extension.sourceInfo };\n\t\t}\n\t}\n\treturn merged.filter((extension) => !hiddenIdentities.has(getExtensionIdentityPath(extension.path)));\n}\n\nfunction getOverlapLabels(mode: InteractiveModeBase, overlaps: readonly ResourceOverlap[]): string[] {\n\tconst labels = new Set<string>();\n\tconst localPackageSources = new Set<string>();\n\tconst extensionSources = new Set<string>();\n\tfor (const overlap of overlaps) {\n\t\tconst sourceInfo = overlap.inherited;\n\t\tif (sourceInfo.origin !== \"package\") {\n\t\t\textensionSources.add(getExtensionIdentityPath(sourceInfo.path));\n\t\t\tcontinue;\n\t\t}\n\t\tif (!mode.isPackageSource(sourceInfo)) {\n\t\t\tlocalPackageSources.add(sourceInfo.source);\n\t\t\tcontinue;\n\t\t}\n\t\tconst label = mode.getCompactPackageSourceLabel(sourceInfo);\n\t\tif (label) labels.add(label);\n\t}\n\tfor (const label of getShortestUniqueSourceLabels([...localPackageSources], labels).values()) labels.add(label);\n\tfor (const label of getShortestUniqueSourceLabels([...extensionSources], labels).values()) labels.add(label);\n\treturn [...labels];\n}\ninterface DisplayedOverlapNotice {\n\tcomponent: Text;\n\tcontainer: Container;\n\tfingerprint: string;\n}\n\nconst displayedOverlapNotices = new WeakMap<InteractiveModeBase, DisplayedOverlapNotice>();\n\nfunction getOverlapNoticeFingerprint(\n\tmode: InteractiveModeBase,\n\toverlaps: readonly ResourceOverlap[],\n): string | undefined {\n\tif (overlaps.length === 0) return undefined;\n\tconst fingerprint = overlaps\n\t\t.map((overlap) => `${overlap.resourceType}:${overlap.name}:${overlap.inherited.path}:${overlap.bundled.path}`)\n\t\t.sort()\n\t\t.join(\"\\n\");\n\tconst displayed = displayedOverlapNotices.get(mode);\n\tif (displayed?.fingerprint === fingerprint && displayed.container.children.includes(displayed.component)) {\n\t\treturn undefined;\n\t}\n\treturn fingerprint;\n}\n\nInteractiveModeBase.prototype.showLoadedResources = function (\n\tthis: InteractiveModeBase,\n\toptions?: {\n\t\textensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t\ttargetContainer?: Container;\n\t},\n): void {\n\tconst targetContainer = options?.targetContainer ?? this.chatContainer;\n\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\tif (!showListing && !showDiagnostics) {\n\t\treturn;\n\t}\n\tif (targetContainer === this.resourceDisclosureContainer) targetContainer.clear();\n\n\tconst skillsResult = this.session.resourceLoader.getSkills();\n\tconst promptsResult = this.session.resourceLoader.getPrompts();\n\tconst themesResult = this.session.resourceLoader.getThemes();\n\tconst hostExtensions =\n\t\toptions?.extensions ??\n\t\tthis.session.resourceLoader.getExtensions().extensions.map((extension) => ({\n\t\t\tpath: extension.path,\n\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\thidden: extension.hidden,\n\t\t}));\n\tconst extensions = mergeExtensions(hostExtensions, getInteractiveEngineResourceExtensions(this.runtimeHost));\n\tconst sourceInfos = new Map<string, SourceInfo>();\n\tfor (const extension of extensions) {\n\t\tif (extension.sourceInfo) {\n\t\t\tsourceInfos.set(extension.path, extension.sourceInfo);\n\t\t}\n\t}\n\tfor (const skill of skillsResult.skills) {\n\t\tif (skill.sourceInfo) {\n\t\t\tsourceInfos.set(skill.filePath, skill.sourceInfo);\n\t\t}\n\t}\n\tfor (const prompt of promptsResult.prompts) {\n\t\tif (prompt.sourceInfo) {\n\t\t\tsourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t\t}\n\t}\n\tfor (const loadedTheme of themesResult.themes) {\n\t\tif (loadedTheme.sourcePath && loadedTheme.sourceInfo) {\n\t\t\tsourceInfos.set(loadedTheme.sourcePath, loadedTheme.sourceInfo);\n\t\t}\n\t}\n\n\tif (showListing) {\n\t\t// SYSTEM.md / APPEND_SYSTEM.md shape the prompt exactly like AGENTS.md does,\n\t\t// so the startup CONTEXT listing names them too.\n\t\tconst systemPromptSource = this.session.resourceLoader.getSystemPromptSource();\n\t\tconst contextFiles = [\n\t\t\t...(systemPromptSource ? [systemPromptSource] : []),\n\t\t\t...this.session.resourceLoader.getAppendSystemPromptSources(),\n\t\t\t...this.session.resourceLoader.getAgentsFiles().agentsFiles,\n\t\t];\n\t\tconst customThemes = themesResult.themes.filter((t) => t.sourcePath);\n\n\t\tconst expandedSections: {\n\t\t\tcontext?: string;\n\t\t\tskills?: string;\n\t\t\tprompts?: string;\n\t\t\textensions?: string;\n\t\t\tthemes?: string;\n\t\t} = {};\n\t\tif (contextFiles.length > 0) {\n\t\t\texpandedSections.context = contextFiles\n\t\t\t\t.map((contextFile) => theme.fg(\"dim\", ` ${this.formatDisplayPath(contextFile.path)}`))\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\n\t\tconst skills = skillsResult.skills;\n\t\tif (skills.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\tskills.map((skill) => ({\n\t\t\t\t\tpath: skill.filePath,\n\t\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t\t})),\n\t\t\t);\n\t\t\texpandedSections.skills = this.formatScopeGroups(groups, {\n\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t});\n\t\t}\n\n\t\tconst prompts = promptsResult.prompts;\n\t\tconst promptEntries = prompts.map((prompt) => ({\n\t\t\tpath: prompt.filePath,\n\t\t\tsourceInfo: prompt.sourceInfo,\n\t\t\tlabel: `/${prompt.name}`,\n\t\t}));\n\t\tif (promptEntries.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(promptEntries);\n\t\t\tconst promptByPath = new Map(promptEntries.map((prompt) => [prompt.path, prompt.label]));\n\t\t\texpandedSections.prompts = this.formatScopeGroups(groups, {\n\t\t\t\tformatPath: (item) => promptByPath.get(item.path) ?? this.formatDisplayPath(item.path),\n\t\t\t\tformatPackagePath: (item) => promptByPath.get(item.path) ?? this.formatDisplayPath(item.path),\n\t\t\t});\n\t\t}\n\n\t\tif (extensions.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(extensions);\n\t\t\texpandedSections.extensions = this.formatScopeGroups(groups, {\n\t\t\t\tformatPath: (item) => this.formatExtensionDisplayPath(item.path),\n\t\t\t\tformatPackagePath: (item) => this.formatExtensionDisplayPath(this.getShortPath(item.path, item.sourceInfo)),\n\t\t\t});\n\t\t}\n\n\t\tif (customThemes.length > 0) {\n\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\tcustomThemes.map((loadedTheme) => ({\n\t\t\t\t\tpath: loadedTheme.sourcePath!,\n\t\t\t\t\tsourceInfo: loadedTheme.sourceInfo,\n\t\t\t\t})),\n\t\t\t);\n\t\t\texpandedSections.themes = this.formatScopeGroups(groups, {\n\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t});\n\t\t}\n\n\t\tthis.addResourceDisclosure({\n\t\t\tcontextFiles,\n\t\t\tskills,\n\t\t\tprompts,\n\t\t\textensions,\n\t\t\tthemes: customThemes,\n\t\t\texpandedSections,\n\t\t\ttargetContainer,\n\t\t});\n\t}\n\n\tif (showDiagnostics) {\n\t\tconst overlaps = [\n\t\t\t...(this.session.resourceLoader.getExtensions().overlaps ?? []),\n\t\t\t...getInteractiveEngineResourceOverlaps(this.runtimeHost),\n\t\t];\n\t\tconst overlapLabels = getOverlapLabels(this, overlaps);\n\t\tconst overlapFingerprint = getOverlapNoticeFingerprint(this, overlaps);\n\t\tif (overlapFingerprint && overlapLabels.length > 0) {\n\t\t\tconst sources = formatList(overlapLabels.map((label) => `\\`${label}\\``));\n\t\t\tconst verb = overlapLabels.length === 1 ? \"provides\" : \"provide\";\n\t\t\tconst notice = new Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\t`Extension overlap detected: ${sources} ${verb} resources already bundled with Atomic. Atomic kept its bundled versions; non-conflicting extension features remain available.`,\n\t\t\t\t),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\ttargetContainer.addChild(notice);\n\t\t\tdisplayedOverlapNotices.set(this, {\n\t\t\t\tcomponent: notice,\n\t\t\t\tcontainer: targetContainer,\n\t\t\t\tfingerprint: overlapFingerprint,\n\t\t\t});\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\tif (skillDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\tif (promptDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\tif (extensionErrors.length > 0) {\n\t\t\tfor (const error of extensionErrors) {\n\t\t\t\textensionDiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: error.error,\n\t\t\t\t\tpath: error.path,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst commandDiagnostics = this.session.extensionRunner.getCommandDiagnostics();\n\t\textensionDiagnostics.push(...commandDiagnostics);\n\t\textensionDiagnostics.push(...this.getBuiltInCommandConflictDiagnostics(this.session.extensionRunner));\n\n\t\tconst shortcutDiagnostics = this.session.extensionRunner.getShortcutDiagnostics();\n\t\textensionDiagnostics.push(...shortcutDiagnostics);\n\n\t\tif (extensionDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\tif (themeDiagnostics.length > 0) {\n\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, sourceInfos);\n\t\t\ttargetContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\ttargetContainer.addChild(new Spacer(1));\n\t\t}\n\t}\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-startup-chat-container.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup-chat-container.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interactive-startup-chat-container.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup-chat-container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,OAAO,CAAC,qBAAqB,CAAS;IAEtC,oBAAoB,IAAI,IAAI,CAG3B;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvC;CACD;AAED,UAAU,qBAAqB;IAC9B,aAAa,EAAE,SAAS,CAAC;IACzB,EAAE,EAAE;QAAE,aAAa,IAAI,IAAI,CAAA;KAAE,CAAC;CAC9B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAM1E"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { markLifecycleTiming } from "../../core/lifecycle-timings.js";
|
|
1
2
|
import { Container } from "./interactive-mode-deps.js";
|
|
2
3
|
/**
|
|
3
4
|
* Holds startup chat output off-screen until the resource disclosure slot has
|
|
@@ -20,6 +21,7 @@ export class StartupChatContainer extends Container {
|
|
|
20
21
|
export function releaseStartupChatOutput(host) {
|
|
21
22
|
if (host.chatContainer instanceof StartupChatContainer) {
|
|
22
23
|
host.chatContainer.releaseStartupOutput();
|
|
24
|
+
markLifecycleTiming("chat-output-release");
|
|
23
25
|
host.ui.requestRender();
|
|
24
26
|
}
|
|
25
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-startup-chat-container.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup-chat-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAAnD;;QACS,0BAAqB,GAAG,KAAK,CAAC;IAUvC,CAAC;IARA,oBAAoB;QACnB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;CACD;AAOD,MAAM,UAAU,wBAAwB,CAAC,IAA2B;IACnE,IAAI,IAAI,CAAC,aAAa,YAAY,oBAAoB,EAAE,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;AACF,CAAC","sourcesContent":["import { Container } from \"./interactive-mode-deps.ts\";\n\n/**\n * Holds startup chat output off-screen until the resource disclosure slot has\n * been filled. Terminal scrollback cannot reorder lines that were painted\n * before an earlier container received content.\n */\nexport class StartupChatContainer extends Container {\n\tprivate startupOutputReleased = false;\n\n\treleaseStartupOutput(): void {\n\t\tthis.startupOutputReleased = true;\n\t\tthis.invalidate();\n\t}\n\n\toverride render(width: number): string[] {\n\t\treturn this.startupOutputReleased ? super.render(width) : [];\n\t}\n}\n\ninterface StartupChatOutputHost {\n\tchatContainer: Container;\n\tui: { requestRender(): void };\n}\n\nexport function releaseStartupChatOutput(host: StartupChatOutputHost): void {\n\tif (host.chatContainer instanceof StartupChatContainer) {\n\t\thost.chatContainer.releaseStartupOutput();\n\t\thost.ui.requestRender();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-startup-chat-container.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup-chat-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAAnD;;QACS,0BAAqB,GAAG,KAAK,CAAC;IAUvC,CAAC;IARA,oBAAoB;QACnB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;CACD;AAOD,MAAM,UAAU,wBAAwB,CAAC,IAA2B;IACnE,IAAI,IAAI,CAAC,aAAa,YAAY,oBAAoB,EAAE,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;QAC1C,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;AACF,CAAC","sourcesContent":["import { markLifecycleTiming } from \"../../core/lifecycle-timings.ts\";\nimport { Container } from \"./interactive-mode-deps.ts\";\n\n/**\n * Holds startup chat output off-screen until the resource disclosure slot has\n * been filled. Terminal scrollback cannot reorder lines that were painted\n * before an earlier container received content.\n */\nexport class StartupChatContainer extends Container {\n\tprivate startupOutputReleased = false;\n\n\treleaseStartupOutput(): void {\n\t\tthis.startupOutputReleased = true;\n\t\tthis.invalidate();\n\t}\n\n\toverride render(width: number): string[] {\n\t\treturn this.startupOutputReleased ? super.render(width) : [];\n\t}\n}\n\ninterface StartupChatOutputHost {\n\tchatContainer: Container;\n\tui: { requestRender(): void };\n}\n\nexport function releaseStartupChatOutput(host: StartupChatOutputHost): void {\n\tif (host.chatContainer instanceof StartupChatContainer) {\n\t\thost.chatContainer.releaseStartupOutput();\n\t\tmarkLifecycleTiming(\"chat-output-release\");\n\t\thost.ui.requestRender();\n\t}\n}\n"]}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
+
import { InteractiveModeBase } from "./interactive-mode-base.ts";
|
|
1
2
|
export declare const shouldRefreshCatalogsOnStartup: () => boolean;
|
|
3
|
+
export declare function attachInteractiveEngineResourceExtensionRefresh(mode: InteractiveModeBase): () => void;
|
|
2
4
|
//# sourceMappingURL=interactive-startup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interactive-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAoB,MAAM,4BAA4B,CAAC;AA4CnF,eAAO,MAAM,8BAA8B,QAAO,OAAkC,CAAC;AAwGrF,wBAAgB,+CAA+C,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAUrG"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ScrollView, VStack } from "@earendil-works/pi-tui";
|
|
2
|
+
import { markLifecycleTiming } from "../../core/lifecycle-timings.js";
|
|
2
3
|
import { isOfflineModeEnabled } from "../../core/package-manager-env.js";
|
|
3
4
|
import { createChildProcessEnvironment } from "../../utils/child-process.js";
|
|
4
|
-
import { onInteractiveEngineRemoteCommandsChanged, waitForInteractiveEngineBound, } from "../interactive-engine/extension-ui-bridge.js";
|
|
5
|
+
import { onInteractiveEngineRemoteCommandsChanged, onInteractiveEngineResourceExtensionsChanged, waitForInteractiveEngineBound, } from "../interactive-engine/extension-ui-bridge.js";
|
|
5
6
|
import { renderAtomicAssemblyBanner, renderStartupManifesto } from "./components/atomic-banner.js";
|
|
6
7
|
import { StartupIdentityComponent } from "./components/startup-identity.js";
|
|
7
8
|
import { TranscriptFollowIndicator } from "./components/transcript-follow-indicator.js";
|
|
@@ -99,6 +100,18 @@ InteractiveModeBase.prototype.showManagedToolStatus = function (status) {
|
|
|
99
100
|
this.lastStatusText = undefined;
|
|
100
101
|
this.ui.requestRender();
|
|
101
102
|
};
|
|
103
|
+
export function attachInteractiveEngineResourceExtensionRefresh(mode) {
|
|
104
|
+
return onInteractiveEngineResourceExtensionsChanged(mode.runtimeHost, () => {
|
|
105
|
+
if (mode.resourceDisclosureContainer.children.length === 0)
|
|
106
|
+
return;
|
|
107
|
+
mode.showLoadedResources({
|
|
108
|
+
force: true,
|
|
109
|
+
showDiagnosticsWhenQuiet: true,
|
|
110
|
+
targetContainer: mode.resourceDisclosureContainer,
|
|
111
|
+
});
|
|
112
|
+
mode.ui.requestRender();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
102
115
|
InteractiveModeBase.prototype.init = async function () {
|
|
103
116
|
if (this.isInitialized)
|
|
104
117
|
return;
|
|
@@ -153,21 +166,20 @@ InteractiveModeBase.prototype.init = async function () {
|
|
|
153
166
|
onInteractiveEngineRemoteCommandsChanged(this.runtimeHost, () => {
|
|
154
167
|
this.setupAutocompleteProvider();
|
|
155
168
|
});
|
|
169
|
+
attachInteractiveEngineResourceExtensionRefresh(this);
|
|
156
170
|
seedStartupInput(this.pendingUserInputs, this.defaultEditor, this.options.startupInputCapture?.consume(), this.startupReplayInputs, (text) => {
|
|
157
171
|
this.startupDraftText = text;
|
|
158
172
|
}, (text) => {
|
|
159
173
|
this.startupReplayActiveInput = text;
|
|
160
174
|
});
|
|
161
|
-
// Start
|
|
175
|
+
// Start and paint the host-owned TUI before waiting for the isolated engine.
|
|
176
|
+
// The editor remains local and responsive; session binding and provider work
|
|
177
|
+
// still stay behind the engine-bound gate below.
|
|
178
|
+
markLifecycleTiming("tui-start");
|
|
162
179
|
this.ui.start();
|
|
163
|
-
await waitForInteractiveEngineBound(this.runtimeHost);
|
|
164
|
-
if (this.isShuttingDown)
|
|
165
|
-
return;
|
|
166
|
-
recordTimeSinceReset("time-to-first-frame");
|
|
167
180
|
this.footerDataProvider.onBranchChange(() => {
|
|
168
181
|
this.ui.requestRender();
|
|
169
182
|
});
|
|
170
|
-
this.isInitialized = true;
|
|
171
183
|
await this.themeController.applyFromSettings();
|
|
172
184
|
// Add the quiet startup identity unless silenced.
|
|
173
185
|
if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
|
|
@@ -181,6 +193,16 @@ InteractiveModeBase.prototype.init = async function () {
|
|
|
181
193
|
this.builtInHeader = new Text("", 0, 0);
|
|
182
194
|
this.headerContainer.addChild(this.builtInHeader);
|
|
183
195
|
}
|
|
196
|
+
markLifecycleTiming("header-mounted");
|
|
197
|
+
this.ui.requestRender();
|
|
198
|
+
// This legacy mark now means the first requested identity frame. The settled
|
|
199
|
+
// animation frame remains the external benchmark's startup-complete mark.
|
|
200
|
+
recordTimeSinceReset("time-to-first-frame");
|
|
201
|
+
await waitForInteractiveEngineBound(this.runtimeHost);
|
|
202
|
+
if (this.isShuttingDown)
|
|
203
|
+
return;
|
|
204
|
+
this.isInitialized = true;
|
|
205
|
+
// The isolated engine may have replaced the preliminary model/provider view.
|
|
184
206
|
this.ui.requestRender();
|
|
185
207
|
// fd/rg readiness runs after first paint so slow downloads never make
|
|
186
208
|
// startup appear frozen. Progress reports land in the transcript: a console
|
|
@@ -415,9 +437,7 @@ InteractiveModeBase.prototype.formatDisplayPath = function (p) {
|
|
|
415
437
|
return result;
|
|
416
438
|
};
|
|
417
439
|
InteractiveModeBase.prototype.formatExtensionDisplayPath = function (path) {
|
|
418
|
-
|
|
419
|
-
result = result.replace(/\/index\.ts$/, "").replace(/\/index\.js$/, "");
|
|
420
|
-
return result;
|
|
440
|
+
return this.formatDisplayPath(path).replace(/[\\/]index\.(?:ts|js)$/, "");
|
|
421
441
|
};
|
|
422
442
|
InteractiveModeBase.prototype.formatContextPath = function (p) {
|
|
423
443
|
const cwd = path.resolve(this.sessionManager.getCwd());
|