@lesliechan721/aw 0.1.0-beta.11 → 0.1.0-beta.12

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 (52) hide show
  1. package/dist/authoring/scripts/validate-plugin.mjs +33 -42
  2. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  3. package/dist/src/commands/operation-planner.js +11 -1
  4. package/dist/src/commands/operation-planner.js.map +1 -1
  5. package/dist/src/commands/rebuild-command.d.ts +12 -0
  6. package/dist/src/commands/rebuild-command.js +72 -17
  7. package/dist/src/commands/rebuild-command.js.map +1 -1
  8. package/dist/src/commands/rebuild-integration.d.ts +1 -0
  9. package/dist/src/commands/rebuild-integration.js +138 -41
  10. package/dist/src/commands/rebuild-integration.js.map +1 -1
  11. package/dist/src/commands/status-v6.js +6 -6
  12. package/dist/src/commands/status-v6.js.map +1 -1
  13. package/dist/src/index.js +52 -14
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/portable/materializer.js +5 -3
  16. package/dist/src/portable/materializer.js.map +1 -1
  17. package/dist/src/tui/console-app-v4.js +1 -21
  18. package/dist/src/tui/console-app-v4.js.map +1 -1
  19. package/dist/src/tui/controller-runtime.js +165 -48
  20. package/dist/src/tui/controller-runtime.js.map +1 -1
  21. package/dist/src/tui/controller.d.ts +4 -4
  22. package/dist/src/tui/controller.js +19 -7
  23. package/dist/src/tui/controller.js.map +1 -1
  24. package/dist/src/tui/diagnostics.js +6 -6
  25. package/dist/src/tui/diagnostics.js.map +1 -1
  26. package/dist/src/tui/operation-review-planner.js +66 -19
  27. package/dist/src/tui/operation-review-planner.js.map +1 -1
  28. package/dist/src/utils/artifact-plan.d.ts +2 -2
  29. package/dist/src/utils/artifact-plan.js +8 -6
  30. package/dist/src/utils/artifact-plan.js.map +1 -1
  31. package/dist/src/utils/artifact-renderer.js +96 -77
  32. package/dist/src/utils/artifact-renderer.js.map +1 -1
  33. package/dist/src/utils/artifact-request.d.ts +5 -0
  34. package/dist/src/utils/artifact-request.js +40 -0
  35. package/dist/src/utils/artifact-request.js.map +1 -1
  36. package/dist/src/utils/plugin-config-impact.d.ts +33 -0
  37. package/dist/src/utils/plugin-config-impact.js +298 -0
  38. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  39. package/dist/src/utils/plugin-config-write.d.ts +22 -2
  40. package/dist/src/utils/plugin-config-write.js +368 -104
  41. package/dist/src/utils/plugin-config-write.js.map +1 -1
  42. package/dist/src/utils/plugin-config.d.ts +10 -0
  43. package/dist/src/utils/plugin-config.js +39 -22
  44. package/dist/src/utils/plugin-config.js.map +1 -1
  45. package/dist/src/utils/plugin-scripts.js +47 -39
  46. package/dist/src/utils/plugin-scripts.js.map +1 -1
  47. package/dist/src/utils/project-boundary.js +22 -9
  48. package/dist/src/utils/project-boundary.js.map +1 -1
  49. package/dist/src/utils/sensitive-content.d.ts +3 -0
  50. package/dist/src/utils/sensitive-content.js +28 -7
  51. package/dist/src/utils/sensitive-content.js.map +1 -1
  52. package/package.json +3 -3
@@ -0,0 +1,298 @@
1
+ import crypto from 'node:crypto';
2
+ import { canonicalizePluginConfigValues, stablePluginConfigStringify, } from '@lesliechan721/aw-plugin-core/manifest';
3
+ import { coercePluginConfigUpdates, readPluginConfigStore, resolveAwProjectRoot, resolveEffectivePluginConfigFromStores, } from './plugin-config.js';
4
+ function configIdentity(plugin) {
5
+ return plugin.sourceId ? {
6
+ sourceId: plugin.sourceId,
7
+ sourceIdentity: plugin.sourceIdentity,
8
+ logicalIdentity: plugin.catalogLogicalIdentity,
9
+ } : {};
10
+ }
11
+ function targetKey(target) {
12
+ return `${target.platform}\0${target.scope}\0${target.projectKey ?? ''}`;
13
+ }
14
+ function dedupeTargets(targets) {
15
+ const output = new Map();
16
+ for (const target of targets)
17
+ output.set(targetKey(target), target);
18
+ return [...output.values()];
19
+ }
20
+ function configValuesEqual(left, right, keys = [...new Set([...Object.keys(left), ...Object.keys(right)])]) {
21
+ return keys.every((key) => {
22
+ const leftHas = Object.hasOwn(left, key);
23
+ const rightHas = Object.hasOwn(right, key);
24
+ return leftHas === rightHas
25
+ && (!leftHas || stablePluginConfigStringify(left[key]) === stablePluginConfigStringify(right[key]));
26
+ });
27
+ }
28
+ function storeEvidence(store) {
29
+ return {
30
+ exists: store.exists,
31
+ state: store.state,
32
+ ...(store.rawDigest ? { rawDigest: store.rawDigest } : {}),
33
+ };
34
+ }
35
+ function digestStores(stores) {
36
+ return `sha256:${crypto.createHash('sha256').update(JSON.stringify({
37
+ user: storeEvidence(stores.user),
38
+ ...(stores.project ? { project: storeEvidence(stores.project) } : {}),
39
+ })).digest('hex')}`;
40
+ }
41
+ function cloneStore(store, values) {
42
+ const canonical = canonicalizePluginConfigValues(values);
43
+ return {
44
+ path: store.path,
45
+ exists: Object.keys(canonical).length > 0,
46
+ state: Object.keys(canonical).length > 0 ? 'ready' : 'missing',
47
+ values: canonical,
48
+ issues: [],
49
+ };
50
+ }
51
+ function targetArtifactDeclarations(plugin, target) {
52
+ return (plugin.manifest.artifacts?.targets ?? []).filter((declaration) => declaration.platform === target.platform
53
+ && (declaration.target === 'codex.skill'
54
+ && declaration.delivery.mode === 'codex-native'
55
+ || declaration.scopes.includes(target.scope)));
56
+ }
57
+ function nativeDeclaration(declaration) {
58
+ return declaration.target === 'codex.skill'
59
+ && declaration.delivery.mode === 'codex-native'
60
+ && typeof declaration.skillKey === 'string';
61
+ }
62
+ function rendererProjectionEqual(before, after, refreshKeys) {
63
+ const keys = new Set(refreshKeys);
64
+ if (!configValuesEqual(before.values, after.values, refreshKeys))
65
+ return false;
66
+ if ([...keys].some((key) => before.sources[key] !== after.sources[key]))
67
+ return false;
68
+ const issueProjection = (config) => config.issues
69
+ .filter((issue) => keys.has(issue.key))
70
+ .map((issue) => JSON.stringify(issue))
71
+ .sort((left, right) => left.localeCompare(right, 'en'));
72
+ return JSON.stringify(issueProjection(before)) === JSON.stringify(issueProjection(after));
73
+ }
74
+ function unknownImpact(options) {
75
+ const affectedTargets = dedupeTargets(options.visibleTargets);
76
+ const sharedNativeRenderTargets = new Map();
77
+ for (const target of affectedTargets) {
78
+ if (options.scope !== 'user')
79
+ continue;
80
+ for (const declaration of targetArtifactDeclarations(options.plugin, target)) {
81
+ if (!nativeDeclaration(declaration) || declaration.refreshKeys.length === 0)
82
+ continue;
83
+ sharedNativeRenderTargets.set(declaration.id, {
84
+ id: declaration.id,
85
+ skillKey: declaration.skillKey,
86
+ refreshKeys: [...declaration.refreshKeys],
87
+ });
88
+ }
89
+ }
90
+ return {
91
+ impactState: 'unknown',
92
+ noEffectiveChange: false,
93
+ storeChanged: options.storeChanged,
94
+ storeDigest: digestStores(options.stores),
95
+ changedKeys: options.changedKeys,
96
+ updatedKeys: options.updatedKeys,
97
+ removedKeys: options.removedKeys,
98
+ staleRemovedKeys: options.staleRemovedKeys,
99
+ affectedTargets,
100
+ sharedNativeRenderTargets: [...sharedNativeRenderTargets.values()],
101
+ };
102
+ }
103
+ export async function analyzePluginConfigMutationImpact(options) {
104
+ const schema = options.plugin.manifest.config?.fields;
105
+ const needsProjectStore = options.scope === 'project'
106
+ || options.visibleTargets.some((target) => target.scope === 'project');
107
+ const identity = configIdentity(options.plugin);
108
+ const readStore = async (scope) => {
109
+ try {
110
+ return await readPluginConfigStore({
111
+ ...identity,
112
+ pluginName: options.plugin.manifest.name,
113
+ scope,
114
+ cwd: options.cwd,
115
+ env: options.env,
116
+ schema,
117
+ });
118
+ }
119
+ catch {
120
+ return {
121
+ path: '',
122
+ exists: true,
123
+ state: 'invalid',
124
+ values: {},
125
+ invalidCode: 'invalidValues',
126
+ issues: ['The store cannot be read.'],
127
+ };
128
+ }
129
+ };
130
+ const [userStore, projectStore] = await Promise.all([
131
+ readStore('user'),
132
+ needsProjectStore
133
+ ? readStore('project')
134
+ : undefined,
135
+ ]);
136
+ const stores = { user: userStore, ...(projectStore ? { project: projectStore } : {}) };
137
+ const editedStore = options.scope === 'user' ? userStore : projectStore;
138
+ const requestedRemoveKeys = [...new Set(options.mutation.kind === 'patch' ? options.mutation.removeKeys ?? [] : [])];
139
+ let updatedKeys = [];
140
+ let removedKeys = [];
141
+ let staleRemovedKeys = [];
142
+ let coercedUpdates = {};
143
+ let storeChanged = options.mutation.kind === 'reset' && editedStore.exists;
144
+ if (editedStore.state !== 'invalid' && options.mutation.kind === 'reset') {
145
+ removedKeys = Object.keys(editedStore.values);
146
+ staleRemovedKeys = schema
147
+ ? removedKeys.filter((key) => !schema[key])
148
+ : [...removedKeys];
149
+ }
150
+ if (editedStore.state !== 'invalid' && options.mutation.kind === 'patch' && schema) {
151
+ coercedUpdates = await coercePluginConfigUpdates({
152
+ schema,
153
+ updates: options.mutation.updates ?? {},
154
+ cwd: options.cwd,
155
+ });
156
+ for (const key of requestedRemoveKeys) {
157
+ if (!schema[key] && !Object.hasOwn(editedStore.values, key)) {
158
+ throw new Error(`Unknown config key "${key}".`);
159
+ }
160
+ }
161
+ removedKeys = requestedRemoveKeys.filter((key) => Object.hasOwn(editedStore.values, key));
162
+ staleRemovedKeys = removedKeys.filter((key) => !schema[key]);
163
+ updatedKeys = Object.entries(coercedUpdates)
164
+ .filter(([key, value]) => !Object.hasOwn(editedStore.values, key)
165
+ || stablePluginConfigStringify(editedStore.values[key])
166
+ !== stablePluginConfigStringify(value))
167
+ .map(([key]) => key);
168
+ storeChanged = updatedKeys.length > 0 || removedKeys.length > 0;
169
+ }
170
+ const changedKeys = [...updatedKeys, ...removedKeys];
171
+ if (!schema || editedStore.state === 'invalid') {
172
+ return unknownImpact({
173
+ stores,
174
+ plugin: options.plugin,
175
+ scope: options.scope,
176
+ visibleTargets: options.visibleTargets,
177
+ storeChanged: options.mutation.kind === 'reset' ? editedStore.exists : true,
178
+ changedKeys: changedKeys.length > 0
179
+ ? changedKeys
180
+ : options.mutation.kind === 'patch'
181
+ ? [...Object.keys(options.mutation.updates ?? {}), ...requestedRemoveKeys]
182
+ : [],
183
+ updatedKeys,
184
+ removedKeys,
185
+ staleRemovedKeys,
186
+ });
187
+ }
188
+ if (!storeChanged) {
189
+ return {
190
+ impactState: 'known',
191
+ noEffectiveChange: true,
192
+ storeChanged: false,
193
+ storeDigest: digestStores(stores),
194
+ changedKeys: [],
195
+ updatedKeys: [],
196
+ removedKeys: [],
197
+ staleRemovedKeys: [],
198
+ affectedTargets: [],
199
+ sharedNativeRenderTargets: [],
200
+ };
201
+ }
202
+ const nextValues = options.mutation.kind === 'reset' ? {} : { ...editedStore.values };
203
+ if (options.mutation.kind === 'patch') {
204
+ for (const key of requestedRemoveKeys)
205
+ delete nextValues[key];
206
+ for (const [key, value] of Object.entries(coercedUpdates))
207
+ nextValues[key] = value;
208
+ }
209
+ const afterStores = {
210
+ user: options.scope === 'user' ? cloneStore(userStore, nextValues) : userStore,
211
+ ...(projectStore ? {
212
+ project: options.scope === 'project' ? cloneStore(projectStore, nextValues) : projectStore,
213
+ } : {}),
214
+ };
215
+ const projectRoot = resolveAwProjectRoot(options.cwd);
216
+ const resolved = new Map();
217
+ const resolveScope = async (scope) => {
218
+ const existing = resolved.get(scope);
219
+ if (existing)
220
+ return existing;
221
+ const pair = {
222
+ before: await resolveEffectivePluginConfigFromStores({
223
+ pluginName: options.plugin.manifest.name,
224
+ manifest: options.plugin.manifest,
225
+ targetScope: scope,
226
+ projectRoot,
227
+ stores,
228
+ }),
229
+ after: await resolveEffectivePluginConfigFromStores({
230
+ pluginName: options.plugin.manifest.name,
231
+ manifest: options.plugin.manifest,
232
+ targetScope: scope,
233
+ projectRoot,
234
+ stores: afterStores,
235
+ }),
236
+ };
237
+ resolved.set(scope, pair);
238
+ return pair;
239
+ };
240
+ try {
241
+ const affectedTargets = [];
242
+ const sharedNativeRenderTargets = new Map();
243
+ for (const target of dedupeTargets(options.visibleTargets)) {
244
+ let affected = false;
245
+ const declarations = targetArtifactDeclarations(options.plugin, target);
246
+ if (options.plugin.manifest.scripts?.preApply
247
+ || (options.plugin.manifest.dependencies?.length ?? 0) > 0) {
248
+ const config = await resolveScope(target.scope);
249
+ affected = !configValuesEqual(config.before.values, config.after.values);
250
+ }
251
+ for (const declaration of declarations) {
252
+ if (declaration.refreshKeys.length === 0)
253
+ continue;
254
+ const renderScope = nativeDeclaration(declaration) ? 'user' : target.scope;
255
+ const config = await resolveScope(renderScope);
256
+ const changed = !rendererProjectionEqual(config.before, config.after, declaration.refreshKeys);
257
+ if (!changed)
258
+ continue;
259
+ affected = true;
260
+ if (nativeDeclaration(declaration)) {
261
+ sharedNativeRenderTargets.set(declaration.id, {
262
+ id: declaration.id,
263
+ skillKey: declaration.skillKey,
264
+ refreshKeys: [...declaration.refreshKeys],
265
+ });
266
+ }
267
+ }
268
+ if (affected)
269
+ affectedTargets.push(target);
270
+ }
271
+ return {
272
+ impactState: 'known',
273
+ noEffectiveChange: affectedTargets.length === 0,
274
+ storeChanged: true,
275
+ storeDigest: digestStores(stores),
276
+ changedKeys,
277
+ updatedKeys,
278
+ removedKeys,
279
+ staleRemovedKeys,
280
+ affectedTargets,
281
+ sharedNativeRenderTargets: [...sharedNativeRenderTargets.values()],
282
+ };
283
+ }
284
+ catch {
285
+ return unknownImpact({
286
+ stores,
287
+ plugin: options.plugin,
288
+ scope: options.scope,
289
+ visibleTargets: options.visibleTargets,
290
+ storeChanged: true,
291
+ changedKeys,
292
+ updatedKeys,
293
+ removedKeys,
294
+ staleRemovedKeys,
295
+ });
296
+ }
297
+ }
298
+ //# sourceMappingURL=plugin-config-impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-config-impact.js","sourceRoot":"","sources":["../../../src/utils/plugin-config-impact.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { RebuildCommandRuntime } from '../commands/rebuild-command.js';
1
+ import type { PreApplyAuthorizationTarget, RebuildCommandRuntime } from '../commands/rebuild-command.js';
2
2
  import { syncWriteCommand } from '../commands/write-commands.js';
3
- import { type ConfigApplyResult, type ConfigReceiptFieldEntry, type ConfigMutationCommand, type ConfigMutationReceiptBase, type ConfigSchemaEvidence, type PluginMeta, type RebuildReceiptOverallState, type ReceiptTargetIdentity, type Scope } from '../types.js';
3
+ import { type ConfigApplyResult, type ConfigReceiptFieldEntry, type ConfigMutationCommand, type ConfigMutationReceiptBase, type ConfigSchemaEvidence, type PluginMeta, type RebuildReceiptOverallState, type ReceiptTargetIdentity, type ReceiptTargetResult, type Scope } from '../types.js';
4
4
  import { type NativeCliRunner } from './native-cli.js';
5
5
  import { summarizeEffectivePluginConfig } from './plugin-config.js';
6
6
  import { type AwHomeMutationToken } from './aw-home-mutation-lock.js';
@@ -47,6 +47,20 @@ interface ConfigRuntimeReplayReceipt {
47
47
  otherProjectsMayRequireSync: false;
48
48
  }
49
49
  export declare function configWriteStateForError(error: unknown): 'notStarted' | 'failed';
50
+ export declare function resolveConfigPreApplyAuthorization(options: {
51
+ plugin: PluginMeta;
52
+ scope: Scope;
53
+ cwd: string;
54
+ env?: NodeJS.ProcessEnv;
55
+ applyTargets: ReceiptTargetIdentity[];
56
+ nativeCliRunner?: NativeCliRunner;
57
+ rebuildRuntime?: RebuildCommandRuntime;
58
+ reinstallCommandImpl?: ReinstallCommand;
59
+ }): Promise<{
60
+ targets: PreApplyAuthorizationTarget[];
61
+ availableApplyTargets: ReceiptTargetIdentity[];
62
+ unavailableTargetResults: ReceiptTargetResult[];
63
+ }>;
50
64
  export declare function replayConfigRuntimeWrites(options: {
51
65
  plugin: PluginMeta;
52
66
  scope: Scope;
@@ -59,6 +73,8 @@ export declare function replayConfigRuntimeWrites(options: {
59
73
  rebuildRuntime?: RebuildCommandRuntime;
60
74
  awHomeMutationToken?: AwHomeMutationToken;
61
75
  sharedNativeApplyConfirmed?: boolean;
76
+ preApplyConfirmed?: boolean;
77
+ preApplyAuthorizedTargets?: readonly PreApplyAuthorizationTarget[];
62
78
  }): Promise<ConfigRuntimeReplayReceipt>;
63
79
  type ApplyPluginConfigWriteOptions = {
64
80
  plugin?: PluginMeta | null;
@@ -75,6 +91,8 @@ type ApplyPluginConfigWriteOptions = {
75
91
  request: PluginConfigWriteRequest;
76
92
  apply?: boolean;
77
93
  sharedNativeApplyConfirmed?: boolean;
94
+ preApplyConfirmed?: boolean;
95
+ preApplyAuthorizedTargets?: readonly PreApplyAuthorizationTarget[];
78
96
  reviewPreflight?: () => Promise<void> | void;
79
97
  };
80
98
  export declare function applyPluginConfigWrite(options: ApplyPluginConfigWriteOptions): Promise<PluginConfigWriteReceipt>;
@@ -96,6 +114,8 @@ type ResetPluginConfigWriteOptions = {
96
114
  reviewPreflight?: () => Promise<void> | void;
97
115
  apply?: boolean;
98
116
  sharedNativeApplyConfirmed?: boolean;
117
+ preApplyConfirmed?: boolean;
118
+ preApplyAuthorizedTargets?: readonly PreApplyAuthorizationTarget[];
99
119
  };
100
120
  export declare function resetPluginConfigWithHelper(options: ResetPluginConfigWriteOptions): Promise<ResetPluginConfigWriteReceipt>;
101
121
  export declare function describeResetAffectedFields(options: {