@theia/ai-core 1.73.0-next.9 → 1.73.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.
Files changed (155) hide show
  1. package/README.md +2 -2
  2. package/lib/browser/{agent-completion-notification-service.d.ts → agent-notification-service.d.ts} +12 -10
  3. package/lib/browser/agent-notification-service.d.ts.map +1 -0
  4. package/lib/browser/{agent-completion-notification-service.js → agent-notification-service.js} +37 -27
  5. package/lib/browser/agent-notification-service.js.map +1 -0
  6. package/lib/browser/ai-core-frontend-module.js +2 -2
  7. package/lib/browser/ai-core-frontend-module.js.map +1 -1
  8. package/lib/browser/frontend-language-model-alias-registry.js +3 -3
  9. package/lib/browser/frontend-prompt-customization-service.d.ts +230 -15
  10. package/lib/browser/frontend-prompt-customization-service.d.ts.map +1 -1
  11. package/lib/browser/frontend-prompt-customization-service.js +800 -47
  12. package/lib/browser/frontend-prompt-customization-service.js.map +1 -1
  13. package/lib/browser/frontend-prompt-customization-service.spec.js +362 -0
  14. package/lib/browser/frontend-prompt-customization-service.spec.js.map +1 -1
  15. package/lib/browser/frontend-variable-service.d.ts +2 -1
  16. package/lib/browser/frontend-variable-service.d.ts.map +1 -1
  17. package/lib/browser/frontend-variable-service.js +6 -1
  18. package/lib/browser/frontend-variable-service.js.map +1 -1
  19. package/lib/browser/index.d.ts +1 -1
  20. package/lib/browser/index.d.ts.map +1 -1
  21. package/lib/browser/index.js +1 -1
  22. package/lib/browser/index.js.map +1 -1
  23. package/lib/browser/os-notification-service.d.ts +10 -6
  24. package/lib/browser/os-notification-service.d.ts.map +1 -1
  25. package/lib/browser/os-notification-service.js +34 -20
  26. package/lib/browser/os-notification-service.js.map +1 -1
  27. package/lib/browser/prompt-variable-contribution.spec.js +2 -1
  28. package/lib/browser/prompt-variable-contribution.spec.js.map +1 -1
  29. package/lib/browser/skill-service.d.ts +6 -1
  30. package/lib/browser/skill-service.d.ts.map +1 -1
  31. package/lib/browser/skill-service.js +47 -18
  32. package/lib/browser/skill-service.js.map +1 -1
  33. package/lib/browser/skill-service.spec.js +153 -31
  34. package/lib/browser/skill-service.spec.js.map +1 -1
  35. package/lib/browser/token-usage-frontend-service-impl.d.ts +2 -0
  36. package/lib/browser/token-usage-frontend-service-impl.d.ts.map +1 -1
  37. package/lib/browser/token-usage-frontend-service-impl.js +6 -1
  38. package/lib/browser/token-usage-frontend-service-impl.js.map +1 -1
  39. package/lib/browser/window-blink-service.d.ts +2 -0
  40. package/lib/browser/window-blink-service.d.ts.map +1 -1
  41. package/lib/browser/window-blink-service.js +8 -3
  42. package/lib/browser/window-blink-service.js.map +1 -1
  43. package/lib/common/agent-preferences.d.ts.map +1 -1
  44. package/lib/common/agent-preferences.js +12 -2
  45. package/lib/common/agent-preferences.js.map +1 -1
  46. package/lib/common/ai-core-preferences.d.ts.map +1 -1
  47. package/lib/common/ai-core-preferences.js +4 -2
  48. package/lib/common/ai-core-preferences.js.map +1 -1
  49. package/lib/common/capability-variable-contribution.spec.js +2 -1
  50. package/lib/common/capability-variable-contribution.spec.js.map +1 -1
  51. package/lib/common/frontmatter.d.ts +33 -0
  52. package/lib/common/frontmatter.d.ts.map +1 -0
  53. package/lib/common/frontmatter.js +80 -0
  54. package/lib/common/frontmatter.js.map +1 -0
  55. package/lib/common/frontmatter.spec.d.ts +2 -0
  56. package/lib/common/frontmatter.spec.d.ts.map +1 -0
  57. package/lib/common/frontmatter.spec.js +73 -0
  58. package/lib/common/frontmatter.spec.js.map +1 -0
  59. package/lib/common/index.d.ts +1 -0
  60. package/lib/common/index.d.ts.map +1 -1
  61. package/lib/common/index.js +1 -0
  62. package/lib/common/index.js.map +1 -1
  63. package/lib/common/language-model-service.js +1 -1
  64. package/lib/common/language-model-service.js.map +1 -1
  65. package/lib/common/language-model-service.spec.d.ts +2 -0
  66. package/lib/common/language-model-service.spec.d.ts.map +1 -0
  67. package/lib/common/language-model-service.spec.js +62 -0
  68. package/lib/common/language-model-service.spec.js.map +1 -0
  69. package/lib/common/language-model.d.ts +64 -2
  70. package/lib/common/language-model.d.ts.map +1 -1
  71. package/lib/common/language-model.js +8 -2
  72. package/lib/common/language-model.js.map +1 -1
  73. package/lib/common/notification-types.d.ts +7 -0
  74. package/lib/common/notification-types.d.ts.map +1 -1
  75. package/lib/common/notification-types.js +7 -1
  76. package/lib/common/notification-types.js.map +1 -1
  77. package/lib/common/prompt-service-util.d.ts +22 -1
  78. package/lib/common/prompt-service-util.d.ts.map +1 -1
  79. package/lib/common/prompt-service-util.js +24 -2
  80. package/lib/common/prompt-service-util.js.map +1 -1
  81. package/lib/common/prompt-service-util.spec.d.ts +2 -0
  82. package/lib/common/prompt-service-util.spec.d.ts.map +1 -0
  83. package/lib/common/prompt-service-util.spec.js +54 -0
  84. package/lib/common/prompt-service-util.spec.js.map +1 -0
  85. package/lib/common/prompt-service.d.ts +82 -8
  86. package/lib/common/prompt-service.d.ts.map +1 -1
  87. package/lib/common/prompt-service.js +36 -4
  88. package/lib/common/prompt-service.js.map +1 -1
  89. package/lib/common/prompt-service.spec.js +49 -2
  90. package/lib/common/prompt-service.spec.js.map +1 -1
  91. package/lib/common/settings-service.d.ts +5 -0
  92. package/lib/common/settings-service.d.ts.map +1 -1
  93. package/lib/common/skill.d.ts +17 -4
  94. package/lib/common/skill.d.ts.map +1 -1
  95. package/lib/common/skill.js +22 -35
  96. package/lib/common/skill.js.map +1 -1
  97. package/lib/common/tool-invocation-registry.d.ts +7 -0
  98. package/lib/common/tool-invocation-registry.d.ts.map +1 -1
  99. package/lib/common/tool-invocation-registry.js +5 -0
  100. package/lib/common/tool-invocation-registry.js.map +1 -1
  101. package/lib/common/variable-service.d.ts +2 -2
  102. package/lib/common/variable-service.d.ts.map +1 -1
  103. package/lib/common/variable-service.js +7 -4
  104. package/lib/common/variable-service.js.map +1 -1
  105. package/lib/common/variable-service.spec.js +2 -1
  106. package/lib/common/variable-service.spec.js.map +1 -1
  107. package/lib/node/backend-language-model-registry.d.ts.map +1 -1
  108. package/lib/node/backend-language-model-registry.js +1 -0
  109. package/lib/node/backend-language-model-registry.js.map +1 -1
  110. package/lib/node/backend-language-model-registry.spec.d.ts +2 -0
  111. package/lib/node/backend-language-model-registry.spec.d.ts.map +1 -0
  112. package/lib/node/backend-language-model-registry.spec.js +48 -0
  113. package/lib/node/backend-language-model-registry.spec.js.map +1 -0
  114. package/lib/node/token-usage-service-impl.d.ts +2 -0
  115. package/lib/node/token-usage-service-impl.d.ts.map +1 -1
  116. package/lib/node/token-usage-service-impl.js +7 -1
  117. package/lib/node/token-usage-service-impl.js.map +1 -1
  118. package/package.json +12 -12
  119. package/src/browser/{agent-completion-notification-service.ts → agent-notification-service.ts} +52 -27
  120. package/src/browser/ai-core-frontend-module.ts +2 -2
  121. package/src/browser/frontend-language-model-alias-registry.ts +3 -3
  122. package/src/browser/frontend-prompt-customization-service.spec.ts +448 -1
  123. package/src/browser/frontend-prompt-customization-service.ts +931 -60
  124. package/src/browser/frontend-variable-service.ts +5 -3
  125. package/src/browser/index.ts +1 -1
  126. package/src/browser/os-notification-service.ts +39 -24
  127. package/src/browser/prompt-variable-contribution.spec.ts +2 -1
  128. package/src/browser/skill-service.spec.ts +191 -38
  129. package/src/browser/skill-service.ts +61 -33
  130. package/src/browser/token-usage-frontend-service-impl.ts +6 -3
  131. package/src/browser/window-blink-service.ts +7 -4
  132. package/src/common/agent-preferences.ts +13 -2
  133. package/src/common/ai-core-preferences.ts +4 -2
  134. package/src/common/capability-variable-contribution.spec.ts +2 -1
  135. package/src/common/frontmatter.spec.ts +82 -0
  136. package/src/common/frontmatter.ts +99 -0
  137. package/src/common/index.ts +1 -0
  138. package/src/common/language-model-service.spec.ts +70 -0
  139. package/src/common/language-model-service.ts +1 -1
  140. package/src/common/language-model.ts +72 -3
  141. package/src/common/notification-types.ts +10 -0
  142. package/src/common/prompt-service-util.spec.ts +60 -0
  143. package/src/common/prompt-service-util.ts +31 -1
  144. package/src/common/prompt-service.spec.ts +59 -2
  145. package/src/common/prompt-service.ts +115 -8
  146. package/src/common/settings-service.ts +5 -0
  147. package/src/common/skill.ts +37 -39
  148. package/src/common/tool-invocation-registry.ts +13 -0
  149. package/src/common/variable-service.spec.ts +2 -2
  150. package/src/common/variable-service.ts +3 -1
  151. package/src/node/backend-language-model-registry.spec.ts +52 -0
  152. package/src/node/backend-language-model-registry.ts +1 -0
  153. package/src/node/token-usage-service-impl.ts +7 -2
  154. package/lib/browser/agent-completion-notification-service.d.ts.map +0 -1
  155. package/lib/browser/agent-completion-notification-service.js.map +0 -1
@@ -1,12 +1,37 @@
1
- import { DisposableCollection, URI, Event, Emitter } from '@theia/core';
1
+ import { DisposableCollection, URI, Event, Emitter, ILogger } from '@theia/core';
2
2
  import { OpenerService } from '@theia/core/lib/browser';
3
- import { PromptFragmentCustomizationService, CustomAgentDescription, CustomizedPromptFragment, CommandPromptFragmentMetadata } from '../common';
3
+ import { PromptFragmentCustomizationService, CustomAgentDescription, CustomAgentPromptVariant, CustomizedPromptFragment, CommandPromptFragmentMetadata, CustomAgentsLocation } from '../common';
4
4
  import { ConfigurableInMemoryResources } from '../common/configurable-in-memory-resources';
5
5
  import { FileService } from '@theia/filesystem/lib/browser/file-service';
6
6
  import { AICorePreferences } from '../common/ai-core-preferences';
7
7
  import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
8
8
  import { ParsedTemplate } from './prompttemplate-parser';
9
9
  import { WorkspaceService } from '@theia/workspace/lib/browser';
10
+ /**
11
+ * Subdirectory (relative to a prompt-templates scope) holding one folder per custom agent.
12
+ */
13
+ export declare const CUSTOM_AGENTS_DIRECTORY = "agents";
14
+ /**
15
+ * Filename of the per-agent definition file (frontmatter + prompt body) inside `agents/<id>/`.
16
+ */
17
+ export declare const CUSTOM_AGENT_FILE_NAME = "agent.md";
18
+ /**
19
+ * Filename stem (without extension) reserved for the customization of a custom agent's
20
+ * default prompt. Lives at `<scope>/agents/<id>/prompt.prompttemplate` and maps to
21
+ * fragment id `<agent-name>_prompt`. Excluded from the variant loader so it doesn't double
22
+ * as an extra variant.
23
+ */
24
+ export declare const CUSTOM_AGENT_DEFAULT_PROMPT_STEM = "prompt";
25
+ /**
26
+ * Workspace-relative parent folders scanned for custom agents, independent of the configurable
27
+ * prompt-templates directories. Scanning both folders mirrors the skills convention introduced
28
+ * in #17553, but the duplicate-id precedence is intentionally inverted: here `.agents` is listed
29
+ * first, so it becomes the default location for newly created agents and wins over `.prompts`,
30
+ * whereas for skills `.prompts` wins over `.agents` (see `combineSkillDirectories` in
31
+ * `skill-service.ts`). `.prompts` is retained for backward compatibility with agents authored
32
+ * before the move to `.agents`.
33
+ */
34
+ export declare const CUSTOM_AGENT_WORKSPACE_DIRECTORIES: string[];
10
35
  export declare enum CustomizationSource {
11
36
  CUSTOMIZED = 1,
12
37
  FOLDER = 2,
@@ -23,6 +48,12 @@ export interface PromptFragmentCustomizationProperties {
23
48
  filePaths?: string[];
24
49
  /** Array of file extensions to consider as template files */
25
50
  extensions?: string[];
51
+ /**
52
+ * Absolute parent directories scanned for custom agents (their `agents/` and legacy
53
+ * `customAgents.yml`), independent of {@link directoryPaths}. Resolved from
54
+ * {@link CUSTOM_AGENT_WORKSPACE_DIRECTORIES} against the workspace roots.
55
+ */
56
+ agentDirectoryPaths?: string[];
26
57
  }
27
58
  /**
28
59
  * Internal representation of a fragment entry in the customization service
@@ -62,6 +93,7 @@ export declare class DefaultPromptFragmentCustomizationService implements Prompt
62
93
  protected readonly openerService: OpenerService;
63
94
  protected readonly inMemoryResources: ConfigurableInMemoryResources;
64
95
  protected readonly workspaceService: WorkspaceService;
96
+ protected readonly logger: ILogger;
65
97
  /** Stores URI strings of template files from directories currently being monitored for changes. */
66
98
  protected trackedTemplateURIs: Set<string>;
67
99
  /** Contains the currently active customization, mapped by prompt fragment ID. */
@@ -70,17 +102,37 @@ export declare class DefaultPromptFragmentCustomizationService implements Prompt
70
102
  protected allCustomizations: Map<string, PromptFragmentCustomization>;
71
103
  /** Stores additional directory paths for loading template files. */
72
104
  protected additionalTemplateDirs: Set<string>;
105
+ /**
106
+ * Built-in parent directories scanned for custom agents (`.agents`, `.prompts`), independent of
107
+ * {@link additionalTemplateDirs}. Insertion order is preserved so the first entry (`.agents`)
108
+ * acts as the default location for newly created agents.
109
+ */
110
+ protected customAgentDirs: Set<string>;
73
111
  /** Contains file extensions that identify prompt template files. */
74
112
  protected templateExtensions: Set<string>;
75
113
  /** Stores specific file paths, provided by the settings, that should be treated as templates. */
76
114
  protected workspaceTemplateFiles: Set<string>;
77
115
  /** Maps URI strings to WatchedFileInfo objects for individually watched template files. */
78
116
  protected watchedFiles: Map<string, WatchedFileInfo>;
117
+ /**
118
+ * For each known custom-agent prompt fragment id (i.e. `<name>_prompt`), the URI of the
119
+ * agent's folder (`<scope>/agents/<id>/`). Populated as agents are loaded and used to
120
+ * route customization writes/reads into the agent folder.
121
+ */
122
+ protected customAgentFolderByFragmentId: Map<string, URI>;
79
123
  /** Collection of disposable resources for cleanup when the service updates or is disposed. */
80
124
  protected toDispose: DisposableCollection;
81
125
  protected readonly onDidChangePromptFragmentCustomizationEmitter: Emitter<string[]>;
82
126
  readonly onDidChangePromptFragmentCustomization: Event<string[]>;
83
127
  protected readonly onDidChangeCustomAgentsEmitter: Emitter<void>;
128
+ /**
129
+ * In-flight migration promise used to serialize {@link migrateCustomAgentsYaml} calls.
130
+ * Multiple sources (initial onStart, onDidChangeCustomAgents events from async template-dir
131
+ * population) can request migration before the first run finishes; without serialization
132
+ * they race on the same `customAgents.yml`, causing one rename to succeed and the others
133
+ * to fail with ENOENT while concurrently moving fragment files clobber each other.
134
+ */
135
+ protected migrationInFlight: Promise<MigrationReport[]> | undefined;
84
136
  readonly onDidChangeCustomAgents: Event<void>;
85
137
  protected init(): void;
86
138
  /**
@@ -160,6 +212,39 @@ export declare class DefaultPromptFragmentCustomizationService implements Prompt
160
212
  * @param customizationSource Source type of the customization
161
213
  */
162
214
  protected processTemplateDirectory(activeCustomizationsCopy: Map<string, PromptFragmentCustomization>, trackedTemplateURIsCopy: Set<string>, allCustomizationsCopy: Map<string, PromptFragmentCustomization>, dirURI: URI, priority: number, customizationSource: CustomizationSource): Promise<void>;
215
+ /**
216
+ * Processes a built-in custom-agent scope (`.agents`/`.prompts`): registers the prompt fragments
217
+ * inside its `agents/<id>/` folders and watches the scope for changes. Unlike
218
+ * {@link processTemplateDirectory} it does not scan loose `*.prompttemplate` files in the scope
219
+ * root, so `.agents` does not become a general prompt-template directory.
220
+ * @param dirURI URI of the agent scope directory
221
+ * @param priority Priority level for customizations in this scope
222
+ * @param customizationSource Source type of the customization
223
+ */
224
+ protected processCustomAgentScope(activeCustomizationsCopy: Map<string, PromptFragmentCustomization>, trackedTemplateURIsCopy: Set<string>, allCustomizationsCopy: Map<string, PromptFragmentCustomization>, dirURI: URI, priority: number, customizationSource: CustomizationSource): Promise<void>;
225
+ /**
226
+ * Scan `<dirURI>/agents/<id>/*.prompttemplate` files and register each as a customized
227
+ * prompt fragment so they appear in the Prompt Fragments configuration view and so
228
+ * `editPromptFragmentCustomization` / `removePromptFragmentCustomization` can find their
229
+ * source URIs.
230
+ *
231
+ * The reserved filename `prompt.prompttemplate` maps to the agent's default-variant
232
+ * fragment id (`<agent-name>_prompt` read from the sibling `agent.md`'s frontmatter).
233
+ * Any other `.prompttemplate` file uses its filename stem as the fragment id (matching
234
+ * how variants are registered via {@link readCustomAgentPromptVariants}).
235
+ */
236
+ protected processCustomAgentFolders(activeCustomizationsCopy: Map<string, PromptFragmentCustomization>, trackedTemplateURIsCopy: Set<string>, allCustomizationsCopy: Map<string, PromptFragmentCustomization>, scopeDir: URI, priority: number, customizationSource: CustomizationSource): Promise<void>;
237
+ /**
238
+ * Return the parent URI when `resource` lives in `<scopeDirURI>/agents/<id>/`; otherwise
239
+ * undefined. Used to decide whether a newly-added file should be processed as a
240
+ * custom-agent prompt customization.
241
+ */
242
+ protected matchesCustomAgentFolder(resource: URI, scopeDirURI: URI): URI | undefined;
243
+ /**
244
+ * Read `<agentFolderURI>/agent.md`'s frontmatter and return the implied default
245
+ * fragment id (`<name>_prompt`). Returns undefined if the file is missing or invalid.
246
+ */
247
+ protected readCustomAgentDefaultFragmentId(agentFolderURI: URI): Promise<string | undefined>;
163
248
  /**
164
249
  * Processes an existing directory for template files
165
250
  * @param activeCustomizationsCopy Map to store active customizations
@@ -170,13 +255,23 @@ export declare class DefaultPromptFragmentCustomizationService implements Prompt
170
255
  * @param customizationSource Source type of the customization
171
256
  */
172
257
  protected processExistingTemplateDirectory(activeCustomizationsCopy: Map<string, PromptFragmentCustomization>, trackedTemplateURIsCopy: Set<string>, allCustomizationsCopy: Map<string, PromptFragmentCustomization>, dirURI: URI, priority: number, customizationSource: CustomizationSource): Promise<void>;
258
+ /**
259
+ * Whether a changed resource path affects custom agents, i.e. it is (or is inside) an `agents/`
260
+ * directory, or a legacy `customAgents.yml`. Matches the `agents` directory itself (e.g. when the
261
+ * whole folder is deleted), not only files within it, so removing `agents/` triggers a reload.
262
+ * @param path The string form of the changed resource URI
263
+ */
264
+ protected isCustomAgentChange(path: string): boolean;
173
265
  /**
174
266
  * Sets up file watching for a template directory (works for both existing and non-existing directories)
175
267
  * @param dirURI URI of the directory to watch
176
268
  * @param priority Priority level for customizations in this directory
177
269
  * @param customizationSource Source type of the customization
270
+ * @param agentsOnly When true, only `agents/<id>/` prompt files are registered on add; loose
271
+ * `*.prompttemplate` files in the scope root are ignored. Used for built-in agent scopes
272
+ * (`.agents`) that must not become general prompt-template directories.
178
273
  */
179
- protected setupDirectoryWatcher(dirURI: URI, priority: number, customizationSource: CustomizationSource): void;
274
+ protected setupDirectoryWatcher(dirURI: URI, priority: number, customizationSource: CustomizationSource, agentsOnly?: boolean): void;
180
275
  /**
181
276
  * Checks if the given file extension is registered as a prompt template extension
182
277
  * @param extension The file extension including the leading dot (e.g., '.prompttemplate')
@@ -209,6 +304,22 @@ export declare class DefaultPromptFragmentCustomizationService implements Prompt
209
304
  * @returns URI of the templates directory
210
305
  */
211
306
  protected getTemplatesDirectoryURI(): Promise<URI>;
307
+ /**
308
+ * The additional (workspace) template directories as URIs, excluding any that resolves to the
309
+ * same location as `excluding` (typically the global templates directory). A user can point
310
+ * both the `promptTemplates` preference and a workspace template directory at the same path;
311
+ * processing that scope twice would hide priority-1 customizations behind priority-2 copies
312
+ * (see {@link update}) or list the same scope twice in the agent-location picker.
313
+ */
314
+ protected getDedupedAdditionalScopes(excluding: URI): URI[];
315
+ /**
316
+ * The deduplicated parent directories scanned for custom agents, in precedence order:
317
+ * the built-in {@link customAgentDirs} (`.agents` then `.prompts`) first, so `.agents` is both
318
+ * the discovery winner and the default creation target; then any configured
319
+ * {@link additionalTemplateDirs} that may also hold agents; then the global templates directory.
320
+ * Independent of the prompt-templates preference, mirroring how skills resolve their folders.
321
+ */
322
+ protected getCustomAgentScopes(): Promise<URI[]>;
212
323
  /**
213
324
  * Gets the URI for a specific template file
214
325
  * @param fragmentId The fragment ID
@@ -262,27 +373,131 @@ export declare class DefaultPromptFragmentCustomizationService implements Prompt
262
373
  getPromptFragmentIDFromResource(resourceId: unknown): string | undefined;
263
374
  getCustomAgents(): Promise<CustomAgentDescription[]>;
264
375
  /**
265
- * Load custom agents from a specific directory
266
- * @param directoryURI The URI of the directory to load from
267
- * @param agentsById Map to store the loaded agents by ID
376
+ * Load custom agents from `<parentDirectory>/agents/<id>/agent.md`. Each immediate
377
+ * subdirectory under `agents/` defines one custom agent: the folder name is the
378
+ * agent id (single source of truth), the file's YAML frontmatter holds the metadata,
379
+ * and the body is the prompt text. Folders without a readable `agent.md` are skipped.
380
+ */
381
+ protected loadCustomAgentsFromAgentsDirectory(parentDirectory: URI, agentsById: Map<string, CustomAgentDescription>): Promise<void>;
382
+ protected readCustomAgentFile(agentFolderURI: URI): Promise<CustomAgentDescription | undefined>;
383
+ /**
384
+ * Remove `<scopeDir>/agents/<id>/` directories that contain no `agent.md`. They are usually
385
+ * the leftover side effect of a previous migration whose `agent.md` write failed after the
386
+ * parent directory had already been created. Removing them lets the next run re-attempt.
387
+ */
388
+ protected cleanupEmptyAgentFolders(scopeDir: URI): Promise<void>;
389
+ /**
390
+ * List `.prompttemplate` files directly inside the given scope directory (one level only).
391
+ * Returns each file's URI along with its filename stem to enable cheap prefix matching
392
+ * during migration.
393
+ */
394
+ protected listScopeRootPromptTemplates(scopeDir: URI): Promise<Array<{
395
+ uri: URI;
396
+ stem: string;
397
+ }>>;
398
+ /**
399
+ * Scan an agent folder for sibling `.prompttemplate` files; each becomes a variant
400
+ * of the agent's prompt. Variant id = filename stem (e.g. `concise.prompttemplate`
401
+ * yields a variant with id `concise`). Files inside subdirectories are ignored.
402
+ *
403
+ * The reserved filename `prompt.prompttemplate` is excluded: it represents the
404
+ * default-variant customization (overrides `agent.md`'s body), not an extra variant,
405
+ * and is registered by the prompt-fragment customization scan instead.
406
+ */
407
+ protected readCustomAgentPromptVariants(agentFolderURI: URI): Promise<CustomAgentPromptVariant[]>;
408
+ /**
409
+ * @deprecated Reads legacy `customAgents.yml` files. New agents should live under
410
+ * `<scope>/agents/<id>/agent.md`. Kept as a fallback until existing files have been
411
+ * auto-migrated; loader logs a one-time warning per scope when it finds one.
268
412
  */
269
413
  protected loadCustomAgentsFromDirectory(directoryURI: URI, agentsById: Map<string, CustomAgentDescription>): Promise<void>;
414
+ private readonly warnedLegacyYamlUris;
415
+ protected warnOnceLegacyYaml(uri: URI): void;
416
+ /**
417
+ * Returns all locations of existing customAgents.yml files and `agents/` directories,
418
+ * plus the canonical locations where new agents would be created (one per scope). Scopes are
419
+ * returned in precedence order, so the first `agents-dir` entry is the default creation target.
420
+ */
421
+ getCustomAgentsLocations(): Promise<CustomAgentsLocation[]>;
422
+ /**
423
+ * Creates `<parentDirectory>/agents/<id>/agent.md` from a `CustomAgentDescription` and opens it.
424
+ * The agent id determines the folder name; the prompt body is written verbatim under the YAML frontmatter.
425
+ */
426
+ createCustomAgentFile(parentDirectory: URI, agent: CustomAgentDescription): Promise<URI>;
270
427
  /**
271
- * Returns all locations of existing customAgents.yml files and potential locations where
272
- * new customAgents.yml files could be created.
428
+ * Parse a `customAgents.yml` document, preserving newlines in folded-block-scalar prompts.
429
+ *
430
+ * `js-yaml` folds the single newlines of a folded scalar (`>` / `>-`) into spaces, which merges
431
+ * a markdown heading (`## Task`) into the paragraph below it. Markdown is newline-sensitive, so
432
+ * we re-interpret folded `prompt:` scalars as literal (`|`) before parsing. Only the block-scalar
433
+ * header is rewritten; quoted, plain and already-literal values are left untouched.
273
434
  *
274
- * @returns An array of objects containing the URI and whether the file exists
435
+ * Known limitation: prompts stored as a plain or quoted multi-line scalar (rare) still fold.
275
436
  */
276
- getCustomAgentsLocations(): Promise<{
277
- uri: URI;
278
- exists: boolean;
279
- }[]>;
437
+ protected parseCustomAgentsYaml(content: string): unknown;
438
+ /**
439
+ * Rewrite a folded `prompt:` block-scalar header (`>`, `>-`, `>+`, `>2-`, ...) to its literal
440
+ * equivalent (`|`...). The lookahead ensures only a block-scalar header is matched (indentation
441
+ * and chomping indicators plus an optional trailing comment), so plain/quoted prompt values and
442
+ * any `>` inside the prompt body are never touched.
443
+ */
444
+ protected unfoldPromptBlockScalars(content: string): string;
445
+ /**
446
+ * Returns `true` if migration would write anything: a scope still holds a legacy
447
+ * `customAgents.yml`, or a previously migrated scope has `agent.md` files that can be corrected
448
+ * (see {@link computeScopeCorrections}). Read-only; used to decide whether to prompt the user.
449
+ */
450
+ hasPendingCustomAgentMigration(): Promise<boolean>;
280
451
  /**
281
- * Opens an existing customAgents.yml file at the given URI, or creates a new one if it doesn't exist.
452
+ * Auto-migrate every legacy `customAgents.yml` reachable from the configured scopes to the new
453
+ * `agents/<id>/agent.md` layout. The original content is never deleted:
454
+ * - on full success the YAML is renamed to `customAgents.yml.bak`, replacing any previous backup;
455
+ * - on partial failure the YAML is renamed to `customAgents.yml.bak` only if no backup exists yet;
456
+ * if one already exists the YAML is left in place, so the loader keeps serving it and the next
457
+ * startup retries the migration.
282
458
  *
283
- * @param uri The URI of the customAgents.yml file to open or create
459
+ * Idempotent: rerunning never overwrites an already-migrated agent file.
460
+ */
461
+ migrateCustomAgentsYaml(): Promise<MigrationReport[]>;
462
+ protected doMigrateCustomAgentsYaml(): Promise<MigrationReport[]>;
463
+ protected migrateSingleScope(scopeDir: URI): Promise<MigrationReport | undefined>;
464
+ /**
465
+ * Compute the `agent.md` rewrites needed to recover headings folded by an earlier (v1.73.0)
466
+ * migration. The backup (`customAgents.yml.bak`) is the source that migration used: parsing it
467
+ * the old (folded) way reproduces the exact bytes it wrote, and parsing it the new (literal) way
468
+ * produces the corrected content. Only files still byte-identical to the buggy output are eligible,
469
+ * so files the user edited (and already-correct files) are left untouched. Read-only; used both to
470
+ * detect pending work and to perform the rewrite.
471
+ */
472
+ protected computeScopeCorrections(scopeDir: URI): Promise<Array<{
473
+ uri: URI;
474
+ content: string;
475
+ }>>;
476
+ /**
477
+ * @deprecated Use {@link createCustomAgentFile} to author agents in the new
478
+ * `<scope>/agents/<id>/agent.md` layout. Retained so existing UI affordances keep
479
+ * working until they are migrated.
284
480
  */
285
481
  openCustomAgentYaml(uri: URI): Promise<void>;
286
482
  }
483
+ /**
484
+ * Outcome of attempting to migrate one scope's `customAgents.yml`.
485
+ */
486
+ export interface MigrationReport {
487
+ scope: URI;
488
+ yamlURI: URI;
489
+ /** Number of agents written to `agents/<id>/agent.md`. */
490
+ migrated: number;
491
+ /** Number of agents skipped because an `agent.md` already existed (idempotency). */
492
+ alreadyPresent: number;
493
+ /** Number of agents whose new file failed to write. */
494
+ failed: number;
495
+ /** Whether the original YAML was renamed to `customAgents.yml.bak` during this run. */
496
+ yamlBackedUp: boolean;
497
+ /** Number of scope-root prompt customization files (`<name>_prompt.prompttemplate`) folded into agent.md and deleted. */
498
+ promptOverridesMigrated: number;
499
+ /** Number of already-migrated `agent.md` files rewritten to recover folded headings. */
500
+ corrected: number;
501
+ }
287
502
  export {};
288
503
  //# sourceMappingURL=frontend-prompt-customization-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frontend-prompt-customization-service.d.ts","sourceRoot":"","sources":["../../src/browser/frontend-prompt-customization-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontend-prompt-customization-service.d.ts","sourceRoot":"","sources":["../../src/browser/frontend-prompt-customization-service.ts"],"names":[],"mappings":"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"}