
























@@ -39,7 +39,9 @@ import {
3939import { resolveSendPolicy } from "../sessions/send-policy.js";
4040import { createLazyImportLoader } from "../shared/lazy-promise.js";
4141import { normalizeOptionalString } from "../shared/string-coerce.js";
42-import { hydrateResolvedSkillsAsync } from "../skills/snapshot-hydration.js";
42+import { resolveEffectiveAgentSkillFilter } from "../skills/agent-filter.js";
43+import type { getRemoteSkillEligibility } from "../skills/remote.js";
44+import type { resolveReusableWorkspaceSkillSnapshot } from "../skills/session-snapshot.js";
4345import type { SkillSnapshot } from "../skills/types.js";
4446import { sanitizeForLog } from "../terminal/ansi.js";
4547import { createTrajectoryRuntimeRecorder } from "../trajectory/runtime.js";
@@ -58,7 +60,6 @@ import {
5860resolveDefaultAgentId,
5961resolveEffectiveModelFallbacks,
6062resolveSessionAgentId,
61-resolveAgentSkillsFilter,
6263resolveAgentWorkspaceDir,
6364} from "./agent-scope.js";
6465import { isStoredCredentialCompatibleWithAuthProvider } from "./auth-profiles/order.js";
@@ -117,10 +118,10 @@ type CliCompactionRuntime = typeof import("./command/cli-compaction.js");
117118type TranscriptResolveRuntime = typeof import("../config/sessions/transcript-resolve.runtime.js");
118119type CliDepsRuntime = typeof import("../cli/deps.js");
119120type ExecDefaultsRuntime = typeof import("./exec-defaults.js");
120-type SkillsRuntime = typeof import("../skills/index.js");
121-type SkillsFilterRuntime = typeof import("../skills/filter.js");
122-type SkillsRefreshStateRuntime = typeof import("../skills/refresh-state.js");
123-type SkillsRemoteRuntime = typeof import("../infra/skills-remote.js");
121+type SkillsRuntime = {
122+ getRemoteSkillEligibility: typeof getRemoteSkillEligibility;
123+ resolveReusableWorkspaceSkillSnapshot: typeof resolveReusableWorkspaceSkillSnapshot;
124+};
124125125126const attemptExecutionRuntimeLoader = createLazyImportLoader<AttemptExecutionRuntime>(
126127() => import("./command/attempt-execution.runtime.js"),
@@ -153,31 +154,16 @@ const cliDepsRuntimeLoader = createLazyImportLoader<CliDepsRuntime>(() => import
153154const execDefaultsRuntimeLoader = createLazyImportLoader<ExecDefaultsRuntime>(
154155() => import("./exec-defaults.js"),
155156);
156-const skillsRuntimeLoader = createLazyImportLoader<SkillsRuntime>(
157-() => import("../skills/index.js"),
158-);
159-const skillsFilterRuntimeLoader = createLazyImportLoader<SkillsFilterRuntime>(
160-() => import("../skills/filter.js"),
161-);
162-const skillsRefreshStateRuntimeLoader = createLazyImportLoader<SkillsRefreshStateRuntime>(
163-() => import("../skills/refresh-state.js"),
164-);
165-const skillsRemoteRuntimeLoader = createLazyImportLoader<SkillsRemoteRuntime>(
166-() => import("../infra/skills-remote.js"),
167-);
168-169-function createEmptySkillsSnapshot(params: {
170-skillFilter: string[];
171-version?: number;
172-}): SkillSnapshot {
157+const skillsRuntimeLoader = createLazyImportLoader<SkillsRuntime>(async () => {
158+const [remote, sessionSnapshot] = await Promise.all([
159+import("../skills/remote.js"),
160+import("../skills/session-snapshot.js"),
161+]);
173162return {
174-prompt: "",
175-skills: [],
176-resolvedSkills: [],
177-skillFilter: params.skillFilter,
178-version: params.version,
163+getRemoteSkillEligibility: remote.getRemoteSkillEligibility,
164+resolveReusableWorkspaceSkillSnapshot: sessionSnapshot.resolveReusableWorkspaceSkillSnapshot,
179165};
180-}
166+});
181167182168function loadAttemptExecutionRuntime(): Promise<AttemptExecutionRuntime> {
183169return attemptExecutionRuntimeLoader.load();
@@ -227,18 +213,6 @@ function loadSkillsRuntime(): Promise<SkillsRuntime> {
227213return skillsRuntimeLoader.load();
228214}
229215230-function loadSkillsFilterRuntime(): Promise<SkillsFilterRuntime> {
231-return skillsFilterRuntimeLoader.load();
232-}
233-234-function loadSkillsRefreshStateRuntime(): Promise<SkillsRefreshStateRuntime> {
235-return skillsRefreshStateRuntimeLoader.load();
236-}
237-238-function loadSkillsRemoteRuntime(): Promise<SkillsRemoteRuntime> {
239-return skillsRemoteRuntimeLoader.load();
240-}
241-242216async function resolveAgentCommandDeps(deps: CliDeps | undefined): Promise<CliDeps> {
243217if (deps) {
244218return deps;
@@ -819,55 +793,33 @@ async function agentCommandInternal(
819793});
820794}
821795822-const [{ getSkillsSnapshotVersion, shouldRefreshSnapshotForVersion }, { matchesSkillFilter }] =
823-await Promise.all([loadSkillsRefreshStateRuntime(), loadSkillsFilterRuntime()]);
824-const skillsSnapshotVersion = getSkillsSnapshotVersion(workspaceDir);
825-const skillFilter = resolveAgentSkillsFilter(cfg, sessionAgentId);
796+const skillFilter = resolveEffectiveAgentSkillFilter(cfg, sessionAgentId);
826797const currentSkillsSnapshot = sessionEntry?.skillsSnapshot;
827-const shouldRefreshSkillsSnapshot =
828-!currentSkillsSnapshot ||
829-shouldRefreshSnapshotForVersion(currentSkillsSnapshot.version, skillsSnapshotVersion) ||
830-!matchesSkillFilter(currentSkillsSnapshot.skillFilter, skillFilter);
831-const needsSkillsSnapshot = isNewSession || shouldRefreshSkillsSnapshot;
832-const emptySkillsFilter = skillFilter !== undefined && skillFilter.length === 0;
833-const buildSkillsSnapshot = async () => {
834-if (emptySkillsFilter) {
835-return createEmptySkillsSnapshot({
836- skillFilter,
837-version: skillsSnapshotVersion,
838-});
839-}
840-const [
841-{ buildWorkspaceSkillSnapshot },
842-{ getRemoteSkillEligibility },
843-{ canExecRequestNode },
844-] = await Promise.all([
845-loadSkillsRuntime(),
846-loadSkillsRemoteRuntime(),
847-loadExecDefaultsRuntime(),
848-]);
849-return buildWorkspaceSkillSnapshot(workspaceDir, {
850-config: cfg,
851-eligibility: {
852-remote: getRemoteSkillEligibility({
853-advertiseExecNode: canExecRequestNode({
854- cfg,
855- sessionEntry,
856- sessionKey,
857-agentId: sessionAgentId,
858-}),
798+const [
799+{ getRemoteSkillEligibility, resolveReusableWorkspaceSkillSnapshot },
800+{ canExecRequestNode },
801+] = await Promise.all([loadSkillsRuntime(), loadExecDefaultsRuntime()]);
802+const skillSnapshotState = resolveReusableWorkspaceSkillSnapshot({
803+ workspaceDir,
804+config: cfg,
805+agentId: sessionAgentId,
806+existingSnapshot: isNewSession ? undefined : currentSkillsSnapshot,
807+ skillFilter,
808+eligibility: {
809+remote: getRemoteSkillEligibility({
810+advertiseExecNode: canExecRequestNode({
811+ cfg,
812+ sessionEntry,
813+ sessionKey,
814+agentId: sessionAgentId,
859815}),
860-},
861-snapshotVersion: skillsSnapshotVersion,
862- skillFilter,
863-agentId: sessionAgentId,
864-});
865-};
866-const skillsSnapshot = needsSkillsSnapshot
867- ? await buildSkillsSnapshot()
868- : !currentSkillsSnapshot
869- ? undefined
870- : await hydrateResolvedSkillsAsync(currentSkillsSnapshot, buildSkillsSnapshot);
816+}),
817+},
818+watch: false,
819+});
820+const needsSkillsSnapshot =
821+isNewSession || !currentSkillsSnapshot || skillSnapshotState.shouldRefresh;
822+const skillsSnapshot = skillSnapshotState.snapshot;
871823872824if (
873825skillsSnapshot &&
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。