gmc-openspec 1.1.0 → 1.4.2

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 (111) hide show
  1. package/README.md +2 -2
  2. package/bin/openspec.js +3 -1
  3. package/dist/cli/index.d.ts +4 -1
  4. package/dist/cli/index.js +36 -2
  5. package/dist/commands/config.js +4 -4
  6. package/dist/commands/context-store.d.ts +3 -0
  7. package/dist/commands/context-store.js +475 -0
  8. package/dist/commands/initiative.d.ts +13 -0
  9. package/dist/commands/initiative.js +318 -0
  10. package/dist/commands/workflow/index.d.ts +2 -0
  11. package/dist/commands/workflow/index.js +1 -0
  12. package/dist/commands/workflow/initiative-link.d.ts +24 -0
  13. package/dist/commands/workflow/initiative-link.js +47 -0
  14. package/dist/commands/workflow/instructions.js +10 -2
  15. package/dist/commands/workflow/new-change.d.ts +4 -0
  16. package/dist/commands/workflow/new-change.js +72 -23
  17. package/dist/commands/workflow/set-change.d.ts +13 -0
  18. package/dist/commands/workflow/set-change.js +87 -0
  19. package/dist/commands/workflow/shared.d.ts +2 -0
  20. package/dist/commands/workflow/status.js +3 -0
  21. package/dist/commands/workspace/context-status.d.ts +4 -0
  22. package/dist/commands/workspace/context-status.js +59 -0
  23. package/dist/commands/workspace/open-target-selection.d.ts +13 -0
  24. package/dist/commands/workspace/open-target-selection.js +146 -0
  25. package/dist/commands/workspace/open-view.d.ts +62 -0
  26. package/dist/commands/workspace/open-view.js +249 -0
  27. package/dist/commands/workspace/open.d.ts +16 -8
  28. package/dist/commands/workspace/open.js +40 -14
  29. package/dist/commands/workspace/opener-selection.d.ts +11 -0
  30. package/dist/commands/workspace/opener-selection.js +98 -0
  31. package/dist/commands/workspace/operations.d.ts +14 -8
  32. package/dist/commands/workspace/operations.js +228 -160
  33. package/dist/commands/workspace/prompt-theme.d.ts +29 -0
  34. package/dist/commands/workspace/prompt-theme.js +24 -0
  35. package/dist/commands/workspace/registration.d.ts +13 -0
  36. package/dist/commands/workspace/registration.js +84 -0
  37. package/dist/commands/workspace/selection.d.ts +3 -0
  38. package/dist/commands/workspace/selection.js +42 -40
  39. package/dist/commands/workspace/setup-prompts.d.ts +13 -0
  40. package/dist/commands/workspace/setup-prompts.js +121 -0
  41. package/dist/commands/workspace/types.d.ts +15 -0
  42. package/dist/commands/workspace.js +59 -340
  43. package/dist/core/artifact-graph/index.d.ts +2 -1
  44. package/dist/core/artifact-graph/instruction-loader.d.ts +10 -23
  45. package/dist/core/artifact-graph/instruction-loader.js +28 -89
  46. package/dist/core/artifact-graph/types.d.ts +0 -7
  47. package/dist/core/artifact-graph/types.js +0 -19
  48. package/dist/core/change-metadata/index.d.ts +2 -0
  49. package/dist/core/change-metadata/index.js +2 -0
  50. package/dist/core/change-metadata/schema.d.ts +18 -0
  51. package/dist/core/change-metadata/schema.js +28 -0
  52. package/dist/core/change-status-policy.d.ts +50 -0
  53. package/dist/core/change-status-policy.js +70 -0
  54. package/dist/core/collections/index.d.ts +3 -0
  55. package/dist/core/collections/index.js +3 -0
  56. package/dist/core/collections/initiatives/collection.d.ts +4 -0
  57. package/dist/core/collections/initiatives/collection.js +17 -0
  58. package/dist/core/collections/initiatives/index.d.ts +6 -0
  59. package/dist/core/collections/initiatives/index.js +6 -0
  60. package/dist/core/collections/initiatives/operations.d.ts +49 -0
  61. package/dist/core/collections/initiatives/operations.js +175 -0
  62. package/dist/core/collections/initiatives/resolution.d.ts +87 -0
  63. package/dist/core/collections/initiatives/resolution.js +374 -0
  64. package/dist/core/collections/initiatives/schema.d.ts +41 -0
  65. package/dist/core/collections/initiatives/schema.js +134 -0
  66. package/dist/core/collections/initiatives/templates.d.ts +12 -0
  67. package/dist/core/collections/initiatives/templates.js +90 -0
  68. package/dist/core/collections/runtime.d.ts +46 -0
  69. package/dist/core/collections/runtime.js +194 -0
  70. package/dist/core/completions/command-registry.d.ts +1 -5
  71. package/dist/core/completions/command-registry.js +475 -70
  72. package/dist/core/completions/shared-flags.d.ts +12 -0
  73. package/dist/core/completions/shared-flags.js +28 -0
  74. package/dist/core/config.js +2 -1
  75. package/dist/core/context-store/binding.d.ts +53 -0
  76. package/dist/core/context-store/binding.js +197 -0
  77. package/dist/core/context-store/errors.d.ts +20 -0
  78. package/dist/core/context-store/errors.js +22 -0
  79. package/dist/core/context-store/foundation.d.ts +55 -0
  80. package/dist/core/context-store/foundation.js +321 -0
  81. package/dist/core/context-store/index.d.ts +6 -0
  82. package/dist/core/context-store/index.js +6 -0
  83. package/dist/core/context-store/operations.d.ts +85 -0
  84. package/dist/core/context-store/operations.js +528 -0
  85. package/dist/core/context-store/registry.d.ts +45 -0
  86. package/dist/core/context-store/registry.js +229 -0
  87. package/dist/core/index.d.ts +2 -0
  88. package/dist/core/index.js +2 -0
  89. package/dist/core/jira/templates.js +14 -5
  90. package/dist/core/planning-home.js +5 -21
  91. package/dist/core/validation/validator.d.ts +11 -0
  92. package/dist/core/validation/validator.js +19 -2
  93. package/dist/core/workspace/foundation.d.ts +28 -48
  94. package/dist/core/workspace/foundation.js +130 -214
  95. package/dist/core/workspace/index.d.ts +2 -0
  96. package/dist/core/workspace/index.js +2 -0
  97. package/dist/core/workspace/legacy-state.d.ts +28 -0
  98. package/dist/core/workspace/legacy-state.js +200 -0
  99. package/dist/core/workspace/open-surface.d.ts +29 -8
  100. package/dist/core/workspace/open-surface.js +122 -44
  101. package/dist/core/workspace/openers.js +11 -6
  102. package/dist/core/workspace/registry.d.ts +24 -0
  103. package/dist/core/workspace/registry.js +146 -0
  104. package/dist/core/workspace/skills.d.ts +4 -2
  105. package/dist/core/workspace/skills.js +2 -2
  106. package/dist/core/workspace/state-io.d.ts +10 -0
  107. package/dist/core/workspace/state-io.js +119 -0
  108. package/dist/utils/change-metadata.d.ts +5 -2
  109. package/dist/utils/change-metadata.js +6 -12
  110. package/dist/utils/change-utils.d.ts +2 -2
  111. package/package.json +1 -1
@@ -0,0 +1,321 @@
1
+ import * as nodeFs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
4
+ import { z } from 'zod';
5
+ import { getGlobalDataDir } from '../global-config.js';
6
+ import { FileSystemUtils } from '../../utils/file-system.js';
7
+ import { ContextStoreError } from './errors.js';
8
+ const fs = nodeFs.promises;
9
+ export const CONTEXT_STORE_METADATA_DIR_NAME = '.openspec-store';
10
+ export const CONTEXT_STORE_METADATA_FILE_NAME = 'store.yaml';
11
+ export const CONTEXT_STORES_DIR_NAME = 'context-stores';
12
+ export const CONTEXT_STORE_REGISTRY_FILE_NAME = 'registry.yaml';
13
+ function joinContextStorePath(basePath, ...segments) {
14
+ return FileSystemUtils.joinPath(basePath, ...segments);
15
+ }
16
+ export function getContextStoresDir(options = {}) {
17
+ return joinContextStorePath(options.globalDataDir ?? getGlobalDataDir(), CONTEXT_STORES_DIR_NAME);
18
+ }
19
+ export function getContextStoreRegistryPath(options = {}) {
20
+ return joinContextStorePath(getContextStoresDir(options), CONTEXT_STORE_REGISTRY_FILE_NAME);
21
+ }
22
+ export function getDefaultContextStoreRoot(id, options = {}) {
23
+ return joinContextStorePath(getContextStoresDir(options), id);
24
+ }
25
+ export function getContextStoreMetadataDir(storeRoot) {
26
+ return joinContextStorePath(storeRoot, CONTEXT_STORE_METADATA_DIR_NAME);
27
+ }
28
+ export function getContextStoreMetadataPath(storeRoot) {
29
+ return joinContextStorePath(getContextStoreMetadataDir(storeRoot), CONTEXT_STORE_METADATA_FILE_NAME);
30
+ }
31
+ function validateFolderStyleName(name, label) {
32
+ if (name.length === 0) {
33
+ throw new Error(`${label} must not be empty`);
34
+ }
35
+ if (name === '.' || name === '..') {
36
+ throw new Error(`${label} must not be '${name}'`);
37
+ }
38
+ if (/[\\/]/u.test(name)) {
39
+ throw new Error(`${label} must not contain path separators`);
40
+ }
41
+ return name;
42
+ }
43
+ export function validateContextStoreId(id) {
44
+ try {
45
+ validateFolderStyleName(id, 'Context store id');
46
+ }
47
+ catch (error) {
48
+ throw new ContextStoreError(error instanceof Error ? error.message : String(error), 'invalid_context_store_id', {
49
+ target: 'context_store.id',
50
+ fix: 'Use kebab-case with lowercase letters, numbers, and single hyphen separators.',
51
+ });
52
+ }
53
+ if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(id)) {
54
+ throw new ContextStoreError('Context store id must be kebab-case with lowercase letters, numbers, and single hyphen separators', 'invalid_context_store_id', {
55
+ target: 'context_store.id',
56
+ fix: 'Use kebab-case with lowercase letters, numbers, and single hyphen separators.',
57
+ });
58
+ }
59
+ return id;
60
+ }
61
+ export function isValidContextStoreId(id) {
62
+ try {
63
+ validateContextStoreId(id);
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ async function pathIsFile(filePath) {
71
+ try {
72
+ return (await fs.stat(filePath)).isFile();
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ async function pathIsDirectory(dirPath) {
79
+ try {
80
+ return (await fs.stat(dirPath)).isDirectory();
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ function isFileNotFoundError(error) {
87
+ return isNodeErrorCode(error, 'ENOENT');
88
+ }
89
+ function isNodeErrorCode(error, code) {
90
+ return (typeof error === 'object' &&
91
+ error !== null &&
92
+ 'code' in error &&
93
+ error.code === code);
94
+ }
95
+ function normalizeExistingPathForStorage(existingPath) {
96
+ return FileSystemUtils.canonicalizeExistingPath(existingPath);
97
+ }
98
+ function nonEmptyOptionalString() {
99
+ return z.string().min(1).optional();
100
+ }
101
+ const GitBackendConfigSchema = z.object({
102
+ type: z.literal('git'),
103
+ local_path: z.string().min(1),
104
+ remote: nonEmptyOptionalString(),
105
+ branch: nonEmptyOptionalString(),
106
+ }).strict();
107
+ const RegistryEntrySchema = z.object({
108
+ backend: GitBackendConfigSchema,
109
+ }).strict();
110
+ const RegistryStateSchema = z.object({
111
+ version: z.literal(1),
112
+ stores: z.record(z.string(), RegistryEntrySchema),
113
+ }).strict();
114
+ const MetadataStateSchema = z.object({
115
+ version: z.literal(1),
116
+ id: z.string(),
117
+ }).strict();
118
+ function formatZodIssues(error) {
119
+ return error.issues
120
+ .map((issue) => {
121
+ const location = issue.path.length > 0 ? issue.path.join('.') : 'root';
122
+ return `${location}: ${issue.message}`;
123
+ })
124
+ .join('; ');
125
+ }
126
+ function contextStoreStateDiagnostic(label) {
127
+ if (label.includes('metadata')) {
128
+ return {
129
+ code: 'invalid_context_store_metadata',
130
+ target: 'context_store.metadata',
131
+ fix: 'Repair .openspec-store/store.yaml.',
132
+ };
133
+ }
134
+ return {
135
+ code: 'invalid_context_store_registry',
136
+ target: 'context_store.registry',
137
+ fix: 'Repair or remove the context-store registry file.',
138
+ };
139
+ }
140
+ function invalidContextStoreStateError(label, message) {
141
+ const diagnostic = contextStoreStateDiagnostic(label);
142
+ return new ContextStoreError(`Invalid ${label}: ${message}`, diagnostic.code, {
143
+ target: diagnostic.target,
144
+ fix: diagnostic.fix,
145
+ });
146
+ }
147
+ function parseYamlObject(content, label) {
148
+ try {
149
+ return parseYaml(content);
150
+ }
151
+ catch (error) {
152
+ const message = error instanceof Error ? error.message : String(error);
153
+ throw invalidContextStoreStateError(label, message);
154
+ }
155
+ }
156
+ function assertValidContextStoreIds(ids, label) {
157
+ for (const id of ids) {
158
+ try {
159
+ validateContextStoreId(id);
160
+ }
161
+ catch (error) {
162
+ const message = error instanceof Error ? error.message : String(error);
163
+ throw invalidContextStoreStateError(label, `'${id}': ${message}`);
164
+ }
165
+ }
166
+ }
167
+ export function parseContextStoreRegistryState(content) {
168
+ const raw = parseYamlObject(content, 'context store registry state');
169
+ const result = RegistryStateSchema.safeParse(raw);
170
+ if (!result.success) {
171
+ throw invalidContextStoreStateError('context store registry state', formatZodIssues(result.error));
172
+ }
173
+ assertValidContextStoreIds(Object.keys(result.data.stores), 'context store id');
174
+ return {
175
+ version: 1,
176
+ stores: result.data.stores,
177
+ };
178
+ }
179
+ export function parseContextStoreMetadataState(content) {
180
+ const raw = parseYamlObject(content, 'context store metadata state');
181
+ const result = MetadataStateSchema.safeParse(raw);
182
+ if (!result.success) {
183
+ throw invalidContextStoreStateError('context store metadata state', formatZodIssues(result.error));
184
+ }
185
+ validateContextStoreId(result.data.id);
186
+ return {
187
+ version: 1,
188
+ id: result.data.id,
189
+ };
190
+ }
191
+ export function serializeContextStoreRegistryState(state) {
192
+ const result = RegistryStateSchema.safeParse(state);
193
+ if (!result.success) {
194
+ throw invalidContextStoreStateError('context store registry state', formatZodIssues(result.error));
195
+ }
196
+ assertValidContextStoreIds(Object.keys(result.data.stores), 'context store id');
197
+ return stringifyYaml({
198
+ version: 1,
199
+ stores: result.data.stores,
200
+ });
201
+ }
202
+ export function serializeContextStoreMetadataState(state) {
203
+ const result = MetadataStateSchema.safeParse(state);
204
+ if (!result.success) {
205
+ throw invalidContextStoreStateError('context store metadata state', formatZodIssues(result.error));
206
+ }
207
+ validateContextStoreId(result.data.id);
208
+ return stringifyYaml({
209
+ version: 1,
210
+ id: result.data.id,
211
+ });
212
+ }
213
+ export function listContextStoreRegistryEntries(registry) {
214
+ return Object.entries(registry.stores)
215
+ .map(([id, store]) => ({ id, backend: store.backend }))
216
+ .sort((a, b) => a.id.localeCompare(b.id));
217
+ }
218
+ export async function isContextStoreRoot(candidateRoot) {
219
+ return pathIsFile(getContextStoreMetadataPath(candidateRoot));
220
+ }
221
+ export async function readContextStoreRegistryState(options = {}) {
222
+ const registryPath = getContextStoreRegistryPath(options);
223
+ if (!(await pathIsFile(registryPath))) {
224
+ return null;
225
+ }
226
+ return parseContextStoreRegistryState(await fs.readFile(registryPath, 'utf-8'));
227
+ }
228
+ export async function writeContextStoreRegistryState(state, options = {}) {
229
+ await writeFileAtomically(getContextStoreRegistryPath(options), serializeContextStoreRegistryState(state));
230
+ }
231
+ async function writeFileAtomically(filePath, content) {
232
+ const dirPath = path.dirname(filePath);
233
+ await FileSystemUtils.createDirectory(dirPath);
234
+ const tempPath = path.join(dirPath, `.${path.basename(filePath)}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);
235
+ try {
236
+ await fs.writeFile(tempPath, content, 'utf-8');
237
+ await fs.rename(tempPath, filePath);
238
+ }
239
+ catch (error) {
240
+ await fs.rm(tempPath, { force: true }).catch(() => undefined);
241
+ throw error;
242
+ }
243
+ }
244
+ async function sleep(milliseconds) {
245
+ await new Promise((resolve) => setTimeout(resolve, milliseconds));
246
+ }
247
+ async function acquireContextStoreRegistryLock(options) {
248
+ const registryPath = getContextStoreRegistryPath(options);
249
+ const lockPath = `${registryPath}.lock`;
250
+ await FileSystemUtils.createDirectory(path.dirname(registryPath));
251
+ const deadline = Date.now() + 5000;
252
+ while (true) {
253
+ try {
254
+ return await fs.open(lockPath, 'wx');
255
+ }
256
+ catch (error) {
257
+ if (!isNodeErrorCode(error, 'EEXIST') || Date.now() >= deadline) {
258
+ throw new ContextStoreError('Context store registry is busy.', 'context_store_registry_busy', {
259
+ target: 'context_store.registry',
260
+ fix: 'Retry the command after the current registry update finishes.',
261
+ });
262
+ }
263
+ await sleep(25);
264
+ }
265
+ }
266
+ }
267
+ export async function updateContextStoreRegistryState(updater, options = {}) {
268
+ const registryPath = getContextStoreRegistryPath(options);
269
+ const lockPath = `${registryPath}.lock`;
270
+ const lock = await acquireContextStoreRegistryLock(options);
271
+ try {
272
+ const next = await updater(await readContextStoreRegistryState(options));
273
+ await writeContextStoreRegistryState(next, options);
274
+ return next;
275
+ }
276
+ finally {
277
+ await lock.close().catch(() => undefined);
278
+ await fs.rm(lockPath, { force: true }).catch(() => undefined);
279
+ }
280
+ }
281
+ export async function readContextStoreMetadataState(storeRoot) {
282
+ return parseContextStoreMetadataState(await fs.readFile(getContextStoreMetadataPath(storeRoot), 'utf-8'));
283
+ }
284
+ export async function readOptionalContextStoreMetadataState(storeRoot) {
285
+ try {
286
+ return await readContextStoreMetadataState(storeRoot);
287
+ }
288
+ catch (error) {
289
+ if (isFileNotFoundError(error)) {
290
+ return null;
291
+ }
292
+ throw error;
293
+ }
294
+ }
295
+ export async function writeContextStoreMetadataState(storeRoot, state) {
296
+ await FileSystemUtils.writeFile(getContextStoreMetadataPath(storeRoot), serializeContextStoreMetadataState(state));
297
+ }
298
+ export async function resolveGitContextStoreBackendConfig(input, cwd = process.cwd()) {
299
+ if (input.localPath.length === 0) {
300
+ throw new Error('Context store local path must not be empty.');
301
+ }
302
+ const resolvedPath = path.isAbsolute(input.localPath)
303
+ ? path.resolve(input.localPath)
304
+ : path.resolve(cwd, input.localPath);
305
+ if (!(await pathIsDirectory(resolvedPath))) {
306
+ throw new Error(`Context store local path does not exist: ${input.localPath}`);
307
+ }
308
+ if (input.remote !== undefined && input.remote.length === 0) {
309
+ throw new Error('Context store remote must not be empty when provided.');
310
+ }
311
+ if (input.branch !== undefined && input.branch.length === 0) {
312
+ throw new Error('Context store branch must not be empty when provided.');
313
+ }
314
+ return {
315
+ type: 'git',
316
+ local_path: normalizeExistingPathForStorage(resolvedPath),
317
+ ...(input.remote ? { remote: input.remote } : {}),
318
+ ...(input.branch ? { branch: input.branch } : {}),
319
+ };
320
+ }
321
+ //# sourceMappingURL=foundation.js.map
@@ -0,0 +1,6 @@
1
+ export * from './foundation.js';
2
+ export * from './errors.js';
3
+ export * from './registry.js';
4
+ export * from './binding.js';
5
+ export * from './operations.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,6 @@
1
+ export * from './foundation.js';
2
+ export * from './errors.js';
3
+ export * from './registry.js';
4
+ export * from './binding.js';
5
+ export * from './operations.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,85 @@
1
+ import { type ContextStoreGitBackendConfig, type ContextStorePathOptions, type ContextStoreRegistryState } from './foundation.js';
2
+ import { type ContextStoreDiagnostic } from './errors.js';
3
+ type PathKind = 'missing' | 'directory' | 'file' | 'other';
4
+ export interface ContextStoreInfo {
5
+ id: string;
6
+ root: string;
7
+ metadataPath?: string;
8
+ }
9
+ export interface ContextStoreMutationResult {
10
+ store: ContextStoreInfo;
11
+ registryCommit: {
12
+ path: string;
13
+ };
14
+ git: {
15
+ isRepository: boolean;
16
+ initialized: boolean;
17
+ };
18
+ createdArtifacts: string[];
19
+ }
20
+ export interface ContextStoreCleanupResult {
21
+ store: ContextStoreInfo;
22
+ registryCommit: {
23
+ path: string;
24
+ removed: boolean;
25
+ };
26
+ files: {
27
+ deleted: boolean;
28
+ deletedPath?: string;
29
+ leftOnDisk?: string;
30
+ };
31
+ diagnostics: ContextStoreDiagnostic[];
32
+ }
33
+ export interface ContextStoreListResult {
34
+ stores: ContextStoreInfo[];
35
+ }
36
+ export interface ContextStoreDoctorResult {
37
+ stores: ContextStoreInspection[];
38
+ diagnostics: ContextStoreDiagnostic[];
39
+ }
40
+ export interface ContextStoreInspection extends ContextStoreInfo {
41
+ metadata: {
42
+ present: boolean | null;
43
+ valid: boolean | null;
44
+ id?: string;
45
+ };
46
+ git: {
47
+ isRepository: boolean | null;
48
+ };
49
+ diagnostics: ContextStoreDiagnostic[];
50
+ }
51
+ export interface SetupContextStoreInput {
52
+ id?: string;
53
+ path?: string;
54
+ initGit?: boolean;
55
+ allowInsideGitRepository?: boolean;
56
+ }
57
+ export interface RegisterExistingContextStoreInput {
58
+ path?: string;
59
+ id?: string;
60
+ }
61
+ export interface CleanupContextStoreInput extends ContextStorePathOptions {
62
+ id: string;
63
+ }
64
+ export interface PreparedContextStoreCleanup extends ContextStoreInfo, ContextStorePathOptions {
65
+ backend: ContextStoreGitBackendConfig;
66
+ }
67
+ export interface PreparedContextStoreSetup {
68
+ id: string;
69
+ root: string;
70
+ rootKind: Extract<PathKind, 'missing' | 'directory'>;
71
+ backend?: ContextStoreGitBackendConfig;
72
+ registry: ContextStoreRegistryState | null;
73
+ }
74
+ export declare function prepareContextStoreSetup(input: Pick<SetupContextStoreInput, 'id' | 'path' | 'allowInsideGitRepository'>): Promise<PreparedContextStoreSetup>;
75
+ export declare function setupPreparedContextStore(prepared: PreparedContextStoreSetup, input?: Pick<SetupContextStoreInput, 'initGit'>): Promise<ContextStoreMutationResult>;
76
+ export declare function setupContextStore(input: SetupContextStoreInput): Promise<ContextStoreMutationResult>;
77
+ export declare function registerExistingContextStore(input: RegisterExistingContextStoreInput): Promise<ContextStoreMutationResult>;
78
+ export declare function prepareContextStoreCleanup(input: CleanupContextStoreInput): Promise<PreparedContextStoreCleanup>;
79
+ export declare function unregisterContextStore(input: CleanupContextStoreInput): Promise<ContextStoreCleanupResult>;
80
+ export declare function removeContextStore(target: PreparedContextStoreCleanup): Promise<ContextStoreCleanupResult>;
81
+ export declare function listContextStores(): Promise<ContextStoreListResult>;
82
+ export declare function doctorContextStores(id?: string): Promise<ContextStoreDoctorResult>;
83
+ export declare function normalizeContextStorePathForComparison(targetPath: string): string;
84
+ export {};
85
+ //# sourceMappingURL=operations.d.ts.map