@noodleseed/one 0.115.0 → 0.116.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 (50) hide show
  1. package/dist/agent-product-skill-doctor.js +19 -4
  2. package/dist/agent-product-skill-doctor.js.map +1 -1
  3. package/dist/agent-product-skill-output.d.ts +7 -0
  4. package/dist/agent-product-skill-output.d.ts.map +1 -0
  5. package/dist/agent-product-skill-output.js +23 -0
  6. package/dist/agent-product-skill-output.js.map +1 -0
  7. package/dist/agent-product-skill-reconcile.d.ts +22 -0
  8. package/dist/agent-product-skill-reconcile.d.ts.map +1 -0
  9. package/dist/agent-product-skill-reconcile.js +260 -0
  10. package/dist/agent-product-skill-reconcile.js.map +1 -0
  11. package/dist/agent-product-skill-state.d.ts +9 -27
  12. package/dist/agent-product-skill-state.d.ts.map +1 -1
  13. package/dist/agent-product-skill-state.js +37 -83
  14. package/dist/agent-product-skill-state.js.map +1 -1
  15. package/dist/agent-product-skill.d.ts +15 -11
  16. package/dist/agent-product-skill.d.ts.map +1 -1
  17. package/dist/agent-product-skill.js +5 -177
  18. package/dist/agent-product-skill.js.map +1 -1
  19. package/dist/agents-doctor.d.ts.map +1 -1
  20. package/dist/agents-doctor.js +25 -13
  21. package/dist/agents-doctor.js.map +1 -1
  22. package/dist/agents.d.ts +3 -1
  23. package/dist/agents.d.ts.map +1 -1
  24. package/dist/agents.js +42 -5
  25. package/dist/agents.js.map +1 -1
  26. package/dist/commands/catalog-data-bootstrap-pre-auth.d.ts.map +1 -1
  27. package/dist/commands/catalog-data-bootstrap-pre-auth.js +14 -0
  28. package/dist/commands/catalog-data-bootstrap-pre-auth.js.map +1 -1
  29. package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.d.ts +1 -1
  30. package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.d.ts.map +1 -1
  31. package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js +24 -0
  32. package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js.map +1 -1
  33. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +1 -0
  34. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts.map +1 -1
  35. package/node_modules/@noodle-borg/agent-kit/dist/index.js +1 -0
  36. package/node_modules/@noodle-borg/agent-kit/dist/index.js.map +1 -1
  37. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.d.ts +36 -0
  38. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.d.ts.map +1 -0
  39. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js +116 -0
  40. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js.map +1 -0
  41. package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.d.ts.map +1 -1
  42. package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.js +14 -2
  43. package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.js.map +1 -1
  44. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts +1 -1
  45. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts.map +1 -1
  46. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +8 -2
  47. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -1
  48. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  49. package/node_modules/@noodleseed/assistant/package.json +1 -1
  50. package/package.json +1 -1
@@ -52,10 +52,17 @@ function inspectTarget(input) {
52
52
  };
53
53
  }
54
54
  if (read.kind === 'absent') {
55
- const exact = input.files.every((file) => {
56
- const path = join(input.project, file.path);
57
- return !existsSync(path) || readFileSync(path, 'utf8') === file.content;
55
+ const extras = unexpectedProductSkillPaths({
56
+ project: input.project,
57
+ target: input.target,
58
+ skillSlug: input.skillSlug,
59
+ expectedPaths: input.files.map((file) => file.path),
58
60
  });
61
+ const exact = extras.length === 0 &&
62
+ input.files.every((file) => {
63
+ const path = join(input.project, file.path);
64
+ return !existsSync(path) || readFileSync(path, 'utf8') === file.content;
65
+ });
59
66
  return {
60
67
  name,
61
68
  level: 'WARN',
@@ -94,14 +101,22 @@ function inspectTarget(input) {
94
101
  message: 'generated app skill files are missing; preview noodle agents setup before --write',
95
102
  };
96
103
  }
104
+ if (read.migrationRequired) {
105
+ return {
106
+ name,
107
+ level: 'WARN',
108
+ code: 'agent_skill_stale',
109
+ message: 'ownership record schema is outdated; preview explicit app-skill regeneration before migration',
110
+ };
111
+ }
97
112
  const expected = createProductSkillState({
98
113
  target: input.target,
99
114
  artifact: input.artifact,
100
115
  bundle: {
116
+ schemaVersion: 1,
101
117
  rendererVersion: input.rendererVersion,
102
118
  bundleSha256: input.bundleSha256,
103
119
  },
104
- skillSlug: input.skillSlug,
105
120
  files: input.files,
106
121
  });
107
122
  if (!sameState(state, expected)) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-product-skill-doctor.js","sourceRoot":"","sources":["../src/agent-product-skill-doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-product-skill-doctor.js","sourceRoot":"","sources":["../src/agent-product-skill-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ProductSkillSetupReport } from './agent-product-skill.js';
2
+ export declare function productSkillRecoveryNext(issue: ProductSkillSetupReport['issues'][number] | undefined): string;
3
+ export declare function nextAgentSetupCommand(args: {
4
+ readonly write: boolean;
5
+ readonly replaceModifiedAppSkill: boolean;
6
+ }, productSkill: ProductSkillSetupReport | undefined): string | undefined;
7
+ //# sourceMappingURL=agent-product-skill-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-product-skill-output.d.ts","sourceRoot":"","sources":["../src/agent-product-skill-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,GAC3D,MAAM,CAQR;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAA;CAAE,EAC5E,YAAY,EAAE,uBAAuB,GAAG,SAAS,GAChD,MAAM,GAAG,SAAS,CAepB"}
@@ -0,0 +1,23 @@
1
+ export function productSkillRecoveryNext(issue) {
2
+ if (issue?.code === 'agent_skill_modified' && issue.recovery === 'replace_modified_app_skill') {
3
+ return 'Review the modified app-skill files, then preview noodle agents setup --regenerate-app-skill --replace-modified-app-skill.';
4
+ }
5
+ if (issue?.code === 'agent_skill_invalid_state') {
6
+ return 'Review the app-skill ownership record without deleting local app files.';
7
+ }
8
+ return 'Review noodle agents setup, then rerun the exact previewed write when safe.';
9
+ }
10
+ export function nextAgentSetupCommand(args, productSkill) {
11
+ const issue = productSkill?.issues[0];
12
+ if (issue?.code === 'agent_skill_modified' && issue.recovery === 'replace_modified_app_skill') {
13
+ return 'noodle agents setup --regenerate-app-skill --replace-modified-app-skill';
14
+ }
15
+ if (issue !== undefined)
16
+ return undefined;
17
+ const pendingRegeneration = productSkill?.targets.some((target) => target.requiresRegeneration && !target.applied && target.issue === undefined);
18
+ if (pendingRegeneration) {
19
+ return `noodle agents setup --write --regenerate-app-skill${args.replaceModifiedAppSkill ? ' --replace-modified-app-skill' : ''}`;
20
+ }
21
+ return args.write ? undefined : 'noodle agents setup --write';
22
+ }
23
+ //# sourceMappingURL=agent-product-skill-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-product-skill-output.js","sourceRoot":"","sources":["../src/agent-product-skill-output.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CACtC,KAA4D;IAE5D,IAAI,KAAK,EAAE,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,QAAQ,KAAK,4BAA4B,EAAE,CAAC;QAC9F,OAAO,4HAA4H,CAAC;IACtI,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,KAAK,2BAA2B,EAAE,CAAC;QAChD,OAAO,yEAAyE,CAAC;IACnF,CAAC;IACD,OAAO,6EAA6E,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAA4E,EAC5E,YAAiD;IAEjD,MAAM,KAAK,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,QAAQ,KAAK,4BAA4B,EAAE,CAAC;QAC9F,OAAO,yEAAyE,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,mBAAmB,GAAG,YAAY,EAAE,OAAO,CAAC,IAAI,CACpD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CACzF,CAAC;IACF,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,qDACL,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EACnE,EAAE,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAChE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { AgentTarget, RenderedProductSkillBundleV1 } from '@noodle-borg/agent-kit';
2
+ import type { AppPackageArtifactV1 } from '@noodle-borg/compiler';
3
+ import type { ProductSkillSetupReport, ProductSkillTargetReport } from './agent-product-skill.js';
4
+ export interface ProductSkillReconcileInput {
5
+ readonly project: string;
6
+ readonly target: AgentTarget;
7
+ readonly write: boolean;
8
+ readonly regenerateAppSkill: boolean;
9
+ readonly replaceModifiedAppSkill: boolean;
10
+ readonly artifact: AppPackageArtifactV1;
11
+ readonly bundle: RenderedProductSkillBundleV1;
12
+ readonly skillSlug: string;
13
+ }
14
+ export declare function reconcileProductSkillTarget(input: ProductSkillReconcileInput): ProductSkillTargetReport;
15
+ export declare function orphanedProductSkillSetupReport(input: {
16
+ readonly project: string;
17
+ readonly targets: readonly AgentTarget[];
18
+ readonly write: boolean;
19
+ readonly regenerateAppSkill?: boolean;
20
+ readonly replaceModifiedAppSkill?: boolean;
21
+ }): ProductSkillSetupReport | undefined;
22
+ //# sourceMappingURL=agent-product-skill-reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-product-skill-reconcile.d.ts","sourceRoot":"","sources":["../src/agent-product-skill-reconcile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,4BAA4B,EAE7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAGV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAelC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,0BAA0B,GAChC,wBAAwB,CA2H1B;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC5C,GAAG,uBAAuB,GAAG,SAAS,CA2FtC"}
@@ -0,0 +1,260 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { assertProductSkillPathsSafe, createProductSkillState, inspectProductSkillStateFiles, productSkillStatePath, readProductSkillState, removeProductSkillFiles, removeProductSkillState, unexpectedProductSkillPaths, writeProductSkillState, } from './agent-product-skill-state.js';
4
+ import { atomicWriteProjectFile } from './agent-skills-state.js';
5
+ export function reconcileProductSkillTarget(input) {
6
+ const files = targetFiles(input.bundle, input.target);
7
+ const statePath = productSkillStatePath(input.target);
8
+ try {
9
+ assertProductSkillPathsSafe({
10
+ project: input.project,
11
+ target: input.target,
12
+ paths: files.map((file) => file.path),
13
+ });
14
+ const read = readProductSkillState(input.project, input.target);
15
+ if (read.kind === 'invalid') {
16
+ return invalidTarget(input.target, statePath, files, 'ownership record is malformed');
17
+ }
18
+ if (read.kind === 'absent')
19
+ return adoptOrCreateTarget(input, files, statePath);
20
+ const state = read.state;
21
+ assertProductSkillPathsSafe({
22
+ project: input.project,
23
+ target: input.target,
24
+ paths: state.files.map((file) => file.path),
25
+ });
26
+ const extras = unexpectedProductSkillPaths({
27
+ project: input.project,
28
+ target: input.target,
29
+ skillSlug: state.app.skillSlug,
30
+ expectedPaths: state.files.map((file) => file.path),
31
+ });
32
+ if (extras.length > 0) {
33
+ return blockedTarget(input.target, statePath, files, `unowned file collision: ${extras[0]}`);
34
+ }
35
+ const disk = inspectProductSkillStateFiles(input.project, state);
36
+ const replaceModified = input.regenerateAppSkill && input.replaceModifiedAppSkill;
37
+ if (disk.modified && !replaceModified) {
38
+ return blockedTarget(input.target, statePath, files, 'generated files differ from their recorded hashes', { recovery: 'replace_modified_app_skill' });
39
+ }
40
+ const oldPaths = new Set(state.files.map((file) => file.path));
41
+ const layoutChanged = state.app.name !== input.artifact.app.name ||
42
+ state.app.skillSlug !== input.skillSlug ||
43
+ !samePaths(state.files, files);
44
+ if (layoutChanged) {
45
+ const nextExtras = unexpectedProductSkillPaths({
46
+ project: input.project,
47
+ target: input.target,
48
+ skillSlug: input.skillSlug,
49
+ expectedPaths: files.map((file) => file.path),
50
+ });
51
+ if (nextExtras.length > 0) {
52
+ return blockedTarget(input.target, statePath, files, `unowned destination collision: ${nextExtras[0]}`);
53
+ }
54
+ const collision = files.find((file) => {
55
+ const path = join(input.project, file.path);
56
+ return (!oldPaths.has(file.path) &&
57
+ existsSync(path) &&
58
+ readFileSync(path, 'utf8') !== file.content);
59
+ });
60
+ if (collision !== undefined) {
61
+ return blockedTarget(input.target, statePath, files, `unowned destination collision: ${collision.path}`);
62
+ }
63
+ }
64
+ const desiredPaths = new Set(files.map((file) => file.path));
65
+ const actions = state.files
66
+ .filter((file) => !desiredPaths.has(file.path))
67
+ .map((file) => ({ path: file.path, action: 'removed' }));
68
+ actions.push(...files.map((file) => {
69
+ const path = join(input.project, file.path);
70
+ if (!existsSync(path))
71
+ return { path: file.path, action: 'created' };
72
+ return readFileSync(path, 'utf8') === file.content
73
+ ? { path: file.path, action: 'unchanged' }
74
+ : { path: file.path, action: 'updated' };
75
+ }));
76
+ const nextState = createProductSkillState({
77
+ target: input.target,
78
+ artifact: input.artifact,
79
+ bundle: input.bundle,
80
+ files,
81
+ });
82
+ const changed = read.migrationRequired ||
83
+ actions.some((action) => action.action !== 'unchanged') ||
84
+ !sameState(state, nextState);
85
+ const apply = changed && input.write && input.regenerateAppSkill;
86
+ if (apply)
87
+ writeTarget(input.project, input.target, files, actions, nextState);
88
+ return {
89
+ target: input.target,
90
+ status: changed && read.migrationRequired && !layoutChanged && !disk.modified
91
+ ? 'stale'
92
+ : changed
93
+ ? 'updated'
94
+ : 'unchanged',
95
+ statePath,
96
+ applied: apply,
97
+ requiresRegeneration: changed,
98
+ stateAction: read.migrationRequired ? 'migrated' : changed ? 'updated' : 'unchanged',
99
+ files: actions,
100
+ };
101
+ }
102
+ catch (cause) {
103
+ return invalidTarget(input.target, statePath, files, errorMessage(cause));
104
+ }
105
+ }
106
+ export function orphanedProductSkillSetupReport(input) {
107
+ const reports = [];
108
+ let app;
109
+ for (const target of input.targets) {
110
+ try {
111
+ const read = readProductSkillState(input.project, target);
112
+ if (read.kind === 'absent')
113
+ continue;
114
+ if (read.kind === 'invalid') {
115
+ reports.push(invalidTarget(target, productSkillStatePath(target), [], 'ownership record is malformed'));
116
+ continue;
117
+ }
118
+ const state = read.state;
119
+ app ??= state.app;
120
+ assertProductSkillPathsSafe({
121
+ project: input.project,
122
+ target,
123
+ paths: state.files.map((file) => file.path),
124
+ });
125
+ const extras = unexpectedProductSkillPaths({
126
+ project: input.project,
127
+ target,
128
+ skillSlug: state.app.skillSlug,
129
+ expectedPaths: state.files.map((file) => file.path),
130
+ });
131
+ if (extras.length > 0) {
132
+ reports.push(blockedTarget(target, productSkillStatePath(target), [], `unowned file collision: ${extras[0]}`));
133
+ continue;
134
+ }
135
+ const disk = inspectProductSkillStateFiles(input.project, state);
136
+ const replaceModified = input.regenerateAppSkill === true && input.replaceModifiedAppSkill === true;
137
+ if (disk.modified && !replaceModified) {
138
+ reports.push(blockedTarget(target, productSkillStatePath(target), [], 'generated files differ from their recorded hashes', { recovery: 'replace_modified_app_skill' }));
139
+ continue;
140
+ }
141
+ const actions = state.files.map((file) => ({
142
+ path: file.path,
143
+ action: existsSync(join(input.project, file.path)) ? 'removed' : 'unchanged',
144
+ }));
145
+ const apply = input.write && input.regenerateAppSkill === true;
146
+ if (apply) {
147
+ removeProductSkillFiles({
148
+ project: input.project,
149
+ target,
150
+ paths: state.files.map((file) => file.path),
151
+ });
152
+ removeProductSkillState(input.project, target);
153
+ }
154
+ reports.push({
155
+ target,
156
+ status: 'removed',
157
+ statePath: productSkillStatePath(target),
158
+ applied: apply,
159
+ requiresRegeneration: true,
160
+ stateAction: 'removed',
161
+ files: actions,
162
+ });
163
+ }
164
+ catch (cause) {
165
+ reports.push(invalidTarget(target, productSkillStatePath(target), [], errorMessage(cause)));
166
+ }
167
+ }
168
+ if (reports.length === 0)
169
+ return undefined;
170
+ const issues = reports.flatMap((target) => target.issue === undefined ? [] : [{ ...target.issue, target: target.target }]);
171
+ return {
172
+ ok: issues.length === 0,
173
+ ...(app === undefined ? {} : { app }),
174
+ targets: reports,
175
+ issues,
176
+ };
177
+ }
178
+ function adoptOrCreateTarget(input, files, statePath) {
179
+ const extras = unexpectedProductSkillPaths({
180
+ project: input.project,
181
+ target: input.target,
182
+ skillSlug: input.skillSlug,
183
+ expectedPaths: files.map((file) => file.path),
184
+ });
185
+ const actions = files.map((file) => {
186
+ const path = join(input.project, file.path);
187
+ if (!existsSync(path))
188
+ return { path: file.path, action: 'created' };
189
+ return readFileSync(path, 'utf8') === file.content
190
+ ? { path: file.path, action: 'unchanged' }
191
+ : { path: file.path, action: 'skipped', reason: 'unowned file collision' };
192
+ });
193
+ if (extras.length > 0 || actions.some((action) => action.action === 'skipped')) {
194
+ return blockedTarget(input.target, statePath, files, `unowned file collision${extras[0] === undefined ? '' : `: ${extras[0]}`}`);
195
+ }
196
+ const state = createProductSkillState({
197
+ target: input.target,
198
+ artifact: input.artifact,
199
+ bundle: input.bundle,
200
+ files,
201
+ });
202
+ if (input.write)
203
+ writeTarget(input.project, input.target, files, actions, state);
204
+ return {
205
+ target: input.target,
206
+ status: actions.some((action) => action.action === 'created') ? 'created' : 'unchanged',
207
+ statePath,
208
+ applied: input.write,
209
+ requiresRegeneration: false,
210
+ stateAction: 'created',
211
+ files: actions,
212
+ };
213
+ }
214
+ function writeTarget(project, target, files, actions, state) {
215
+ for (const file of files) {
216
+ const action = actions.find((candidate) => candidate.path === file.path)?.action;
217
+ if (action === 'created' || action === 'updated') {
218
+ atomicWriteProjectFile(join(project, file.path), file.content);
219
+ }
220
+ }
221
+ const removed = actions
222
+ .filter((action) => action.action === 'removed')
223
+ .map((action) => action.path);
224
+ if (removed.length > 0)
225
+ removeProductSkillFiles({ project, target, paths: removed });
226
+ writeProductSkillState(project, state);
227
+ }
228
+ function targetFiles(bundle, target) {
229
+ const files = bundle.files.filter((file) => file.target === target);
230
+ if (files.length !== 2) {
231
+ throw new Error(`App Package renderer did not return two ${target} files`);
232
+ }
233
+ return files;
234
+ }
235
+ function samePaths(left, right) {
236
+ return (left.length === right.length && left.every((file, index) => file.path === right[index]?.path));
237
+ }
238
+ function sameState(left, right) {
239
+ return JSON.stringify(left) === JSON.stringify(right);
240
+ }
241
+ function blockedTarget(target, statePath, files, message, issue = {}) {
242
+ const code = issue.code ?? 'agent_skill_modified';
243
+ return {
244
+ target,
245
+ status: 'modified',
246
+ statePath,
247
+ applied: false,
248
+ requiresRegeneration: true,
249
+ stateAction: 'unchanged',
250
+ files: files.map((file) => ({ path: file.path, action: 'skipped', reason: message })),
251
+ issue: { code, message, ...(issue.recovery === undefined ? {} : { recovery: issue.recovery }) },
252
+ };
253
+ }
254
+ function invalidTarget(target, statePath, files, message) {
255
+ return blockedTarget(target, statePath, files, message, { code: 'agent_skill_invalid_state' });
256
+ }
257
+ function errorMessage(cause) {
258
+ return cause instanceof Error ? cause.message : 'unknown app product skill reconciliation error';
259
+ }
260
+ //# sourceMappingURL=agent-product-skill-reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-product-skill-reconcile.js","sourceRoot":"","sources":["../src/agent-product-skill-reconcile.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,6 @@
1
- import { type AgentTarget, type RenderedProductSkillBundleV1, type RenderedProductSkillFileV1 } from '@noodle-borg/agent-kit';
2
- import type { AppPackageArtifactV1 } from '@noodle-borg/compiler';
3
- export interface ProductSkillStateFile {
4
- readonly path: string;
5
- readonly sha256: string;
6
- readonly byteLength: number;
7
- }
8
- export interface ProductSkillState {
9
- readonly schemaVersion: 1;
10
- readonly target: AgentTarget;
11
- readonly app: {
12
- readonly name: string;
13
- readonly skillSlug: string;
14
- };
15
- readonly packageSchemaVersion: '1';
16
- readonly rendererVersion: string;
17
- readonly sourceManifestSha256: string;
18
- readonly mcpSurfaceSha256: string;
19
- readonly bundleSha256: string;
20
- readonly files: readonly ProductSkillStateFile[];
21
- }
1
+ import { type AgentTarget, createProductSkillState, type ProductSkillState, type ProductSkillStateFile } from '@noodle-borg/agent-kit';
2
+ export type { ProductSkillState, ProductSkillStateFile };
3
+ export { createProductSkillState };
22
4
  export type ProductSkillStateRead = {
23
5
  readonly kind: 'absent';
24
6
  } | {
@@ -26,17 +8,17 @@ export type ProductSkillStateRead = {
26
8
  } | {
27
9
  readonly kind: 'valid';
28
10
  readonly state: ProductSkillState;
11
+ readonly migrationRequired: boolean;
29
12
  };
30
13
  export declare function productSkillStatePath(target: AgentTarget): string;
31
14
  export declare function readProductSkillState(project: string, target: AgentTarget): ProductSkillStateRead;
32
15
  export declare function writeProductSkillState(project: string, state: ProductSkillState): void;
33
- export declare function createProductSkillState(input: {
16
+ export declare function removeProductSkillState(project: string, target: AgentTarget): void;
17
+ export declare function removeProductSkillFiles(input: {
18
+ readonly project: string;
34
19
  readonly target: AgentTarget;
35
- readonly artifact: AppPackageArtifactV1;
36
- readonly bundle: Pick<RenderedProductSkillBundleV1, 'rendererVersion' | 'bundleSha256'>;
37
- readonly skillSlug: string;
38
- readonly files: readonly RenderedProductSkillFileV1[];
39
- }): ProductSkillState;
20
+ readonly paths: readonly string[];
21
+ }): void;
40
22
  export declare function assertProductSkillPathsSafe(input: {
41
23
  readonly project: string;
42
24
  readonly target: AgentTarget;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-product-skill-state.d.ts","sourceRoot":"","sources":["../src/agent-product-skill-state.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AASlE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,qBAAqB,CAYjG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAItF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,4BAA4B,EAAE,iBAAiB,GAAG,cAAc,CAAC,CAAC;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACvD,GAAG,iBAAiB,CAYpB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,IAAI,CASP;AAED,uGAAuG;AACvG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GAAG,SAAS,MAAM,EAAE,CAOpB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,GACvB;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAkB3D"}
1
+ {"version":3,"file":"agent-product-skill-state.d.ts","sourceRoot":"","sources":["../src/agent-product-skill-state.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,WAAW,EAEhB,uBAAuB,EAEvB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAOhC,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC,CAAC;AAEN,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,qBAAqB,CAYjG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAItF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAIlF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,IAAI,CAsBP;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,IAAI,CASP;AAED,uGAAuG;AACvG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GAAG,SAAS,MAAM,EAAE,CAOpB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,GACvB;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAkB3D"}
@@ -1,8 +1,8 @@
1
- import { existsSync, lstatSync, readdirSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { contentSha256, } from '@noodle-borg/agent-kit';
1
+ import { existsSync, lstatSync, readdirSync, readFileSync, rmdirSync, rmSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { contentSha256, createProductSkillState, decodeProductSkillState, } from '@noodle-borg/agent-kit';
4
4
  import { agentSkillRoot, assertProjectPathSafe, atomicWriteProjectFile, } from './agent-skills-state.js';
5
- const SHA256 = /^[a-f0-9]{64}$/;
5
+ export { createProductSkillState };
6
6
  export function productSkillStatePath(target) {
7
7
  return `${agentSkillRoot(target)}/.noodle-app-package.json`;
8
8
  }
@@ -14,8 +14,8 @@ export function readProductSkillState(project, target) {
14
14
  return { kind: 'absent' };
15
15
  try {
16
16
  const value = JSON.parse(readFileSync(path, 'utf8'));
17
- const state = decodeState(value, target);
18
- return state === undefined ? { kind: 'invalid' } : { kind: 'valid', state };
17
+ const decoded = decodeProductSkillState(value, target);
18
+ return decoded === undefined ? { kind: 'invalid' } : { kind: 'valid', ...decoded };
19
19
  }
20
20
  catch {
21
21
  return { kind: 'invalid' };
@@ -26,18 +26,34 @@ export function writeProductSkillState(project, state) {
26
26
  assertProjectPathSafe(project, path);
27
27
  atomicWriteProjectFile(join(project, path), `${JSON.stringify(state, null, 2)}\n`);
28
28
  }
29
- export function createProductSkillState(input) {
30
- return {
31
- schemaVersion: 1,
32
- target: input.target,
33
- app: { name: input.artifact.app.name, skillSlug: input.skillSlug },
34
- packageSchemaVersion: input.artifact.schemaVersion,
35
- rendererVersion: input.bundle.rendererVersion,
36
- sourceManifestSha256: input.artifact.provenance.sourceManifestSha256,
37
- mcpSurfaceSha256: input.artifact.provenance.mcpSurfaceSha256,
38
- bundleSha256: input.bundle.bundleSha256,
39
- files: input.files.map(({ path, sha256, byteLength }) => ({ path, sha256, byteLength })),
40
- };
29
+ export function removeProductSkillState(project, target) {
30
+ const path = productSkillStatePath(target);
31
+ assertProjectPathSafe(project, path);
32
+ rmSync(join(project, path), { force: true });
33
+ }
34
+ export function removeProductSkillFiles(input) {
35
+ assertProductSkillPathsSafe(input);
36
+ for (const path of input.paths)
37
+ rmSync(join(input.project, path), { force: true });
38
+ const root = agentSkillRoot(input.target);
39
+ const directories = new Set(input.paths.flatMap((path) => {
40
+ const parents = [];
41
+ let current = dirname(path);
42
+ while (current !== root && current.startsWith(`${root}/`)) {
43
+ parents.push(current);
44
+ current = dirname(current);
45
+ }
46
+ return parents;
47
+ }));
48
+ for (const directory of [...directories].sort((left, right) => right.length - left.length)) {
49
+ try {
50
+ rmdirSync(join(input.project, directory));
51
+ }
52
+ catch (cause) {
53
+ if (!isFilesystemCode(cause, 'ENOENT') && !isFilesystemCode(cause, 'ENOTEMPTY'))
54
+ throw cause;
55
+ }
56
+ }
41
57
  }
42
58
  export function assertProductSkillPathsSafe(input) {
43
59
  assertProjectPathSafe(input.project, agentSkillRoot(input.target));
@@ -95,65 +111,6 @@ function collectFiles(fullDir, relativeDir) {
95
111
  }
96
112
  return files;
97
113
  }
98
- function decodeState(value, target) {
99
- if (!isRecord(value) ||
100
- !hasExactKeys(value, [
101
- 'schemaVersion',
102
- 'target',
103
- 'app',
104
- 'packageSchemaVersion',
105
- 'rendererVersion',
106
- 'sourceManifestSha256',
107
- 'mcpSurfaceSha256',
108
- 'bundleSha256',
109
- 'files',
110
- ]) ||
111
- value.schemaVersion !== 1 ||
112
- value.target !== target ||
113
- value.packageSchemaVersion !== '1' ||
114
- typeof value.rendererVersion !== 'string' ||
115
- value.rendererVersion.trim() === '' ||
116
- !validDigest(value.sourceManifestSha256) ||
117
- !validDigest(value.mcpSurfaceSha256) ||
118
- !validDigest(value.bundleSha256) ||
119
- !isRecord(value.app) ||
120
- !hasExactKeys(value.app, ['name', 'skillSlug']) ||
121
- typeof value.app.name !== 'string' ||
122
- typeof value.app.skillSlug !== 'string' ||
123
- !Array.isArray(value.files)) {
124
- return undefined;
125
- }
126
- const files = [];
127
- const paths = new Set();
128
- for (const file of value.files) {
129
- if (!isRecord(file) ||
130
- !hasExactKeys(file, ['path', 'sha256', 'byteLength']) ||
131
- typeof file.path !== 'string' ||
132
- !isTargetFilePath(target, file.path) ||
133
- paths.has(file.path) ||
134
- !validDigest(file.sha256) ||
135
- typeof file.byteLength !== 'number' ||
136
- !Number.isSafeInteger(file.byteLength) ||
137
- file.byteLength < 0) {
138
- return undefined;
139
- }
140
- paths.add(file.path);
141
- files.push({ path: file.path, sha256: file.sha256, byteLength: file.byteLength });
142
- }
143
- if (files.length !== 2)
144
- return undefined;
145
- return {
146
- schemaVersion: 1,
147
- target,
148
- app: { name: value.app.name, skillSlug: value.app.skillSlug },
149
- packageSchemaVersion: '1',
150
- rendererVersion: value.rendererVersion,
151
- sourceManifestSha256: value.sourceManifestSha256,
152
- mcpSurfaceSha256: value.mcpSurfaceSha256,
153
- bundleSha256: value.bundleSha256,
154
- files,
155
- };
156
- }
157
114
  function isTargetFilePath(target, path) {
158
115
  const root = `${agentSkillRoot(target)}/`;
159
116
  return (path.startsWith(root) &&
@@ -161,13 +118,10 @@ function isTargetFilePath(target, path) {
161
118
  !path.includes('\\') &&
162
119
  path.split('/').every((part) => part !== '' && part !== '.' && part !== '..'));
163
120
  }
164
- function validDigest(value) {
165
- return typeof value === 'string' && SHA256.test(value);
166
- }
167
- function hasExactKeys(value, keys) {
168
- return Object.keys(value).length === keys.length && keys.every((key) => key in value);
169
- }
170
121
  function isRecord(value) {
171
122
  return value !== null && typeof value === 'object' && !Array.isArray(value);
172
123
  }
124
+ function isFilesystemCode(value, code) {
125
+ return isRecord(value) && value.code === code;
126
+ }
173
127
  //# sourceMappingURL=agent-product-skill-state.js.map