@serviceme/devtools-core 2.0.0 → 2.0.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/dist/index.d.mts CHANGED
@@ -161,6 +161,27 @@ declare function copilotPrompt(options: CopilotPromptOptions): Promise<CopilotPr
161
161
  */
162
162
  /** Artifact kinds a logical plugin can contribute to Copilot. */
163
163
  type CopilotArtifactKind = "agent" | "skill" | "instruction" | "prompt" | "hook" | "mcp";
164
+ /** Parsed form of a content identity (see {@link buildContentIdentity}). */
165
+ interface ContentIdentity {
166
+ repoId: string;
167
+ pluginId: string;
168
+ kind: string;
169
+ name: string;
170
+ }
171
+ /**
172
+ * Build the stable content identity `${repoId}::${pluginId}::${kind}:${name}`.
173
+ * New code should always construct it through this helper; a few
174
+ * pre-existing sites (plugin-resolver, workspace-declaration-reader)
175
+ * still inline the same shape.
176
+ */
177
+ declare function buildContentIdentity(identity: ContentIdentity): string;
178
+ /**
179
+ * Parse a content identity back into its parts. Returns null for
180
+ * anything that does not match the `${repoId}::${pluginId}::${kind}:${name}`
181
+ * shape (e.g. integration identities without a name tail are handled
182
+ * by their callers and should not be passed here).
183
+ */
184
+ declare function parseContentIdentity(value: string): ContentIdentity | null;
164
185
  /** A repository pinned to an exact commit for reproducible restoration. */
165
186
  interface WorkspaceManifestRepository {
166
187
  /** Stable id used in on-disk paths and plugin references. */
@@ -198,6 +219,10 @@ interface WorkspaceManifestPlugin {
198
219
  artifacts: Partial<Record<CopilotArtifactKind, boolean>>;
199
220
  /** Exact resolver artifact identities selected for this package. */
200
221
  artifactIds?: string[];
222
+ /** Content targets (`kind:name`) deliberately disabled on installs of
223
+ * this package — part of the shared declaration so the disabled state
224
+ * survives extension reloads and machine-local state loss. */
225
+ disabledArtifacts?: string[];
201
226
  }
202
227
  /** A v2 logical plugin selection references any supported source type. */
203
228
  interface WorkspaceManifestPluginV2 {
@@ -209,6 +234,10 @@ interface WorkspaceManifestPluginV2 {
209
234
  artifacts: Partial<Record<CopilotArtifactKind, boolean>>;
210
235
  /** Exact resolver artifact identities selected for this package. */
211
236
  artifactIds?: string[];
237
+ /** Content targets (`kind:name`) deliberately disabled on installs of
238
+ * this package — part of the shared declaration so the disabled state
239
+ * survives extension reloads and machine-local state loss. */
240
+ disabledArtifacts?: string[];
212
241
  }
213
242
  /** Root shape of .github/serviceme-plugins.json. */
214
243
  interface WorkspaceCopilotManifestV1 {
@@ -300,11 +329,18 @@ interface ResolvedPluginEntry extends PlannedContentEntry {
300
329
  packageVersion?: string;
301
330
  }
302
331
  /** Resolve a workspace declaration into an immutable content plan. */
332
+ interface WorkspacePlanConflict {
333
+ /** Identity of the dropped (later) entry. */
334
+ identity: string;
335
+ /** Human-readable remediation hint naming both plugins. */
336
+ message: string;
337
+ }
303
338
  declare function resolveWorkspaceContentPlan(input: {
304
339
  manifest: WorkspaceCopilotManifest;
305
340
  reposDir: string;
306
341
  }): Promise<{
307
342
  entries: ResolvedPluginEntry[];
343
+ conflicts: WorkspacePlanConflict[];
308
344
  }>;
309
345
  /**
310
346
  * Lenient variant for CATALOG BROWSING: resolve a single plugin's
@@ -583,6 +619,11 @@ interface BuildCustomizationViewInput {
583
619
  statesByArtifactId: Record<string, CopilotArtifactState>;
584
620
  legacyCount?: number;
585
621
  generatedAt?: string;
622
+ /** Content identities deliberately disabled on this machine (or in
623
+ * the shared declaration). They stay in the projection (so the UI can
624
+ * still render disabled rows) but no longer count as "enabled" in the
625
+ * health-card summary. */
626
+ disabledArtifactIds?: string[];
586
627
  }
587
628
  declare function buildCopilotCustomizationView(input: BuildCustomizationViewInput): CopilotCustomizationView;
588
629
 
@@ -608,8 +649,13 @@ interface DisabledContentState {
608
649
  version: 1;
609
650
  entries: DisabledContentEntry[];
610
651
  }
611
- /** Match predicate scoped to one lookup entry. */
612
- type DisabledContentMatcher = (entry: DisabledContentEntry) => boolean;
652
+ /**
653
+ * Identity matcher for the workspace reconciler's `isDisabled` seam.
654
+ * The mark's `name` is the ENTRY name (hello-skill), not the plugin id
655
+ * (hello), so the match keys on repoId + kind + entry name. User marks
656
+ * apply to any workspace; workspace marks only to their own.
657
+ */
658
+ declare function buildDisabledIdentityMatcher(workspaceDir: string, marks: DisabledContentEntry[]): (identity: string) => boolean;
613
659
  declare class DisabledContentStore {
614
660
  private readonly homeDir;
615
661
  constructor(options?: {
@@ -618,9 +664,22 @@ declare class DisabledContentStore {
618
664
  /** Absolute store path: SERVICEME_HOME/copilot/disabled-content.json. */
619
665
  path(): Promise<string>;
620
666
  list(): Promise<DisabledContentEntry[]>;
621
- has(matcher: DisabledContentMatcher): Promise<boolean>;
622
667
  add(entry: DisabledContentEntry): Promise<void>;
623
668
  remove(entry: DisabledContentEntry): Promise<void>;
669
+ /**
670
+ * Lifecycle cleanup: installing or uninstalling an artifact clears
671
+ * its disable marks for that scope — a mark without its artifact is
672
+ * stale garbage that keeps the home page showing a disabled row for
673
+ * content the catalog already reports as gone. User scope matches
674
+ * any workspace; workspace scope matches the exact workspace.
675
+ */
676
+ removeForArtifact(input: {
677
+ repoId: string;
678
+ name: string;
679
+ kind: "skill" | "agent";
680
+ scope: "workspace" | "user";
681
+ workspaceDir?: string;
682
+ }): Promise<void>;
624
683
  private write;
625
684
  }
626
685
 
@@ -1156,6 +1215,115 @@ declare class CopilotSourceCatalogService {
1156
1215
  removeSource(sourceId: string, workspaceDir?: string): Promise<void>;
1157
1216
  }
1158
1217
 
1218
+ /**
1219
+ * Workspace content detection — the adoption inverse of the restore
1220
+ * flow. When a workspace carries Copilot content (`.github` skill/agent
1221
+ * entries, generated hook/MCP configuration) but has NO
1222
+ * `.github/serviceme-plugins.json` declaration, this module derives
1223
+ * what is there and where it came from, so the user can initialize the
1224
+ * declaration from existing content instead of reinstalling by hand.
1225
+ *
1226
+ * Provenance rules:
1227
+ * - symlinks under `.github/{skills,agents}` resolve their repo from
1228
+ * the target path (`<reposDir>/<repoId>/...`) — exact;
1229
+ * - real (non-symlink) copies are fingerprinted (deterministic
1230
+ * SHA-256 over the sorted tree/file bytes) and matched against the
1231
+ * repo catalog by name: a unique content match is adoptable,
1232
+ * several matching repos need a user pick, none is unmatched;
1233
+ * - `.vscode/{hooks,mcp}.serviceme.json` carry the generating
1234
+ * identity map under `_serviceme`, which is parsed directly.
1235
+ */
1236
+ /** Minimal catalog row the detector matches fingerprints against. */
1237
+ interface DetectorCatalogEntry {
1238
+ repoId: string;
1239
+ name: string;
1240
+ kind: "skill" | "agent";
1241
+ /** Directory of the entry, or the manifest path itself for flat files. */
1242
+ dir: string;
1243
+ manifestPath: string;
1244
+ }
1245
+ /** A skill/agent whose source repo is known and can be adopted as-is. */
1246
+ interface UnmanagedAdoption {
1247
+ repoId: string;
1248
+ name: string;
1249
+ kind: "skill" | "agent";
1250
+ /** "symlink" — provenance exact from the link target;
1251
+ * "fingerprint" — real copy with a unique catalog content match. */
1252
+ source: "symlink" | "fingerprint";
1253
+ }
1254
+ /** A real copy whose content matches several repos — needs a pick. */
1255
+ interface UnmanagedAmbiguous {
1256
+ name: string;
1257
+ kind: "skill" | "agent";
1258
+ /** Repo ids whose catalog content is byte-identical. */
1259
+ candidates: string[];
1260
+ }
1261
+ /** A hook/MCP integration recorded in a generated serviceme config. */
1262
+ interface UnmanagedIntegration {
1263
+ repoId: string;
1264
+ pluginId: string;
1265
+ kind: "hook" | "mcp";
1266
+ }
1267
+ interface UnmanagedDetection {
1268
+ adoptions: UnmanagedAdoption[];
1269
+ ambiguous: UnmanagedAmbiguous[];
1270
+ integrations: UnmanagedIntegration[];
1271
+ /** Present but not adoptable — surfaced for transparency only. The
1272
+ * reason is a plain string so protocol-wire results are assignable. */
1273
+ unmatched: Array<{
1274
+ name: string;
1275
+ kind: string;
1276
+ reason: string;
1277
+ }>;
1278
+ }
1279
+ /** Stable signature of a detection — powers the dismissal memory. */
1280
+ declare function unmanagedDetectionSignature(detection: UnmanagedDetection): string;
1281
+ /** `skill:hello-skill`-style targets a plugin manifest declares. */
1282
+ declare function coveredTargetsOf(manifest: Record<string, unknown>): Set<string>;
1283
+ /**
1284
+ * Find the plugin under `<repoRoot>/plugins/` whose plugin.json
1285
+ * already declares `kind:name` — e.g. plugin `hello` covering
1286
+ * skill `hello-skill`. Per-artifact installs of covered content must
1287
+ * declare through the COVERING plugin, otherwise the standalone
1288
+ * selection collides with the plugin on the next reconcile.
1289
+ * Coverage comes from EITHER the manifest's extension path arrays OR
1290
+ * (for namespace-less "Create Plugin" manifests, where the resolver derives
1291
+ * content from directory conventions) the plugin dir's own
1292
+ * skills/agents subdirs. Returns null when no plugin covers it.
1293
+ */
1294
+ declare function findPluginCoveringArtifact(repoRoot: string, kind: "skill" | "agent", name: string): Promise<string | null>;
1295
+ /**
1296
+ * Drop adoption entries whose target a sibling entry's plugin.json
1297
+ * already declares. Adopting `agent hello` registers plugin `hello`,
1298
+ * whose manifest also covers `skill hello-skill` — keeping the
1299
+ * standalone skill entry would create a duplicate-target conflict on
1300
+ * the next reconcile. Pure: manifests are passed in by the caller.
1301
+ */
1302
+ declare function dedupeAdoptionsByPluginManifests<T extends {
1303
+ repoId: string;
1304
+ name: string;
1305
+ kind: "skill" | "agent";
1306
+ }>(entries: T[], pluginManifests: Map<string, Record<string, unknown>>): {
1307
+ kept: T[];
1308
+ dropped: Array<{
1309
+ entry: T;
1310
+ coveredBy: string;
1311
+ }>;
1312
+ };
1313
+ /**
1314
+ * Detect unmanaged Copilot content in a workspace. Read-only: nothing
1315
+ * is written or linked; the caller decides what to adopt.
1316
+ */
1317
+ declare function detectUnmanagedWorkspaceContent(input: {
1318
+ workspaceDir: string;
1319
+ /** SERVICEME repos root (`~/.serviceme/repos`). */
1320
+ reposDir: string;
1321
+ /** Catalog rows (from SkillStore.listAll()). */
1322
+ catalog: DetectorCatalogEntry[];
1323
+ /** Enabled repo ids — targets/integrations outside them are unmatched. */
1324
+ knownRepoIds: Set<string>;
1325
+ }): Promise<UnmanagedDetection>;
1326
+
1159
1327
  /**
1160
1328
  * Read the workspace manifest’s declared package selections without resolving
1161
1329
  * sources. Source resolution can fail (unavailable source, conflict), and
@@ -1227,6 +1395,23 @@ declare function removeWorkspaceContentSelection(input: {
1227
1395
  pluginId: string;
1228
1396
  kind: CopilotArtifactKind;
1229
1397
  }): Promise<WorkspaceCopilotManifest>;
1398
+ /**
1399
+ * Record or clear one content target (`kind:name`) in a plugin
1400
+ * selection's `disabledArtifacts` — the shared-declaration form of the
1401
+ * per-artifact enable switch. Unlike the machine-local disable marks,
1402
+ * this survives extension reloads and machine-local state loss, so the
1403
+ * package/entry badges stay consistent with what the user disabled.
1404
+ * No-op (returns the loaded manifest unchanged) when the selection
1405
+ * does not exist.
1406
+ */
1407
+ declare function setWorkspacePluginArtifactsDisabled(input: {
1408
+ workspaceDir: string;
1409
+ repositoryId: string;
1410
+ pluginId: string;
1411
+ /** Content target, e.g. `agent:hello`. */
1412
+ target: string;
1413
+ disabled: boolean;
1414
+ }): Promise<WorkspaceCopilotManifest | undefined>;
1230
1415
 
1231
1416
  /** Hash a canonical workspace path into a stable directory segment. */
1232
1417
  declare function hashWorkspaceDir(workspaceDir: string): Promise<string>;
@@ -2819,4 +3004,4 @@ declare function migrateLegacyUserSkillContent(input: {
2819
3004
  declare const unzipFile: (zipPath: string, dest: string) => Promise<void>;
2820
3005
  declare const moveFiles: (sourceDir: string, destDir: string, overwrite?: boolean) => Promise<void>;
2821
3006
 
2822
- export { AGENT_DRAFTS_SUBDIR, type AddUserRepoInput, type AddUserRepoResult, type AgentCatalog, AgentCatalogClient, type AgentCatalogClientOptions, type AgentDownloadFile, type AgentInstallScope, type AgentMutateResult, AgentReconciler, type AgentReconcilerDependencies, AgentStore, type AgentStoreFileSystem, type AgentStoreOptions, type AgentsStateFile, type AnyRepoConfig, type AppendLogInput, type BootstrapPhase5Result, type BuildCustomizationViewInput, CACHE_SUBDIR, CREDENTIALS_CONFIG_FILENAME, CannotRemoveDefaultRepoError, type CopilotArtifactKind, type CopilotArtifactState, type CopilotArtifactSummary, type CopilotArtifactView, type CopilotCustomizationView, type CopilotHostCapabilities, type CopilotInstallIntent, type CopilotIntegrationAdapter, CopilotLinkMaterializer, type CopilotLinkMode, type CopilotLocalGate, type CopilotMaterializationHealth, type CopilotPackageDefinition, type CopilotPackageInstallInput, type CopilotPackageInstallation, type CopilotPackageMoveInput, type CopilotPackageUninstallInput, type CopilotPackageUpdateInput, type CopilotPackageUpdatePreview, type CopilotPackageView, type CopilotPluginRegisterInput, CopilotPluginRegistrar, type CopilotPluginRegistrarOptions, type CopilotPluginRegistration, type CopilotScope, type CopilotSourceCatalogDeps, type CopilotSourceCatalogQuery, CopilotSourceCatalogService, type CopilotSourceRecord, type CopilotSourceSummary, type CopilotSourceView, type CopilotUpdatePreviewInput, type CopilotUserStatus, type CreateTaskInput, FIXED_ADDED_AT as DEFAULT_REPO_FIXED_ADDED_AT, DEFAULT_REPO_ID, DEVICE_JSON_FILENAME, DRAFTS_SUBDIR, DaemonLogger, type DefaultRepoConfig, type DisabledContentEntry, type DisabledContentMatcher, type DisabledContentState, DisabledContentStore, type DraftDetail, DraftNotFoundError, type DraftSummary, DraftsError, DraftsStore, type EditTaskInput, EnvironmentInspector, type EnvironmentInspectorOptions, type ExecutorResult, FileHookConfigAdapter, FileMcpConfigAdapter, type FsWatcherCallbacks, type FsWatcherHandle, GitClient, GithubCopilotCliExecutor, type HookConfigAdapter, type HookDefinition, type HookEventDefinition, HttpRequestExecutor, ImageTools, type InstalledAgent, type IntegrationApplyResult, InvalidDraftError, InvalidRepoUrlError, type IsoTimestamp, type JsonTools, KNOWN_WORKSPACES_FILENAME, type LegacyMigrationEntry, type LegacyMigrationPreview, type LegacyUserContentEntry, type LegacyUserContentMigrationResult, type LegacyUserSkillEntry, type LegacyUserSkillMigrationResult, type LoadResult, MACHINE_ID_FILENAME, MIGRATION_FAILURES_FILENAME, type MaterializeEntryResult, type MaterializeEntryStatus, type MaterializeResult, type McpConfigAdapter, type McpServerDefinition, type MigrateToGlobalOptions, type MigrationResult, type OutputEventCallback, PROFILES_JSON_FILENAME, PackageInstallationService, type PackageInstallationServiceDeps, type PersonalContentState, PersonalCopilotContentReconciler, type PersonalInstallationState, PersonalInstallationStore, type PersonalLinkKind, type PersonalPackageResolver, type PersonalReconcileResult, PidManager, type PlannedContentEntry, type PluginCatalogPackage, type PluginCatalogRepoInput, type PluginCatalogService, type ProbeError, type ProbeOptions, type ProbeResult, ProjectTools, REPOS_CONFIG_FILENAME, REPOS_SUBDIR, RepoAlreadyExistsError, RepoCloneConflictError, type RepoConfig, RepoManager, RepoManagerError, type RepoManagerOptions, RepoNotFoundError, RepoNotInStoreError, type RepoSource, type ReposFile, type ReposFileInput, ReposLoader, type ReposLoaderFileSystem, type ReposLoaderOptions, ReposStore, type ReposStoreChange, type ReposStoreFileSystem, type ReposStoreListener, type ReposStoreOptions, type ResolvedPluginEntry, type ResolvedPluginManifest, SAFE_REPO_ID_PATTERN, SCHEDULED_TASKS_CONFIG_FILENAME, SCHEDULED_TASKS_LOG_FILENAME, SCHEDULER_LOCK_FILENAME, SCHEDULER_LOG_FILENAME, SCHEDULER_PID_FILENAME, SERVER_PROXY_GLOBAL_FILENAME, SERVICEME_DIR_NAME, SERVICEME_HOME_ENV, SKILL_DRAFTS_SUBDIR, type SaveDraftOptions, SchedulerDaemonV2, type SchedulerDaemonV2Options, type ServerProxyGlobalPatch, type ServerProxyGlobalState, ShellExecutor, type SkillCatalog, SkillCatalogClient, type SkillCatalogClientOptions, type SkillDownloadFile, type SkillMutateResult, SkillReconciler, type SkillReconcilerDependencies, SkillStore, type SkillStoreFileSystem, type SkillStoreOptions, type StreamingExecutorHandle, type StreamingTaskExecutor, type SyncReport, type SyncStatus, TOOLBOX_JSON_FILENAME, TOOL_RISK_MAP, TaskConfigManager, type TaskEventListener, TaskExecutionEngine, type TaskExecutor, TaskLogManager, type UserRepoConfig, WORKSPACES_SUBDIR, WORKSPACE_CONTENT_STATE_FILENAME, WORKSPACE_MANIFEST_RELPATH, type WorkspaceContentEntryResult, type WorkspaceContentPlan, type WorkspaceContentReconcileResult, type WorkspaceContentState, WorkspaceContentStateStore, type WorkspaceContentStatus, WorkspaceCopilotContentReconciler, type WorkspaceCopilotManifest, type WorkspaceCopilotManifestV1, type WorkspaceCopilotManifestV2, WorkspaceExcludeStore, type WorkspaceManifestCatalogSource, type WorkspaceManifestGitSource, type WorkspaceManifestPlugin, type WorkspaceManifestPluginV2, type WorkspaceManifestRepository, type WorkspaceManifestSource, type WorkspaceMaterializedEntry, WorkspaceProbe, allPersonalLinkKinds, repoSchema as anyRepoConfigSchema, assertSafeRepoId, bootstrapDefaults, bootstrapPhase5Placeholders, buildCopilotCustomizationView, buildDefaultReposFile, copilotDoctor, copilotPrompt, createCopilotAuthRequiredError, createCopilotNotInstalledError, createDefaultCopilotHostCapabilities, createImageTools, createJsonTools, createPluginCatalogService, createProjectTools, createReposStore, defaultRepoSchema as defaultRepoConfigSchema, deriveCopilotUserStatus, ensureDefaultsInstalled, findPluginMcpJson, findRepoHooksJson, generateDraftId, getAgentDraftsDir, getAllDefaultRepoConfigs, getCacheDir, getCredentialsConfigPath, getDefaultRepoConfig, getDeviceJsonPath, getDraftsDir, getExecutor, getHomeDir, getHomePlatform, getKnownWorkspacesPath, getMachineIdPath, getMigrationFailuresPath, getProfilesJsonPath, getRepoCacheDir, getRepoDir, getReposConfigPath, getReposDir, getScheduledTasksConfigPath, getScheduledTasksLogPath, getSchedulerLockPath, getSchedulerLogPath, getSchedulerPidPath, getServerProxyGlobalPath, getServicemeHome, getSkillDraftsDir, getToolboxJsonPath, getWorkspaceManifestPath, getWorkspaceManifestPluginSourceId, getWorkspaceManifestSources, getWorkspaceStateDir, getWorkspacesDir, hashWorkspaceDir, isCopilotAuthenticated, isDefaultRepo, isStreamingTaskExecutor, isUserRepo, listPluginCatalog, loadWorkspaceCopilotManifest, migrateLegacyServerProxyEnabled, migrateLegacyUserContent, migrateLegacyUserSkillContent, migrateToGlobal, moveFiles, narrowRepoConfig, parseAgentToolPermissions, parseHooksJson, parseMcpJson, readDeclaredWorkspaceInstallations, readServerProxyGlobal, removeWorkspaceContentSelection, replaceWorkspaceContentSelection, reposFileSchema, resetUserHomeOverrides, resolveDraftDir, resolvePluginEntriesLenient, resolveTaskExecutionPayload, resolveWorkspaceContentPlan, setUserHomeOverrides, supportsPersonalIntegrationKind, supportsPersonalLinkKind, toArtifactSummary, unzipFile, upsertWorkspaceContentSelection, userRepoSchema as userRepoConfigSchema, validateReposFile, validateTaskPayload, writeServerProxyGlobal, writeWorkspaceCopilotManifest };
3007
+ export { AGENT_DRAFTS_SUBDIR, type AddUserRepoInput, type AddUserRepoResult, type AgentCatalog, AgentCatalogClient, type AgentCatalogClientOptions, type AgentDownloadFile, type AgentInstallScope, type AgentMutateResult, AgentReconciler, type AgentReconcilerDependencies, AgentStore, type AgentStoreFileSystem, type AgentStoreOptions, type AgentsStateFile, type AnyRepoConfig, type AppendLogInput, type BootstrapPhase5Result, type BuildCustomizationViewInput, CACHE_SUBDIR, CREDENTIALS_CONFIG_FILENAME, CannotRemoveDefaultRepoError, type ContentIdentity, type CopilotArtifactKind, type CopilotArtifactState, type CopilotArtifactSummary, type CopilotArtifactView, type CopilotCustomizationView, type CopilotHostCapabilities, type CopilotInstallIntent, type CopilotIntegrationAdapter, CopilotLinkMaterializer, type CopilotLinkMode, type CopilotLocalGate, type CopilotMaterializationHealth, type CopilotPackageDefinition, type CopilotPackageInstallInput, type CopilotPackageInstallation, type CopilotPackageMoveInput, type CopilotPackageUninstallInput, type CopilotPackageUpdateInput, type CopilotPackageUpdatePreview, type CopilotPackageView, type CopilotPluginRegisterInput, CopilotPluginRegistrar, type CopilotPluginRegistrarOptions, type CopilotPluginRegistration, type CopilotScope, type CopilotSourceCatalogDeps, type CopilotSourceCatalogQuery, CopilotSourceCatalogService, type CopilotSourceRecord, type CopilotSourceSummary, type CopilotSourceView, type CopilotUpdatePreviewInput, type CopilotUserStatus, type CreateTaskInput, FIXED_ADDED_AT as DEFAULT_REPO_FIXED_ADDED_AT, DEFAULT_REPO_ID, DEVICE_JSON_FILENAME, DRAFTS_SUBDIR, DaemonLogger, type DefaultRepoConfig, type DetectorCatalogEntry, type DisabledContentEntry, type DisabledContentState, DisabledContentStore, type DraftDetail, DraftNotFoundError, type DraftSummary, DraftsError, DraftsStore, type EditTaskInput, EnvironmentInspector, type EnvironmentInspectorOptions, type ExecutorResult, FileHookConfigAdapter, FileMcpConfigAdapter, type FsWatcherCallbacks, type FsWatcherHandle, GitClient, GithubCopilotCliExecutor, type HookConfigAdapter, type HookDefinition, type HookEventDefinition, HttpRequestExecutor, ImageTools, type InstalledAgent, type IntegrationApplyResult, InvalidDraftError, InvalidRepoUrlError, type IsoTimestamp, type JsonTools, KNOWN_WORKSPACES_FILENAME, type LegacyMigrationEntry, type LegacyMigrationPreview, type LegacyUserContentEntry, type LegacyUserContentMigrationResult, type LegacyUserSkillEntry, type LegacyUserSkillMigrationResult, type LoadResult, MACHINE_ID_FILENAME, MIGRATION_FAILURES_FILENAME, type MaterializeEntryResult, type MaterializeEntryStatus, type MaterializeResult, type McpConfigAdapter, type McpServerDefinition, type MigrateToGlobalOptions, type MigrationResult, type OutputEventCallback, PROFILES_JSON_FILENAME, PackageInstallationService, type PackageInstallationServiceDeps, type PersonalContentState, PersonalCopilotContentReconciler, type PersonalInstallationState, PersonalInstallationStore, type PersonalLinkKind, type PersonalPackageResolver, type PersonalReconcileResult, PidManager, type PlannedContentEntry, type PluginCatalogPackage, type PluginCatalogRepoInput, type PluginCatalogService, type ProbeError, type ProbeOptions, type ProbeResult, ProjectTools, REPOS_CONFIG_FILENAME, REPOS_SUBDIR, RepoAlreadyExistsError, RepoCloneConflictError, type RepoConfig, RepoManager, RepoManagerError, type RepoManagerOptions, RepoNotFoundError, RepoNotInStoreError, type RepoSource, type ReposFile, type ReposFileInput, ReposLoader, type ReposLoaderFileSystem, type ReposLoaderOptions, ReposStore, type ReposStoreChange, type ReposStoreFileSystem, type ReposStoreListener, type ReposStoreOptions, type ResolvedPluginEntry, type ResolvedPluginManifest, SAFE_REPO_ID_PATTERN, SCHEDULED_TASKS_CONFIG_FILENAME, SCHEDULED_TASKS_LOG_FILENAME, SCHEDULER_LOCK_FILENAME, SCHEDULER_LOG_FILENAME, SCHEDULER_PID_FILENAME, SERVER_PROXY_GLOBAL_FILENAME, SERVICEME_DIR_NAME, SERVICEME_HOME_ENV, SKILL_DRAFTS_SUBDIR, type SaveDraftOptions, SchedulerDaemonV2, type SchedulerDaemonV2Options, type ServerProxyGlobalPatch, type ServerProxyGlobalState, ShellExecutor, type SkillCatalog, SkillCatalogClient, type SkillCatalogClientOptions, type SkillDownloadFile, type SkillMutateResult, SkillReconciler, type SkillReconcilerDependencies, SkillStore, type SkillStoreFileSystem, type SkillStoreOptions, type StreamingExecutorHandle, type StreamingTaskExecutor, type SyncReport, type SyncStatus, TOOLBOX_JSON_FILENAME, TOOL_RISK_MAP, TaskConfigManager, type TaskEventListener, TaskExecutionEngine, type TaskExecutor, TaskLogManager, type UnmanagedAdoption, type UnmanagedAmbiguous, type UnmanagedDetection, type UnmanagedIntegration, type UserRepoConfig, WORKSPACES_SUBDIR, WORKSPACE_CONTENT_STATE_FILENAME, WORKSPACE_MANIFEST_RELPATH, type WorkspaceContentEntryResult, type WorkspaceContentPlan, type WorkspaceContentReconcileResult, type WorkspaceContentState, WorkspaceContentStateStore, type WorkspaceContentStatus, WorkspaceCopilotContentReconciler, type WorkspaceCopilotManifest, type WorkspaceCopilotManifestV1, type WorkspaceCopilotManifestV2, WorkspaceExcludeStore, type WorkspaceManifestCatalogSource, type WorkspaceManifestGitSource, type WorkspaceManifestPlugin, type WorkspaceManifestPluginV2, type WorkspaceManifestRepository, type WorkspaceManifestSource, type WorkspaceMaterializedEntry, type WorkspacePlanConflict, WorkspaceProbe, allPersonalLinkKinds, repoSchema as anyRepoConfigSchema, assertSafeRepoId, bootstrapDefaults, bootstrapPhase5Placeholders, buildContentIdentity, buildCopilotCustomizationView, buildDefaultReposFile, buildDisabledIdentityMatcher, copilotDoctor, copilotPrompt, coveredTargetsOf, createCopilotAuthRequiredError, createCopilotNotInstalledError, createDefaultCopilotHostCapabilities, createImageTools, createJsonTools, createPluginCatalogService, createProjectTools, createReposStore, dedupeAdoptionsByPluginManifests, defaultRepoSchema as defaultRepoConfigSchema, deriveCopilotUserStatus, detectUnmanagedWorkspaceContent, ensureDefaultsInstalled, findPluginCoveringArtifact, findPluginMcpJson, findRepoHooksJson, generateDraftId, getAgentDraftsDir, getAllDefaultRepoConfigs, getCacheDir, getCredentialsConfigPath, getDefaultRepoConfig, getDeviceJsonPath, getDraftsDir, getExecutor, getHomeDir, getHomePlatform, getKnownWorkspacesPath, getMachineIdPath, getMigrationFailuresPath, getProfilesJsonPath, getRepoCacheDir, getRepoDir, getReposConfigPath, getReposDir, getScheduledTasksConfigPath, getScheduledTasksLogPath, getSchedulerLockPath, getSchedulerLogPath, getSchedulerPidPath, getServerProxyGlobalPath, getServicemeHome, getSkillDraftsDir, getToolboxJsonPath, getWorkspaceManifestPath, getWorkspaceManifestPluginSourceId, getWorkspaceManifestSources, getWorkspaceStateDir, getWorkspacesDir, hashWorkspaceDir, isCopilotAuthenticated, isDefaultRepo, isStreamingTaskExecutor, isUserRepo, listPluginCatalog, loadWorkspaceCopilotManifest, migrateLegacyServerProxyEnabled, migrateLegacyUserContent, migrateLegacyUserSkillContent, migrateToGlobal, moveFiles, narrowRepoConfig, parseAgentToolPermissions, parseContentIdentity, parseHooksJson, parseMcpJson, readDeclaredWorkspaceInstallations, readServerProxyGlobal, removeWorkspaceContentSelection, replaceWorkspaceContentSelection, reposFileSchema, resetUserHomeOverrides, resolveDraftDir, resolvePluginEntriesLenient, resolveTaskExecutionPayload, resolveWorkspaceContentPlan, setUserHomeOverrides, setWorkspacePluginArtifactsDisabled, supportsPersonalIntegrationKind, supportsPersonalLinkKind, toArtifactSummary, unmanagedDetectionSignature, unzipFile, upsertWorkspaceContentSelection, userRepoSchema as userRepoConfigSchema, validateReposFile, validateTaskPayload, writeServerProxyGlobal, writeWorkspaceCopilotManifest };
package/dist/index.d.ts CHANGED
@@ -161,6 +161,27 @@ declare function copilotPrompt(options: CopilotPromptOptions): Promise<CopilotPr
161
161
  */
162
162
  /** Artifact kinds a logical plugin can contribute to Copilot. */
163
163
  type CopilotArtifactKind = "agent" | "skill" | "instruction" | "prompt" | "hook" | "mcp";
164
+ /** Parsed form of a content identity (see {@link buildContentIdentity}). */
165
+ interface ContentIdentity {
166
+ repoId: string;
167
+ pluginId: string;
168
+ kind: string;
169
+ name: string;
170
+ }
171
+ /**
172
+ * Build the stable content identity `${repoId}::${pluginId}::${kind}:${name}`.
173
+ * New code should always construct it through this helper; a few
174
+ * pre-existing sites (plugin-resolver, workspace-declaration-reader)
175
+ * still inline the same shape.
176
+ */
177
+ declare function buildContentIdentity(identity: ContentIdentity): string;
178
+ /**
179
+ * Parse a content identity back into its parts. Returns null for
180
+ * anything that does not match the `${repoId}::${pluginId}::${kind}:${name}`
181
+ * shape (e.g. integration identities without a name tail are handled
182
+ * by their callers and should not be passed here).
183
+ */
184
+ declare function parseContentIdentity(value: string): ContentIdentity | null;
164
185
  /** A repository pinned to an exact commit for reproducible restoration. */
165
186
  interface WorkspaceManifestRepository {
166
187
  /** Stable id used in on-disk paths and plugin references. */
@@ -198,6 +219,10 @@ interface WorkspaceManifestPlugin {
198
219
  artifacts: Partial<Record<CopilotArtifactKind, boolean>>;
199
220
  /** Exact resolver artifact identities selected for this package. */
200
221
  artifactIds?: string[];
222
+ /** Content targets (`kind:name`) deliberately disabled on installs of
223
+ * this package — part of the shared declaration so the disabled state
224
+ * survives extension reloads and machine-local state loss. */
225
+ disabledArtifacts?: string[];
201
226
  }
202
227
  /** A v2 logical plugin selection references any supported source type. */
203
228
  interface WorkspaceManifestPluginV2 {
@@ -209,6 +234,10 @@ interface WorkspaceManifestPluginV2 {
209
234
  artifacts: Partial<Record<CopilotArtifactKind, boolean>>;
210
235
  /** Exact resolver artifact identities selected for this package. */
211
236
  artifactIds?: string[];
237
+ /** Content targets (`kind:name`) deliberately disabled on installs of
238
+ * this package — part of the shared declaration so the disabled state
239
+ * survives extension reloads and machine-local state loss. */
240
+ disabledArtifacts?: string[];
212
241
  }
213
242
  /** Root shape of .github/serviceme-plugins.json. */
214
243
  interface WorkspaceCopilotManifestV1 {
@@ -300,11 +329,18 @@ interface ResolvedPluginEntry extends PlannedContentEntry {
300
329
  packageVersion?: string;
301
330
  }
302
331
  /** Resolve a workspace declaration into an immutable content plan. */
332
+ interface WorkspacePlanConflict {
333
+ /** Identity of the dropped (later) entry. */
334
+ identity: string;
335
+ /** Human-readable remediation hint naming both plugins. */
336
+ message: string;
337
+ }
303
338
  declare function resolveWorkspaceContentPlan(input: {
304
339
  manifest: WorkspaceCopilotManifest;
305
340
  reposDir: string;
306
341
  }): Promise<{
307
342
  entries: ResolvedPluginEntry[];
343
+ conflicts: WorkspacePlanConflict[];
308
344
  }>;
309
345
  /**
310
346
  * Lenient variant for CATALOG BROWSING: resolve a single plugin's
@@ -583,6 +619,11 @@ interface BuildCustomizationViewInput {
583
619
  statesByArtifactId: Record<string, CopilotArtifactState>;
584
620
  legacyCount?: number;
585
621
  generatedAt?: string;
622
+ /** Content identities deliberately disabled on this machine (or in
623
+ * the shared declaration). They stay in the projection (so the UI can
624
+ * still render disabled rows) but no longer count as "enabled" in the
625
+ * health-card summary. */
626
+ disabledArtifactIds?: string[];
586
627
  }
587
628
  declare function buildCopilotCustomizationView(input: BuildCustomizationViewInput): CopilotCustomizationView;
588
629
 
@@ -608,8 +649,13 @@ interface DisabledContentState {
608
649
  version: 1;
609
650
  entries: DisabledContentEntry[];
610
651
  }
611
- /** Match predicate scoped to one lookup entry. */
612
- type DisabledContentMatcher = (entry: DisabledContentEntry) => boolean;
652
+ /**
653
+ * Identity matcher for the workspace reconciler's `isDisabled` seam.
654
+ * The mark's `name` is the ENTRY name (hello-skill), not the plugin id
655
+ * (hello), so the match keys on repoId + kind + entry name. User marks
656
+ * apply to any workspace; workspace marks only to their own.
657
+ */
658
+ declare function buildDisabledIdentityMatcher(workspaceDir: string, marks: DisabledContentEntry[]): (identity: string) => boolean;
613
659
  declare class DisabledContentStore {
614
660
  private readonly homeDir;
615
661
  constructor(options?: {
@@ -618,9 +664,22 @@ declare class DisabledContentStore {
618
664
  /** Absolute store path: SERVICEME_HOME/copilot/disabled-content.json. */
619
665
  path(): Promise<string>;
620
666
  list(): Promise<DisabledContentEntry[]>;
621
- has(matcher: DisabledContentMatcher): Promise<boolean>;
622
667
  add(entry: DisabledContentEntry): Promise<void>;
623
668
  remove(entry: DisabledContentEntry): Promise<void>;
669
+ /**
670
+ * Lifecycle cleanup: installing or uninstalling an artifact clears
671
+ * its disable marks for that scope — a mark without its artifact is
672
+ * stale garbage that keeps the home page showing a disabled row for
673
+ * content the catalog already reports as gone. User scope matches
674
+ * any workspace; workspace scope matches the exact workspace.
675
+ */
676
+ removeForArtifact(input: {
677
+ repoId: string;
678
+ name: string;
679
+ kind: "skill" | "agent";
680
+ scope: "workspace" | "user";
681
+ workspaceDir?: string;
682
+ }): Promise<void>;
624
683
  private write;
625
684
  }
626
685
 
@@ -1156,6 +1215,115 @@ declare class CopilotSourceCatalogService {
1156
1215
  removeSource(sourceId: string, workspaceDir?: string): Promise<void>;
1157
1216
  }
1158
1217
 
1218
+ /**
1219
+ * Workspace content detection — the adoption inverse of the restore
1220
+ * flow. When a workspace carries Copilot content (`.github` skill/agent
1221
+ * entries, generated hook/MCP configuration) but has NO
1222
+ * `.github/serviceme-plugins.json` declaration, this module derives
1223
+ * what is there and where it came from, so the user can initialize the
1224
+ * declaration from existing content instead of reinstalling by hand.
1225
+ *
1226
+ * Provenance rules:
1227
+ * - symlinks under `.github/{skills,agents}` resolve their repo from
1228
+ * the target path (`<reposDir>/<repoId>/...`) — exact;
1229
+ * - real (non-symlink) copies are fingerprinted (deterministic
1230
+ * SHA-256 over the sorted tree/file bytes) and matched against the
1231
+ * repo catalog by name: a unique content match is adoptable,
1232
+ * several matching repos need a user pick, none is unmatched;
1233
+ * - `.vscode/{hooks,mcp}.serviceme.json` carry the generating
1234
+ * identity map under `_serviceme`, which is parsed directly.
1235
+ */
1236
+ /** Minimal catalog row the detector matches fingerprints against. */
1237
+ interface DetectorCatalogEntry {
1238
+ repoId: string;
1239
+ name: string;
1240
+ kind: "skill" | "agent";
1241
+ /** Directory of the entry, or the manifest path itself for flat files. */
1242
+ dir: string;
1243
+ manifestPath: string;
1244
+ }
1245
+ /** A skill/agent whose source repo is known and can be adopted as-is. */
1246
+ interface UnmanagedAdoption {
1247
+ repoId: string;
1248
+ name: string;
1249
+ kind: "skill" | "agent";
1250
+ /** "symlink" — provenance exact from the link target;
1251
+ * "fingerprint" — real copy with a unique catalog content match. */
1252
+ source: "symlink" | "fingerprint";
1253
+ }
1254
+ /** A real copy whose content matches several repos — needs a pick. */
1255
+ interface UnmanagedAmbiguous {
1256
+ name: string;
1257
+ kind: "skill" | "agent";
1258
+ /** Repo ids whose catalog content is byte-identical. */
1259
+ candidates: string[];
1260
+ }
1261
+ /** A hook/MCP integration recorded in a generated serviceme config. */
1262
+ interface UnmanagedIntegration {
1263
+ repoId: string;
1264
+ pluginId: string;
1265
+ kind: "hook" | "mcp";
1266
+ }
1267
+ interface UnmanagedDetection {
1268
+ adoptions: UnmanagedAdoption[];
1269
+ ambiguous: UnmanagedAmbiguous[];
1270
+ integrations: UnmanagedIntegration[];
1271
+ /** Present but not adoptable — surfaced for transparency only. The
1272
+ * reason is a plain string so protocol-wire results are assignable. */
1273
+ unmatched: Array<{
1274
+ name: string;
1275
+ kind: string;
1276
+ reason: string;
1277
+ }>;
1278
+ }
1279
+ /** Stable signature of a detection — powers the dismissal memory. */
1280
+ declare function unmanagedDetectionSignature(detection: UnmanagedDetection): string;
1281
+ /** `skill:hello-skill`-style targets a plugin manifest declares. */
1282
+ declare function coveredTargetsOf(manifest: Record<string, unknown>): Set<string>;
1283
+ /**
1284
+ * Find the plugin under `<repoRoot>/plugins/` whose plugin.json
1285
+ * already declares `kind:name` — e.g. plugin `hello` covering
1286
+ * skill `hello-skill`. Per-artifact installs of covered content must
1287
+ * declare through the COVERING plugin, otherwise the standalone
1288
+ * selection collides with the plugin on the next reconcile.
1289
+ * Coverage comes from EITHER the manifest's extension path arrays OR
1290
+ * (for namespace-less "Create Plugin" manifests, where the resolver derives
1291
+ * content from directory conventions) the plugin dir's own
1292
+ * skills/agents subdirs. Returns null when no plugin covers it.
1293
+ */
1294
+ declare function findPluginCoveringArtifact(repoRoot: string, kind: "skill" | "agent", name: string): Promise<string | null>;
1295
+ /**
1296
+ * Drop adoption entries whose target a sibling entry's plugin.json
1297
+ * already declares. Adopting `agent hello` registers plugin `hello`,
1298
+ * whose manifest also covers `skill hello-skill` — keeping the
1299
+ * standalone skill entry would create a duplicate-target conflict on
1300
+ * the next reconcile. Pure: manifests are passed in by the caller.
1301
+ */
1302
+ declare function dedupeAdoptionsByPluginManifests<T extends {
1303
+ repoId: string;
1304
+ name: string;
1305
+ kind: "skill" | "agent";
1306
+ }>(entries: T[], pluginManifests: Map<string, Record<string, unknown>>): {
1307
+ kept: T[];
1308
+ dropped: Array<{
1309
+ entry: T;
1310
+ coveredBy: string;
1311
+ }>;
1312
+ };
1313
+ /**
1314
+ * Detect unmanaged Copilot content in a workspace. Read-only: nothing
1315
+ * is written or linked; the caller decides what to adopt.
1316
+ */
1317
+ declare function detectUnmanagedWorkspaceContent(input: {
1318
+ workspaceDir: string;
1319
+ /** SERVICEME repos root (`~/.serviceme/repos`). */
1320
+ reposDir: string;
1321
+ /** Catalog rows (from SkillStore.listAll()). */
1322
+ catalog: DetectorCatalogEntry[];
1323
+ /** Enabled repo ids — targets/integrations outside them are unmatched. */
1324
+ knownRepoIds: Set<string>;
1325
+ }): Promise<UnmanagedDetection>;
1326
+
1159
1327
  /**
1160
1328
  * Read the workspace manifest’s declared package selections without resolving
1161
1329
  * sources. Source resolution can fail (unavailable source, conflict), and
@@ -1227,6 +1395,23 @@ declare function removeWorkspaceContentSelection(input: {
1227
1395
  pluginId: string;
1228
1396
  kind: CopilotArtifactKind;
1229
1397
  }): Promise<WorkspaceCopilotManifest>;
1398
+ /**
1399
+ * Record or clear one content target (`kind:name`) in a plugin
1400
+ * selection's `disabledArtifacts` — the shared-declaration form of the
1401
+ * per-artifact enable switch. Unlike the machine-local disable marks,
1402
+ * this survives extension reloads and machine-local state loss, so the
1403
+ * package/entry badges stay consistent with what the user disabled.
1404
+ * No-op (returns the loaded manifest unchanged) when the selection
1405
+ * does not exist.
1406
+ */
1407
+ declare function setWorkspacePluginArtifactsDisabled(input: {
1408
+ workspaceDir: string;
1409
+ repositoryId: string;
1410
+ pluginId: string;
1411
+ /** Content target, e.g. `agent:hello`. */
1412
+ target: string;
1413
+ disabled: boolean;
1414
+ }): Promise<WorkspaceCopilotManifest | undefined>;
1230
1415
 
1231
1416
  /** Hash a canonical workspace path into a stable directory segment. */
1232
1417
  declare function hashWorkspaceDir(workspaceDir: string): Promise<string>;
@@ -2819,4 +3004,4 @@ declare function migrateLegacyUserSkillContent(input: {
2819
3004
  declare const unzipFile: (zipPath: string, dest: string) => Promise<void>;
2820
3005
  declare const moveFiles: (sourceDir: string, destDir: string, overwrite?: boolean) => Promise<void>;
2821
3006
 
2822
- export { AGENT_DRAFTS_SUBDIR, type AddUserRepoInput, type AddUserRepoResult, type AgentCatalog, AgentCatalogClient, type AgentCatalogClientOptions, type AgentDownloadFile, type AgentInstallScope, type AgentMutateResult, AgentReconciler, type AgentReconcilerDependencies, AgentStore, type AgentStoreFileSystem, type AgentStoreOptions, type AgentsStateFile, type AnyRepoConfig, type AppendLogInput, type BootstrapPhase5Result, type BuildCustomizationViewInput, CACHE_SUBDIR, CREDENTIALS_CONFIG_FILENAME, CannotRemoveDefaultRepoError, type CopilotArtifactKind, type CopilotArtifactState, type CopilotArtifactSummary, type CopilotArtifactView, type CopilotCustomizationView, type CopilotHostCapabilities, type CopilotInstallIntent, type CopilotIntegrationAdapter, CopilotLinkMaterializer, type CopilotLinkMode, type CopilotLocalGate, type CopilotMaterializationHealth, type CopilotPackageDefinition, type CopilotPackageInstallInput, type CopilotPackageInstallation, type CopilotPackageMoveInput, type CopilotPackageUninstallInput, type CopilotPackageUpdateInput, type CopilotPackageUpdatePreview, type CopilotPackageView, type CopilotPluginRegisterInput, CopilotPluginRegistrar, type CopilotPluginRegistrarOptions, type CopilotPluginRegistration, type CopilotScope, type CopilotSourceCatalogDeps, type CopilotSourceCatalogQuery, CopilotSourceCatalogService, type CopilotSourceRecord, type CopilotSourceSummary, type CopilotSourceView, type CopilotUpdatePreviewInput, type CopilotUserStatus, type CreateTaskInput, FIXED_ADDED_AT as DEFAULT_REPO_FIXED_ADDED_AT, DEFAULT_REPO_ID, DEVICE_JSON_FILENAME, DRAFTS_SUBDIR, DaemonLogger, type DefaultRepoConfig, type DisabledContentEntry, type DisabledContentMatcher, type DisabledContentState, DisabledContentStore, type DraftDetail, DraftNotFoundError, type DraftSummary, DraftsError, DraftsStore, type EditTaskInput, EnvironmentInspector, type EnvironmentInspectorOptions, type ExecutorResult, FileHookConfigAdapter, FileMcpConfigAdapter, type FsWatcherCallbacks, type FsWatcherHandle, GitClient, GithubCopilotCliExecutor, type HookConfigAdapter, type HookDefinition, type HookEventDefinition, HttpRequestExecutor, ImageTools, type InstalledAgent, type IntegrationApplyResult, InvalidDraftError, InvalidRepoUrlError, type IsoTimestamp, type JsonTools, KNOWN_WORKSPACES_FILENAME, type LegacyMigrationEntry, type LegacyMigrationPreview, type LegacyUserContentEntry, type LegacyUserContentMigrationResult, type LegacyUserSkillEntry, type LegacyUserSkillMigrationResult, type LoadResult, MACHINE_ID_FILENAME, MIGRATION_FAILURES_FILENAME, type MaterializeEntryResult, type MaterializeEntryStatus, type MaterializeResult, type McpConfigAdapter, type McpServerDefinition, type MigrateToGlobalOptions, type MigrationResult, type OutputEventCallback, PROFILES_JSON_FILENAME, PackageInstallationService, type PackageInstallationServiceDeps, type PersonalContentState, PersonalCopilotContentReconciler, type PersonalInstallationState, PersonalInstallationStore, type PersonalLinkKind, type PersonalPackageResolver, type PersonalReconcileResult, PidManager, type PlannedContentEntry, type PluginCatalogPackage, type PluginCatalogRepoInput, type PluginCatalogService, type ProbeError, type ProbeOptions, type ProbeResult, ProjectTools, REPOS_CONFIG_FILENAME, REPOS_SUBDIR, RepoAlreadyExistsError, RepoCloneConflictError, type RepoConfig, RepoManager, RepoManagerError, type RepoManagerOptions, RepoNotFoundError, RepoNotInStoreError, type RepoSource, type ReposFile, type ReposFileInput, ReposLoader, type ReposLoaderFileSystem, type ReposLoaderOptions, ReposStore, type ReposStoreChange, type ReposStoreFileSystem, type ReposStoreListener, type ReposStoreOptions, type ResolvedPluginEntry, type ResolvedPluginManifest, SAFE_REPO_ID_PATTERN, SCHEDULED_TASKS_CONFIG_FILENAME, SCHEDULED_TASKS_LOG_FILENAME, SCHEDULER_LOCK_FILENAME, SCHEDULER_LOG_FILENAME, SCHEDULER_PID_FILENAME, SERVER_PROXY_GLOBAL_FILENAME, SERVICEME_DIR_NAME, SERVICEME_HOME_ENV, SKILL_DRAFTS_SUBDIR, type SaveDraftOptions, SchedulerDaemonV2, type SchedulerDaemonV2Options, type ServerProxyGlobalPatch, type ServerProxyGlobalState, ShellExecutor, type SkillCatalog, SkillCatalogClient, type SkillCatalogClientOptions, type SkillDownloadFile, type SkillMutateResult, SkillReconciler, type SkillReconcilerDependencies, SkillStore, type SkillStoreFileSystem, type SkillStoreOptions, type StreamingExecutorHandle, type StreamingTaskExecutor, type SyncReport, type SyncStatus, TOOLBOX_JSON_FILENAME, TOOL_RISK_MAP, TaskConfigManager, type TaskEventListener, TaskExecutionEngine, type TaskExecutor, TaskLogManager, type UserRepoConfig, WORKSPACES_SUBDIR, WORKSPACE_CONTENT_STATE_FILENAME, WORKSPACE_MANIFEST_RELPATH, type WorkspaceContentEntryResult, type WorkspaceContentPlan, type WorkspaceContentReconcileResult, type WorkspaceContentState, WorkspaceContentStateStore, type WorkspaceContentStatus, WorkspaceCopilotContentReconciler, type WorkspaceCopilotManifest, type WorkspaceCopilotManifestV1, type WorkspaceCopilotManifestV2, WorkspaceExcludeStore, type WorkspaceManifestCatalogSource, type WorkspaceManifestGitSource, type WorkspaceManifestPlugin, type WorkspaceManifestPluginV2, type WorkspaceManifestRepository, type WorkspaceManifestSource, type WorkspaceMaterializedEntry, WorkspaceProbe, allPersonalLinkKinds, repoSchema as anyRepoConfigSchema, assertSafeRepoId, bootstrapDefaults, bootstrapPhase5Placeholders, buildCopilotCustomizationView, buildDefaultReposFile, copilotDoctor, copilotPrompt, createCopilotAuthRequiredError, createCopilotNotInstalledError, createDefaultCopilotHostCapabilities, createImageTools, createJsonTools, createPluginCatalogService, createProjectTools, createReposStore, defaultRepoSchema as defaultRepoConfigSchema, deriveCopilotUserStatus, ensureDefaultsInstalled, findPluginMcpJson, findRepoHooksJson, generateDraftId, getAgentDraftsDir, getAllDefaultRepoConfigs, getCacheDir, getCredentialsConfigPath, getDefaultRepoConfig, getDeviceJsonPath, getDraftsDir, getExecutor, getHomeDir, getHomePlatform, getKnownWorkspacesPath, getMachineIdPath, getMigrationFailuresPath, getProfilesJsonPath, getRepoCacheDir, getRepoDir, getReposConfigPath, getReposDir, getScheduledTasksConfigPath, getScheduledTasksLogPath, getSchedulerLockPath, getSchedulerLogPath, getSchedulerPidPath, getServerProxyGlobalPath, getServicemeHome, getSkillDraftsDir, getToolboxJsonPath, getWorkspaceManifestPath, getWorkspaceManifestPluginSourceId, getWorkspaceManifestSources, getWorkspaceStateDir, getWorkspacesDir, hashWorkspaceDir, isCopilotAuthenticated, isDefaultRepo, isStreamingTaskExecutor, isUserRepo, listPluginCatalog, loadWorkspaceCopilotManifest, migrateLegacyServerProxyEnabled, migrateLegacyUserContent, migrateLegacyUserSkillContent, migrateToGlobal, moveFiles, narrowRepoConfig, parseAgentToolPermissions, parseHooksJson, parseMcpJson, readDeclaredWorkspaceInstallations, readServerProxyGlobal, removeWorkspaceContentSelection, replaceWorkspaceContentSelection, reposFileSchema, resetUserHomeOverrides, resolveDraftDir, resolvePluginEntriesLenient, resolveTaskExecutionPayload, resolveWorkspaceContentPlan, setUserHomeOverrides, supportsPersonalIntegrationKind, supportsPersonalLinkKind, toArtifactSummary, unzipFile, upsertWorkspaceContentSelection, userRepoSchema as userRepoConfigSchema, validateReposFile, validateTaskPayload, writeServerProxyGlobal, writeWorkspaceCopilotManifest };
3007
+ export { AGENT_DRAFTS_SUBDIR, type AddUserRepoInput, type AddUserRepoResult, type AgentCatalog, AgentCatalogClient, type AgentCatalogClientOptions, type AgentDownloadFile, type AgentInstallScope, type AgentMutateResult, AgentReconciler, type AgentReconcilerDependencies, AgentStore, type AgentStoreFileSystem, type AgentStoreOptions, type AgentsStateFile, type AnyRepoConfig, type AppendLogInput, type BootstrapPhase5Result, type BuildCustomizationViewInput, CACHE_SUBDIR, CREDENTIALS_CONFIG_FILENAME, CannotRemoveDefaultRepoError, type ContentIdentity, type CopilotArtifactKind, type CopilotArtifactState, type CopilotArtifactSummary, type CopilotArtifactView, type CopilotCustomizationView, type CopilotHostCapabilities, type CopilotInstallIntent, type CopilotIntegrationAdapter, CopilotLinkMaterializer, type CopilotLinkMode, type CopilotLocalGate, type CopilotMaterializationHealth, type CopilotPackageDefinition, type CopilotPackageInstallInput, type CopilotPackageInstallation, type CopilotPackageMoveInput, type CopilotPackageUninstallInput, type CopilotPackageUpdateInput, type CopilotPackageUpdatePreview, type CopilotPackageView, type CopilotPluginRegisterInput, CopilotPluginRegistrar, type CopilotPluginRegistrarOptions, type CopilotPluginRegistration, type CopilotScope, type CopilotSourceCatalogDeps, type CopilotSourceCatalogQuery, CopilotSourceCatalogService, type CopilotSourceRecord, type CopilotSourceSummary, type CopilotSourceView, type CopilotUpdatePreviewInput, type CopilotUserStatus, type CreateTaskInput, FIXED_ADDED_AT as DEFAULT_REPO_FIXED_ADDED_AT, DEFAULT_REPO_ID, DEVICE_JSON_FILENAME, DRAFTS_SUBDIR, DaemonLogger, type DefaultRepoConfig, type DetectorCatalogEntry, type DisabledContentEntry, type DisabledContentState, DisabledContentStore, type DraftDetail, DraftNotFoundError, type DraftSummary, DraftsError, DraftsStore, type EditTaskInput, EnvironmentInspector, type EnvironmentInspectorOptions, type ExecutorResult, FileHookConfigAdapter, FileMcpConfigAdapter, type FsWatcherCallbacks, type FsWatcherHandle, GitClient, GithubCopilotCliExecutor, type HookConfigAdapter, type HookDefinition, type HookEventDefinition, HttpRequestExecutor, ImageTools, type InstalledAgent, type IntegrationApplyResult, InvalidDraftError, InvalidRepoUrlError, type IsoTimestamp, type JsonTools, KNOWN_WORKSPACES_FILENAME, type LegacyMigrationEntry, type LegacyMigrationPreview, type LegacyUserContentEntry, type LegacyUserContentMigrationResult, type LegacyUserSkillEntry, type LegacyUserSkillMigrationResult, type LoadResult, MACHINE_ID_FILENAME, MIGRATION_FAILURES_FILENAME, type MaterializeEntryResult, type MaterializeEntryStatus, type MaterializeResult, type McpConfigAdapter, type McpServerDefinition, type MigrateToGlobalOptions, type MigrationResult, type OutputEventCallback, PROFILES_JSON_FILENAME, PackageInstallationService, type PackageInstallationServiceDeps, type PersonalContentState, PersonalCopilotContentReconciler, type PersonalInstallationState, PersonalInstallationStore, type PersonalLinkKind, type PersonalPackageResolver, type PersonalReconcileResult, PidManager, type PlannedContentEntry, type PluginCatalogPackage, type PluginCatalogRepoInput, type PluginCatalogService, type ProbeError, type ProbeOptions, type ProbeResult, ProjectTools, REPOS_CONFIG_FILENAME, REPOS_SUBDIR, RepoAlreadyExistsError, RepoCloneConflictError, type RepoConfig, RepoManager, RepoManagerError, type RepoManagerOptions, RepoNotFoundError, RepoNotInStoreError, type RepoSource, type ReposFile, type ReposFileInput, ReposLoader, type ReposLoaderFileSystem, type ReposLoaderOptions, ReposStore, type ReposStoreChange, type ReposStoreFileSystem, type ReposStoreListener, type ReposStoreOptions, type ResolvedPluginEntry, type ResolvedPluginManifest, SAFE_REPO_ID_PATTERN, SCHEDULED_TASKS_CONFIG_FILENAME, SCHEDULED_TASKS_LOG_FILENAME, SCHEDULER_LOCK_FILENAME, SCHEDULER_LOG_FILENAME, SCHEDULER_PID_FILENAME, SERVER_PROXY_GLOBAL_FILENAME, SERVICEME_DIR_NAME, SERVICEME_HOME_ENV, SKILL_DRAFTS_SUBDIR, type SaveDraftOptions, SchedulerDaemonV2, type SchedulerDaemonV2Options, type ServerProxyGlobalPatch, type ServerProxyGlobalState, ShellExecutor, type SkillCatalog, SkillCatalogClient, type SkillCatalogClientOptions, type SkillDownloadFile, type SkillMutateResult, SkillReconciler, type SkillReconcilerDependencies, SkillStore, type SkillStoreFileSystem, type SkillStoreOptions, type StreamingExecutorHandle, type StreamingTaskExecutor, type SyncReport, type SyncStatus, TOOLBOX_JSON_FILENAME, TOOL_RISK_MAP, TaskConfigManager, type TaskEventListener, TaskExecutionEngine, type TaskExecutor, TaskLogManager, type UnmanagedAdoption, type UnmanagedAmbiguous, type UnmanagedDetection, type UnmanagedIntegration, type UserRepoConfig, WORKSPACES_SUBDIR, WORKSPACE_CONTENT_STATE_FILENAME, WORKSPACE_MANIFEST_RELPATH, type WorkspaceContentEntryResult, type WorkspaceContentPlan, type WorkspaceContentReconcileResult, type WorkspaceContentState, WorkspaceContentStateStore, type WorkspaceContentStatus, WorkspaceCopilotContentReconciler, type WorkspaceCopilotManifest, type WorkspaceCopilotManifestV1, type WorkspaceCopilotManifestV2, WorkspaceExcludeStore, type WorkspaceManifestCatalogSource, type WorkspaceManifestGitSource, type WorkspaceManifestPlugin, type WorkspaceManifestPluginV2, type WorkspaceManifestRepository, type WorkspaceManifestSource, type WorkspaceMaterializedEntry, type WorkspacePlanConflict, WorkspaceProbe, allPersonalLinkKinds, repoSchema as anyRepoConfigSchema, assertSafeRepoId, bootstrapDefaults, bootstrapPhase5Placeholders, buildContentIdentity, buildCopilotCustomizationView, buildDefaultReposFile, buildDisabledIdentityMatcher, copilotDoctor, copilotPrompt, coveredTargetsOf, createCopilotAuthRequiredError, createCopilotNotInstalledError, createDefaultCopilotHostCapabilities, createImageTools, createJsonTools, createPluginCatalogService, createProjectTools, createReposStore, dedupeAdoptionsByPluginManifests, defaultRepoSchema as defaultRepoConfigSchema, deriveCopilotUserStatus, detectUnmanagedWorkspaceContent, ensureDefaultsInstalled, findPluginCoveringArtifact, findPluginMcpJson, findRepoHooksJson, generateDraftId, getAgentDraftsDir, getAllDefaultRepoConfigs, getCacheDir, getCredentialsConfigPath, getDefaultRepoConfig, getDeviceJsonPath, getDraftsDir, getExecutor, getHomeDir, getHomePlatform, getKnownWorkspacesPath, getMachineIdPath, getMigrationFailuresPath, getProfilesJsonPath, getRepoCacheDir, getRepoDir, getReposConfigPath, getReposDir, getScheduledTasksConfigPath, getScheduledTasksLogPath, getSchedulerLockPath, getSchedulerLogPath, getSchedulerPidPath, getServerProxyGlobalPath, getServicemeHome, getSkillDraftsDir, getToolboxJsonPath, getWorkspaceManifestPath, getWorkspaceManifestPluginSourceId, getWorkspaceManifestSources, getWorkspaceStateDir, getWorkspacesDir, hashWorkspaceDir, isCopilotAuthenticated, isDefaultRepo, isStreamingTaskExecutor, isUserRepo, listPluginCatalog, loadWorkspaceCopilotManifest, migrateLegacyServerProxyEnabled, migrateLegacyUserContent, migrateLegacyUserSkillContent, migrateToGlobal, moveFiles, narrowRepoConfig, parseAgentToolPermissions, parseContentIdentity, parseHooksJson, parseMcpJson, readDeclaredWorkspaceInstallations, readServerProxyGlobal, removeWorkspaceContentSelection, replaceWorkspaceContentSelection, reposFileSchema, resetUserHomeOverrides, resolveDraftDir, resolvePluginEntriesLenient, resolveTaskExecutionPayload, resolveWorkspaceContentPlan, setUserHomeOverrides, setWorkspacePluginArtifactsDisabled, supportsPersonalIntegrationKind, supportsPersonalLinkKind, toArtifactSummary, unmanagedDetectionSignature, unzipFile, upsertWorkspaceContentSelection, userRepoSchema as userRepoConfigSchema, validateReposFile, validateTaskPayload, writeServerProxyGlobal, writeWorkspaceCopilotManifest };