openplanr 1.16.1 → 1.17.0

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 (117) hide show
  1. package/README.md +5 -2
  2. package/dist/cli/commands/doctor.d.ts.map +1 -1
  3. package/dist/cli/commands/doctor.js +2 -0
  4. package/dist/cli/commands/doctor.js.map +1 -1
  5. package/dist/cli/commands/operate.d.ts.map +1 -1
  6. package/dist/cli/commands/operate.js +185 -6
  7. package/dist/cli/commands/operate.js.map +1 -1
  8. package/dist/cli/commands/runtime.d.ts.map +1 -1
  9. package/dist/cli/commands/runtime.js +22 -4
  10. package/dist/cli/commands/runtime.js.map +1 -1
  11. package/dist/cli/commands/setup.d.ts.map +1 -1
  12. package/dist/cli/commands/setup.js +18 -0
  13. package/dist/cli/commands/setup.js.map +1 -1
  14. package/dist/services/claude-plugin-service.d.ts +47 -0
  15. package/dist/services/claude-plugin-service.d.ts.map +1 -0
  16. package/dist/services/claude-plugin-service.js +259 -0
  17. package/dist/services/claude-plugin-service.js.map +1 -0
  18. package/dist/services/operate/advisors.d.ts +46 -1
  19. package/dist/services/operate/advisors.d.ts.map +1 -1
  20. package/dist/services/operate/advisors.js +124 -13
  21. package/dist/services/operate/advisors.js.map +1 -1
  22. package/dist/services/operate/artifacts.d.ts +27 -1
  23. package/dist/services/operate/artifacts.d.ts.map +1 -1
  24. package/dist/services/operate/artifacts.js +103 -1
  25. package/dist/services/operate/artifacts.js.map +1 -1
  26. package/dist/services/operate/cadence.d.ts +50 -0
  27. package/dist/services/operate/cadence.d.ts.map +1 -0
  28. package/dist/services/operate/cadence.js +56 -0
  29. package/dist/services/operate/cadence.js.map +1 -0
  30. package/dist/services/operate/citation-resolution.d.ts +101 -0
  31. package/dist/services/operate/citation-resolution.d.ts.map +1 -0
  32. package/dist/services/operate/citation-resolution.js +308 -0
  33. package/dist/services/operate/citation-resolution.js.map +1 -0
  34. package/dist/services/operate/config.d.ts +67 -1
  35. package/dist/services/operate/config.d.ts.map +1 -1
  36. package/dist/services/operate/config.js +158 -9
  37. package/dist/services/operate/config.js.map +1 -1
  38. package/dist/services/operate/decision-brief.d.ts +148 -0
  39. package/dist/services/operate/decision-brief.d.ts.map +1 -0
  40. package/dist/services/operate/decision-brief.js +194 -0
  41. package/dist/services/operate/decision-brief.js.map +1 -0
  42. package/dist/services/operate/doctor.d.ts.map +1 -1
  43. package/dist/services/operate/doctor.js +151 -3
  44. package/dist/services/operate/doctor.js.map +1 -1
  45. package/dist/services/operate/engine.d.ts +66 -2
  46. package/dist/services/operate/engine.d.ts.map +1 -1
  47. package/dist/services/operate/engine.js +219 -7
  48. package/dist/services/operate/engine.js.map +1 -1
  49. package/dist/services/operate/event-store.d.ts +35 -1
  50. package/dist/services/operate/event-store.d.ts.map +1 -1
  51. package/dist/services/operate/event-store.js +142 -29
  52. package/dist/services/operate/event-store.js.map +1 -1
  53. package/dist/services/operate/evidence-cache.d.ts +25 -1
  54. package/dist/services/operate/evidence-cache.d.ts.map +1 -1
  55. package/dist/services/operate/evidence-cache.js +62 -1
  56. package/dist/services/operate/evidence-cache.js.map +1 -1
  57. package/dist/services/operate/evidence.d.ts +20 -1
  58. package/dist/services/operate/evidence.d.ts.map +1 -1
  59. package/dist/services/operate/evidence.js +119 -0
  60. package/dist/services/operate/evidence.js.map +1 -1
  61. package/dist/services/operate/index.d.ts.map +1 -1
  62. package/dist/services/operate/index.js +72 -5
  63. package/dist/services/operate/index.js.map +1 -1
  64. package/dist/services/operate/interaction/action-service.d.ts +17 -0
  65. package/dist/services/operate/interaction/action-service.d.ts.map +1 -1
  66. package/dist/services/operate/interaction/action-service.js +19 -0
  67. package/dist/services/operate/interaction/action-service.js.map +1 -1
  68. package/dist/services/operate/journal.d.ts.map +1 -1
  69. package/dist/services/operate/journal.js +11 -5
  70. package/dist/services/operate/journal.js.map +1 -1
  71. package/dist/services/operate/maintenance.d.ts.map +1 -1
  72. package/dist/services/operate/maintenance.js +9 -2
  73. package/dist/services/operate/maintenance.js.map +1 -1
  74. package/dist/services/operate/migration.d.ts +68 -0
  75. package/dist/services/operate/migration.d.ts.map +1 -0
  76. package/dist/services/operate/migration.js +235 -0
  77. package/dist/services/operate/migration.js.map +1 -0
  78. package/dist/services/operate/mission-dispatch.d.ts +193 -0
  79. package/dist/services/operate/mission-dispatch.d.ts.map +1 -0
  80. package/dist/services/operate/mission-dispatch.js +444 -0
  81. package/dist/services/operate/mission-dispatch.js.map +1 -0
  82. package/dist/services/operate/projection-persistence.d.ts +6 -0
  83. package/dist/services/operate/projection-persistence.d.ts.map +1 -1
  84. package/dist/services/operate/projection-persistence.js +87 -11
  85. package/dist/services/operate/projection-persistence.js.map +1 -1
  86. package/dist/services/operate/projection.d.ts +26 -1
  87. package/dist/services/operate/projection.d.ts.map +1 -1
  88. package/dist/services/operate/projection.js +62 -0
  89. package/dist/services/operate/projection.js.map +1 -1
  90. package/dist/services/operate/protocol.d.ts +46 -2
  91. package/dist/services/operate/protocol.d.ts.map +1 -1
  92. package/dist/services/operate/protocol.js +57 -5
  93. package/dist/services/operate/protocol.js.map +1 -1
  94. package/dist/services/operate/read-only-providers.d.ts +37 -0
  95. package/dist/services/operate/read-only-providers.d.ts.map +1 -1
  96. package/dist/services/operate/read-only-providers.js +130 -0
  97. package/dist/services/operate/read-only-providers.js.map +1 -1
  98. package/dist/services/operate/reports.d.ts +13 -0
  99. package/dist/services/operate/reports.d.ts.map +1 -1
  100. package/dist/services/operate/reports.js +217 -1
  101. package/dist/services/operate/reports.js.map +1 -1
  102. package/dist/services/operate/routes.d.ts.map +1 -1
  103. package/dist/services/operate/routes.js +79 -5
  104. package/dist/services/operate/routes.js.map +1 -1
  105. package/dist/services/operate/types.d.ts +120 -4
  106. package/dist/services/operate/types.d.ts.map +1 -1
  107. package/dist/services/operate/types.js +13 -0
  108. package/dist/services/operate/types.js.map +1 -1
  109. package/dist/services/operate/workspace.d.ts +7 -0
  110. package/dist/services/operate/workspace.d.ts.map +1 -1
  111. package/dist/services/operate/workspace.js +14 -5
  112. package/dist/services/operate/workspace.js.map +1 -1
  113. package/dist/services/runtime-manager-service.d.ts +15 -0
  114. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  115. package/dist/services/runtime-manager-service.js +151 -36
  116. package/dist/services/runtime-manager-service.js.map +1 -1
  117. package/package.json +2 -2
@@ -0,0 +1,47 @@
1
+ export declare const OPENPLANR_CLAUDE_MARKETPLACE = "openplanr";
2
+ export declare const OPENPLANR_CLAUDE_MARKETPLACE_SOURCE = "openplanr/marketplace";
3
+ export declare const OPENPLANR_SKILLS_VERSION = "1.18.2";
4
+ export type ClaudePluginOperationKind = 'add-marketplace' | 'refresh-marketplace' | 'install' | 'update' | 'enable';
5
+ export interface ClaudePluginOperation {
6
+ runtime: 'claude-code';
7
+ kind: ClaudePluginOperationKind;
8
+ id: string;
9
+ scope: 'user';
10
+ currentVersion?: string;
11
+ targetVersion?: string;
12
+ description: string;
13
+ }
14
+ export interface ClaudePluginState {
15
+ id: string;
16
+ name: string;
17
+ expectedVersion: string;
18
+ installedVersion?: string;
19
+ enabled: boolean;
20
+ installed: boolean;
21
+ identityValid: boolean;
22
+ installPath?: string;
23
+ }
24
+ export interface ClaudePluginInspection {
25
+ available: boolean;
26
+ marketplaceConfigured: boolean;
27
+ ready: boolean;
28
+ operations: ClaudePluginOperation[];
29
+ plugins: ClaudePluginState[];
30
+ legacyPluginIds: string[];
31
+ error?: string;
32
+ }
33
+ export interface ClaudePluginApplyResult {
34
+ operations: ClaudePluginOperation[];
35
+ restartRequired: boolean;
36
+ inspection: ClaudePluginInspection;
37
+ }
38
+ export interface ClaudeCommandResult {
39
+ status: number | null;
40
+ stdout: string;
41
+ stderr: string;
42
+ error?: Error;
43
+ }
44
+ export type ClaudeCommandRunner = (args: string[]) => ClaudeCommandResult;
45
+ export declare function inspectClaudePluginIntegration(pipelineVersion: string, runner?: ClaudeCommandRunner): ClaudePluginInspection;
46
+ export declare function applyClaudePluginIntegration(pipelineVersion: string, inspection: ClaudePluginInspection, runner?: ClaudeCommandRunner): ClaudePluginApplyResult;
47
+ //# sourceMappingURL=claude-plugin-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-plugin-service.d.ts","sourceRoot":"","sources":["../../src/services/claude-plugin-service.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAC3E,eAAO,MAAM,wBAAwB,WAAW,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GACjC,iBAAiB,GACjB,qBAAqB,GACrB,SAAS,GACT,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,yBAAyB,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,sBAAsB,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,mBAAmB,CAAC;AAoK1E,wBAAgB,8BAA8B,CAC5C,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,mBAAmC,GAC1C,sBAAsB,CAwFxB;AAcD,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,sBAAsB,EAClC,MAAM,GAAE,mBAAmC,GAC1C,uBAAuB,CAkEzB"}
@@ -0,0 +1,259 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ export const OPENPLANR_CLAUDE_MARKETPLACE = 'openplanr';
5
+ export const OPENPLANR_CLAUDE_MARKETPLACE_SOURCE = 'openplanr/marketplace';
6
+ export const OPENPLANR_SKILLS_VERSION = '1.18.2';
7
+ function defaultRunner(args) {
8
+ const result = spawnSync('claude', args, {
9
+ encoding: 'utf8',
10
+ windowsHide: true,
11
+ });
12
+ return {
13
+ status: result.status,
14
+ stdout: result.stdout ?? '',
15
+ stderr: result.stderr ?? '',
16
+ ...(result.error ? { error: result.error } : {}),
17
+ };
18
+ }
19
+ function parseJson(result) {
20
+ if (result.error || result.status !== 0) {
21
+ const detail = result.error?.message || result.stderr.trim() || `exit ${result.status}`;
22
+ throw new Error(detail);
23
+ }
24
+ return JSON.parse(result.stdout);
25
+ }
26
+ function installedPlugins(value) {
27
+ return Array.isArray(value) ? value : (value.installed ?? []);
28
+ }
29
+ function stableVersionParts(version) {
30
+ if (!/^\d+\.\d+\.\d+$/.test(version))
31
+ return null;
32
+ return version.split('.').map(Number);
33
+ }
34
+ function newestCompatibleTarget(minimum, advertised) {
35
+ if (!advertised)
36
+ return minimum;
37
+ const minimumParts = stableVersionParts(minimum);
38
+ const advertisedParts = stableVersionParts(advertised);
39
+ if (!minimumParts || !advertisedParts)
40
+ return minimum;
41
+ if (advertisedParts[0] !== minimumParts[0] ||
42
+ (minimumParts[0] === 0 && advertisedParts[1] !== minimumParts[1])) {
43
+ return minimum;
44
+ }
45
+ for (let index = 0; index < minimumParts.length; index += 1) {
46
+ if (advertisedParts[index] > minimumParts[index])
47
+ return advertised;
48
+ if (advertisedParts[index] < minimumParts[index])
49
+ return minimum;
50
+ }
51
+ return advertised;
52
+ }
53
+ function marketplaceTargets(marketplace) {
54
+ if (!marketplace?.installLocation)
55
+ return new Map();
56
+ const manifestPath = path.join(marketplace.installLocation, '.claude-plugin', 'marketplace.json');
57
+ if (!existsSync(manifestPath))
58
+ return new Map();
59
+ try {
60
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
61
+ return new Map((manifest.plugins ?? [])
62
+ .filter((plugin) => Boolean(plugin.name && plugin.version))
63
+ .map((plugin) => [plugin.name, plugin.version]));
64
+ }
65
+ catch {
66
+ return new Map();
67
+ }
68
+ }
69
+ function validManifest(installPath, expectedName, expectedVersion) {
70
+ if (!installPath)
71
+ return false;
72
+ const manifestPath = path.join(installPath, '.claude-plugin', 'plugin.json');
73
+ if (!existsSync(manifestPath))
74
+ return false;
75
+ try {
76
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
77
+ return manifest.name === expectedName && manifest.version === expectedVersion;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ function pluginState(installed, name, expectedVersion) {
84
+ const id = `${name}@${OPENPLANR_CLAUDE_MARKETPLACE}`;
85
+ const selected = installed.find((plugin) => plugin.id === id && plugin.scope === 'user');
86
+ const installedVersion = selected?.version;
87
+ return {
88
+ id,
89
+ name,
90
+ expectedVersion,
91
+ ...(installedVersion ? { installedVersion } : {}),
92
+ enabled: selected?.enabled === true,
93
+ installed: Boolean(selected),
94
+ identityValid: validManifest(selected?.installPath, name, expectedVersion),
95
+ ...(selected?.installPath ? { installPath: selected.installPath } : {}),
96
+ };
97
+ }
98
+ function pluginOperations(plugin) {
99
+ if (!plugin.installed) {
100
+ return [
101
+ {
102
+ runtime: 'claude-code',
103
+ kind: 'install',
104
+ id: plugin.id,
105
+ scope: 'user',
106
+ targetVersion: plugin.expectedVersion,
107
+ description: `Install ${plugin.id} ${plugin.expectedVersion}`,
108
+ },
109
+ ];
110
+ }
111
+ const operations = [];
112
+ if (plugin.installedVersion !== plugin.expectedVersion || !plugin.identityValid) {
113
+ operations.push({
114
+ runtime: 'claude-code',
115
+ kind: 'update',
116
+ id: plugin.id,
117
+ scope: 'user',
118
+ currentVersion: plugin.installedVersion,
119
+ targetVersion: plugin.expectedVersion,
120
+ description: !plugin.identityValid
121
+ ? `Refresh ${plugin.id} to restore its stable plugin identity`
122
+ : `Update ${plugin.id} from ${plugin.installedVersion} to ${plugin.expectedVersion}`,
123
+ });
124
+ }
125
+ if (!plugin.enabled) {
126
+ operations.push({
127
+ runtime: 'claude-code',
128
+ kind: 'enable',
129
+ id: plugin.id,
130
+ scope: 'user',
131
+ currentVersion: plugin.installedVersion,
132
+ targetVersion: plugin.expectedVersion,
133
+ description: `Enable ${plugin.id}`,
134
+ });
135
+ }
136
+ return operations;
137
+ }
138
+ export function inspectClaudePluginIntegration(pipelineVersion, runner = defaultRunner) {
139
+ const versionCheck = runner(['--version']);
140
+ if (versionCheck.error || versionCheck.status !== 0) {
141
+ return {
142
+ available: false,
143
+ marketplaceConfigured: false,
144
+ ready: false,
145
+ operations: [],
146
+ plugins: [],
147
+ legacyPluginIds: [],
148
+ error: versionCheck.error?.message || versionCheck.stderr.trim() || 'Claude Code unavailable',
149
+ };
150
+ }
151
+ try {
152
+ const marketplaces = parseJson(runner(['plugin', 'marketplace', 'list', '--json']));
153
+ const listed = parseJson(runner(['plugin', 'list', '--json']));
154
+ const installed = installedPlugins(listed);
155
+ const officialMarketplace = marketplaces.find((marketplace) => marketplace.name === OPENPLANR_CLAUDE_MARKETPLACE &&
156
+ marketplace.repo === OPENPLANR_CLAUDE_MARKETPLACE_SOURCE);
157
+ const marketplaceConfigured = Boolean(officialMarketplace);
158
+ const targets = marketplaceTargets(officialMarketplace);
159
+ const plugins = [
160
+ pluginState(installed, 'openplanr', newestCompatibleTarget(OPENPLANR_SKILLS_VERSION, targets.get('openplanr'))),
161
+ pluginState(installed, 'planr-pipeline', newestCompatibleTarget(pipelineVersion, targets.get('planr-pipeline'))),
162
+ ];
163
+ const operations = [
164
+ {
165
+ runtime: 'claude-code',
166
+ kind: marketplaceConfigured ? 'refresh-marketplace' : 'add-marketplace',
167
+ id: OPENPLANR_CLAUDE_MARKETPLACE,
168
+ scope: 'user',
169
+ description: marketplaceConfigured
170
+ ? 'Refresh the official OpenPlanr Claude marketplace'
171
+ : 'Add the official OpenPlanr Claude marketplace',
172
+ },
173
+ ...plugins.flatMap(pluginOperations),
174
+ ];
175
+ const legacyPluginIds = installed
176
+ .filter((plugin) => plugin.scope === 'user' &&
177
+ plugin.id?.startsWith('openplanr@') &&
178
+ plugin.id !== `openplanr@${OPENPLANR_CLAUDE_MARKETPLACE}`)
179
+ .map((plugin) => plugin.id);
180
+ return {
181
+ available: true,
182
+ marketplaceConfigured,
183
+ ready: marketplaceConfigured &&
184
+ plugins.every((plugin) => plugin.installed &&
185
+ plugin.enabled &&
186
+ plugin.identityValid &&
187
+ plugin.installedVersion === plugin.expectedVersion),
188
+ operations,
189
+ plugins,
190
+ legacyPluginIds,
191
+ };
192
+ }
193
+ catch (cause) {
194
+ return {
195
+ available: true,
196
+ marketplaceConfigured: false,
197
+ ready: false,
198
+ operations: [],
199
+ plugins: [],
200
+ legacyPluginIds: [],
201
+ error: cause instanceof Error ? cause.message : String(cause),
202
+ };
203
+ }
204
+ }
205
+ function runOrThrow(runner, args, operation) {
206
+ const result = runner(args);
207
+ if (result.error || result.status !== 0) {
208
+ const detail = result.error?.message || result.stderr.trim() || `exit ${result.status}`;
209
+ throw new Error(`${operation.description}: ${detail}`);
210
+ }
211
+ }
212
+ export function applyClaudePluginIntegration(pipelineVersion, inspection, runner = defaultRunner) {
213
+ if (!inspection.available || inspection.error) {
214
+ throw new Error(inspection.error ?? 'Claude Code is unavailable');
215
+ }
216
+ const performed = [];
217
+ const marketplaceOperation = inspection.operations.find((operation) => ['add-marketplace', 'refresh-marketplace'].includes(operation.kind));
218
+ if (marketplaceOperation) {
219
+ if (marketplaceOperation.kind === 'add-marketplace') {
220
+ runOrThrow(runner, ['plugin', 'marketplace', 'add', OPENPLANR_CLAUDE_MARKETPLACE_SOURCE, '--scope', 'user'], marketplaceOperation);
221
+ }
222
+ else {
223
+ runOrThrow(runner, ['plugin', 'marketplace', 'update', OPENPLANR_CLAUDE_MARKETPLACE], marketplaceOperation);
224
+ }
225
+ performed.push(marketplaceOperation);
226
+ }
227
+ const refreshedInspection = inspectClaudePluginIntegration(pipelineVersion, runner);
228
+ if (refreshedInspection.error)
229
+ throw new Error(refreshedInspection.error);
230
+ for (const operation of refreshedInspection.operations.filter((item) => !['add-marketplace', 'refresh-marketplace'].includes(item.kind))) {
231
+ if (operation.kind === 'install') {
232
+ runOrThrow(runner, ['plugin', 'install', operation.id, '--scope', 'user'], operation);
233
+ }
234
+ else if (operation.kind === 'update') {
235
+ runOrThrow(runner, ['plugin', 'update', operation.id, '--scope', 'user'], operation);
236
+ }
237
+ else if (operation.kind === 'enable') {
238
+ runOrThrow(runner, ['plugin', 'enable', operation.id, '--scope', 'user'], operation);
239
+ }
240
+ performed.push(operation);
241
+ }
242
+ const finalInspection = inspectClaudePluginIntegration(pipelineVersion, runner);
243
+ if (!finalInspection.ready) {
244
+ const drift = finalInspection.plugins
245
+ .filter((plugin) => !plugin.installed ||
246
+ !plugin.enabled ||
247
+ !plugin.identityValid ||
248
+ plugin.installedVersion !== plugin.expectedVersion)
249
+ .map((plugin) => `${plugin.id}=${plugin.installedVersion ?? 'missing'} (expected ${plugin.expectedVersion})`)
250
+ .join(', ');
251
+ throw new Error(finalInspection.error || `Claude plugin verification failed${drift ? `: ${drift}` : ''}`);
252
+ }
253
+ return {
254
+ operations: performed,
255
+ restartRequired: performed.some((operation) => ['install', 'update', 'enable'].includes(operation.kind)),
256
+ inspection: finalInspection,
257
+ };
258
+ }
259
+ //# sourceMappingURL=claude-plugin-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-plugin-service.js","sourceRoot":"","sources":["../../src/services/claude-plugin-service.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import type { AIMessage } from '../../ai/types.js';
3
3
  import type { OpenPlanrConfig } from '../../models/types.js';
4
- import { type OperatingAdvisorBrief, type OperatingCharter, type OperatingDataGap, type OperatingEvidence, type OperatingEvidenceReadiness, type OperatingProviderManifest, type OperatingRoleId, type OperatingRoleResult, type OperatingState } from './types.js';
4
+ import { type OperatingDispatchIsolation, type OperatingDispatchMode } from './mission-dispatch.js';
5
+ import { type OperatingAdvisorBrief, type OperatingCharter, type OperatingDataGap, type OperatingEvidence, type OperatingEvidenceIndexItem, type OperatingEvidenceReadiness, type OperatingMissionPacket, type OperatingMissionPacketState, type OperatingProviderManifest, type OperatingRoleId, type OperatingRoleResult, type OperatingState } from './types.js';
5
6
  declare const advisorOutputSchema: z.ZodObject<{
6
7
  outcome: z.ZodEnum<{
7
8
  quiet: "quiet";
@@ -120,6 +121,36 @@ export declare function createOperatingAdvisorPack(input: {
120
121
  evidence: OperatingEvidence;
121
122
  context: AdvisorOperatingContext;
122
123
  }): Promise<OperatingAdvisorPack>;
124
+ /**
125
+ * Derive a role's mission-mode input budget from the pipeline's published pack
126
+ * budget. Mission packets carry only an evidence INDEX (no bodies), so their
127
+ * budget is a single-digit-KiB fraction of the role's v1.2 pack budget, clamped
128
+ * to `[1, 9]` KiB. This DERIVES a new value; it never mutates the frozen v1.2
129
+ * `maxInputBytes` that pack mode still enforces.
130
+ */
131
+ export declare function deriveOperatingMissionBudget(packMaxInputBytes: number): number;
132
+ /**
133
+ * The per-role mission input budget registry, derived once from the pipeline's
134
+ * role registry. Every value is single-digit KiB.
135
+ */
136
+ export declare function deriveOperatingMissionBudgets(): Promise<Record<string, number>>;
137
+ export interface OperatingMissionPacketInput extends OperatingMissionPacketState {
138
+ roleId: OperatingRoleId;
139
+ evidenceIndex: OperatingEvidenceIndexItem[];
140
+ maxEvidenceItems?: number;
141
+ }
142
+ /**
143
+ * Build a digest-bound Protocol v1.3 mission packet (FR1) by calling the
144
+ * pipeline's `createOperatingMissionPacket` with the live non-evidence payload
145
+ * and the index-only (body-free) evidence. The packet is measured against the
146
+ * role's DERIVED single-digit-KiB mission budget; when it would exceed that
147
+ * budget the assembler fails closed with `E_OPERATE_MISSION_PACKET_BUDGET`
148
+ * naming the role, before any dispatch call is made — the packet is never
149
+ * truncated to fit. This is a separate construction path from
150
+ * `createOperatingAdvisorPack`; pack-mode role-filtered body content is
151
+ * unaffected.
152
+ */
153
+ export declare function buildOperatingMissionPacket(input: OperatingMissionPacketInput): Promise<OperatingMissionPacket>;
123
154
  export interface AdvisorAdapter {
124
155
  id: string;
125
156
  mode: 'structured' | 'native-isolated';
@@ -160,6 +191,12 @@ export interface AdvisorDispatchResult {
160
191
  adapterId: string;
161
192
  capability: 'analysis-standard' | 'analysis-high';
162
193
  dispatch: 'parallel' | 'sequential';
194
+ /** Configured dispatch mode: registry default overridden by dispatchModeOverrides. */
195
+ dispatchMode: OperatingDispatchMode;
196
+ /** Effective isolation after the FR2/FR4 reconciliation (E-002/E-004). */
197
+ isolation: OperatingDispatchIsolation;
198
+ /** Audit note explaining the isolation decision (e.g. codex/cursor fail-closed). */
199
+ reconciliation: string;
163
200
  }>;
164
201
  skipped: Array<{
165
202
  roleId: OperatingRoleId;
@@ -196,6 +233,14 @@ export declare function dispatchOperatingAdvisors(input: {
196
233
  adapter: AdvisorAdapter;
197
234
  depth: 'standard' | 'deep' | 'review-only';
198
235
  runtime?: string;
236
+ /**
237
+ * Per-project dispatch-mode overrides (FR4 / E-004). A role listed here uses
238
+ * the given mode instead of the v1.3 registry default; unlisted roles keep the
239
+ * registry default (`mission`). An operator rolls a single lens back to the
240
+ * v1.2 pack path with `{ <roleId>: 'pack' }` without waiting for a registry
241
+ * release. When omitted, every role follows the derived registry default.
242
+ */
243
+ dispatchModeOverrides?: Readonly<Record<string, OperatingDispatchMode>>;
199
244
  }): Promise<AdvisorDispatchResult>;
200
245
  /**
201
246
  * Standard-cycle advisor failures are governed data gaps, not ephemeral
@@ -1 +1 @@
1
- {"version":3,"file":"advisors.d.ts","sourceRoot":"","sources":["../../../src/services/operate/advisors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"advisors.d.ts","sourceRoot":"","sources":["../../../src/services/operate/advisors.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,10 @@ import { OPENPLANR_VERSION } from '../../utils/package-version.js';
7
7
  import { generateJSON, getAIProvider, isAIConfigured } from '../ai-service.js';
8
8
  import { loadConfig } from '../config-service.js';
9
9
  import { canonicalDigest, canonicalize } from './canonical.js';
10
- import { assertOperatingArtifact, loadOperatingProtocol } from './protocol.js';
10
+ import { operatingRegistryDispatchMode, operatingRuntimeEnforcesBoundedReadOnly, resolveOperatingDispatchMode, runMissionDispatchFanOut, } from './mission-dispatch.js';
11
+ import { assertOperatingArtifact, loadOperatingMissionApi, loadOperatingProtocol, } from './protocol.js';
11
12
  import { prepareAdvisorEvidenceText, sanitizeGeneratedPlainText } from './redaction.js';
12
- import { OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, OperateError, } from './types.js';
13
+ import { OPERATE_MISSION_PROTOCOL_VERSION, OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, OperateError, } from './types.js';
13
14
  const proposalSchema = z
14
15
  .object({
15
16
  proposalKey: z.string().regex(/^[A-Za-z0-9._-]+$/),
@@ -301,6 +302,82 @@ export async function createOperatingAdvisorPack(input) {
301
302
  inputDigest,
302
303
  };
303
304
  }
305
+ /**
306
+ * Derive a role's mission-mode input budget from the pipeline's published pack
307
+ * budget. Mission packets carry only an evidence INDEX (no bodies), so their
308
+ * budget is a single-digit-KiB fraction of the role's v1.2 pack budget, clamped
309
+ * to `[1, 9]` KiB. This DERIVES a new value; it never mutates the frozen v1.2
310
+ * `maxInputBytes` that pack mode still enforces.
311
+ */
312
+ export function deriveOperatingMissionBudget(packMaxInputBytes) {
313
+ const kib = Math.min(9, Math.max(1, Math.round(packMaxInputBytes / (32 * 1024))));
314
+ return kib * 1024;
315
+ }
316
+ /**
317
+ * The per-role mission input budget registry, derived once from the pipeline's
318
+ * role registry. Every value is single-digit KiB.
319
+ */
320
+ export async function deriveOperatingMissionBudgets() {
321
+ const roles = (await loadOperatingProtocol()).listOperatingRoles();
322
+ return Object.fromEntries(roles.map((role) => {
323
+ const budgets = role.budgets;
324
+ const packMax = typeof budgets?.maxInputBytes === 'number' ? budgets.maxInputBytes : 262_144;
325
+ return [role.id, deriveOperatingMissionBudget(packMax)];
326
+ }));
327
+ }
328
+ function isMissionBudgetError(error) {
329
+ const code = error?.code;
330
+ if (code === 'E_OPERATE_MISSION_PACKET_BUDGET')
331
+ return true;
332
+ return error instanceof Error && error.message.includes('E_OPERATE_MISSION_PACKET_BUDGET');
333
+ }
334
+ /**
335
+ * Build a digest-bound Protocol v1.3 mission packet (FR1) by calling the
336
+ * pipeline's `createOperatingMissionPacket` with the live non-evidence payload
337
+ * and the index-only (body-free) evidence. The packet is measured against the
338
+ * role's DERIVED single-digit-KiB mission budget; when it would exceed that
339
+ * budget the assembler fails closed with `E_OPERATE_MISSION_PACKET_BUDGET`
340
+ * naming the role, before any dispatch call is made — the packet is never
341
+ * truncated to fit. This is a separate construction path from
342
+ * `createOperatingAdvisorPack`; pack-mode role-filtered body content is
343
+ * unaffected.
344
+ */
345
+ export async function buildOperatingMissionPacket(input) {
346
+ const mission = await loadOperatingMissionApi();
347
+ const protocol = await loadOperatingProtocol();
348
+ const role = protocol.listOperatingRoles().find((candidate) => candidate.id === input.roleId);
349
+ if (!role) {
350
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', `Mission packet requested for unknown role ${input.roleId}.`);
351
+ }
352
+ const packBudget = role.budgets?.maxInputBytes;
353
+ const derivedBudget = deriveOperatingMissionBudget(typeof packBudget === 'number' ? packBudget : 262_144);
354
+ let packet;
355
+ try {
356
+ packet = mission.createOperatingMissionPacket(input.roleId, input.evidenceIndex, {
357
+ protocolVersion: OPERATE_MISSION_PROTOCOL_VERSION,
358
+ cycleId: input.cycleId,
359
+ pinnedRevision: input.pinnedRevision,
360
+ charter: input.charter,
361
+ priorCycleSummary: input.priorCycleSummary,
362
+ planningStatus: input.planningStatus,
363
+ declaredRoots: input.declaredRoots,
364
+ maxEvidenceItems: input.maxEvidenceItems,
365
+ });
366
+ }
367
+ catch (error) {
368
+ if (isMissionBudgetError(error)) {
369
+ throw new OperateError('E_OPERATE_MISSION_PACKET_BUDGET', `Mission packet for role ${input.roleId} exceeds its mission input budget; ` +
370
+ 'the evidence index is not truncated to fit.', { roleId: input.roleId });
371
+ }
372
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', `Mission packet construction failed for role ${input.roleId}: ${error instanceof Error ? error.message : String(error)}`, { roleId: input.roleId });
373
+ }
374
+ const actualBytes = Buffer.byteLength(canonicalize(packet), 'utf8');
375
+ if (actualBytes > derivedBudget) {
376
+ throw new OperateError('E_OPERATE_MISSION_PACKET_BUDGET', `Mission packet for role ${input.roleId} is ${actualBytes} bytes, exceeding its ` +
377
+ `derived ${derivedBudget}-byte mission budget; the evidence index is not truncated to fit.`, { roleId: input.roleId, actualBytes, maxInputBytes: derivedBudget });
378
+ }
379
+ return packet;
380
+ }
304
381
  export function operatingAdvisorMessages(input) {
305
382
  return [
306
383
  {
@@ -510,6 +587,25 @@ export async function dispatchOperatingAdvisors(input) {
510
587
  const roleRegistry = (await loadOperatingProtocol()).listOperatingRoles();
511
588
  const protocol = await loadOperatingProtocol();
512
589
  const capabilityByRole = new Map(roleRegistry.map((role) => [role.id, role.capabilityTier ?? 'analysis-high']));
590
+ // Canonical registry order so results and provenance are byte-identical across
591
+ // parallel/sequential dispatch and across the order roles arrive in (FR4).
592
+ const roleOrder = new Map(roleRegistry.map((role, index) => [role.id, index]));
593
+ const registryDefaultMode = new Map(roleRegistry.map((role) => [role.id, operatingRegistryDispatchMode(role)]));
594
+ // The runtime's ability to enforce the bounded read-only boundary is resolved
595
+ // once per dispatch and fails closed: a runtime whose isolation cannot be
596
+ // verified never receives a native lens (FR2).
597
+ const runtimeEnforcesBoundedReadOnly = await operatingRuntimeEnforcesBoundedReadOnly(input.runtime);
598
+ // A structured adapter can never host a native lens; only a native-isolated
599
+ // adapter (whose isolation `assertAdvisorIsolation` has already proven to be
600
+ // enforced) is native-capable.
601
+ const adapterNativeCapable = input.adapter.mode === 'native-isolated';
602
+ const resolveMode = (roleId) => resolveOperatingDispatchMode({
603
+ roleId,
604
+ registryDefault: registryDefaultMode.get(roleId) ?? 'mission',
605
+ override: input.dispatchModeOverrides?.[roleId],
606
+ runtimeEnforcesBoundedReadOnly,
607
+ adapterNativeCapable,
608
+ });
513
609
  const skipped = [];
514
610
  const runnable = [];
515
611
  for (const role of input.readiness.roles) {
@@ -599,25 +695,40 @@ export async function dispatchOperatingAdvisors(input) {
599
695
  protocol.validateOperatingRoleResultDigest(result);
600
696
  return { ok: true, result, modelCalls: roleModelCalls };
601
697
  }
602
- const dispatched = input.adapter.parallelDispatch
603
- ? await Promise.all(runnable.map((role) => dispatchRole(role)))
604
- : await runnable.reduce(async (pending, role) => [...(await pending), await dispatchRole(role)], Promise.resolve([]));
698
+ // Fan the per-role dispatch out in parallel where the adapter reports it,
699
+ // sequentially otherwise. The orchestrator returns results in `runnable` order
700
+ // regardless of dispatch style, and results are sorted into canonical registry
701
+ // order below so the reduced events are byte-identical across parallel and
702
+ // sequential dispatch and across dispatch order (FR4/E-004).
703
+ const dispatched = await runMissionDispatchFanOut({
704
+ items: runnable,
705
+ parallel: Boolean(input.adapter.parallelDispatch),
706
+ run: (role) => dispatchRole(role),
707
+ });
605
708
  const results = dispatched
606
709
  .filter((entry) => entry.ok)
607
- .map((entry) => entry.result);
710
+ .map((entry) => entry.result)
711
+ .sort((left, right) => (roleOrder.get(left.roleId) ?? Number.MAX_SAFE_INTEGER) -
712
+ (roleOrder.get(right.roleId) ?? Number.MAX_SAFE_INTEGER));
608
713
  const failed = dispatched
609
714
  .filter((entry) => !entry.ok)
610
715
  .map(({ roleId, message }) => ({ roleId, message }));
611
716
  const modelCalls = dispatched.reduce((total, entry) => total + entry.modelCalls, 0);
612
717
  return {
613
718
  results,
614
- provenance: results.map((result) => ({
615
- roleId: result.roleId,
616
- runtime: input.runtime ?? input.adapter.id,
617
- adapterId: input.adapter.id,
618
- capability: input.adapter.capability,
619
- dispatch: input.adapter.parallelDispatch ? 'parallel' : 'sequential',
620
- })),
719
+ provenance: results.map((result) => {
720
+ const resolution = resolveMode(result.roleId);
721
+ return {
722
+ roleId: result.roleId,
723
+ runtime: input.runtime ?? input.adapter.id,
724
+ adapterId: input.adapter.id,
725
+ capability: input.adapter.capability,
726
+ dispatch: input.adapter.parallelDispatch ? 'parallel' : 'sequential',
727
+ dispatchMode: resolution.mode,
728
+ isolation: resolution.isolation,
729
+ reconciliation: resolution.reconciliation,
730
+ };
731
+ }),
621
732
  skipped,
622
733
  failed,
623
734
  blocked: failed.some((entry) => entry.roleId === 'chair') ||