@noodleseed/one 0.115.0 → 0.117.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 (184) 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/generated/example-files.js +1 -1
  34. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  35. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +1 -0
  36. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts.map +1 -1
  37. package/node_modules/@noodle-borg/agent-kit/dist/index.js +1 -0
  38. package/node_modules/@noodle-borg/agent-kit/dist/index.js.map +1 -1
  39. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.d.ts +36 -0
  40. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.d.ts.map +1 -0
  41. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js +116 -0
  42. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js.map +1 -0
  43. package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.d.ts.map +1 -1
  44. package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.js +21 -3
  45. package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.js.map +1 -1
  46. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts +1 -1
  47. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts.map +1 -1
  48. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +8 -2
  49. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -1
  50. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  51. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  52. package/node_modules/@noodle-borg/service/dist/assistant-model-stream.d.ts +9 -0
  53. package/node_modules/@noodle-borg/service/dist/assistant-model-stream.d.ts.map +1 -1
  54. package/node_modules/@noodle-borg/service/dist/assistant-model-stream.js +9 -1
  55. package/node_modules/@noodle-borg/service/dist/assistant-model-stream.js.map +1 -1
  56. package/node_modules/@noodle-borg/service/package.json +1 -1
  57. package/node_modules/@noodleseed/assistant/package.json +1 -1
  58. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  59. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/README.md +3 -0
  60. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  61. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  62. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  63. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  64. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  65. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  66. package/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive/package.json +68 -0
  67. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  68. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/README.md +3 -0
  69. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  70. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  71. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  72. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  73. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  74. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  75. package/node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive/package.json +68 -0
  76. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/LICENSE +21 -0
  77. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/README.md +3 -0
  78. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts +62 -0
  79. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts +62 -0
  80. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +373 -0
  81. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +7 -0
  82. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs +341 -0
  83. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.map +7 -0
  84. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/package.json +74 -0
  85. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/LICENSE +21 -0
  86. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/README.md +3 -0
  87. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/dist/index.d.mts +32 -0
  88. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts +32 -0
  89. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/dist/index.js +246 -0
  90. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +7 -0
  91. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/dist/index.mjs +214 -0
  92. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/dist/index.mjs.map +7 -0
  93. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope/package.json +71 -0
  94. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/LICENSE +21 -0
  95. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/README.md +3 -0
  96. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.d.mts +14 -0
  97. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.d.ts +14 -0
  98. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.js +55 -0
  99. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.js.map +7 -0
  100. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.mjs +23 -0
  101. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.mjs.map +7 -0
  102. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/package.json +69 -0
  103. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  104. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/README.md +3 -0
  105. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  106. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  107. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  108. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  109. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  110. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  111. package/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive/package.json +68 -0
  112. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/LICENSE +21 -0
  113. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/README.md +3 -0
  114. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/dist/index.d.mts +46 -0
  115. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/dist/index.d.ts +46 -0
  116. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/dist/index.js +384 -0
  117. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/dist/index.js.map +7 -0
  118. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/dist/index.mjs +362 -0
  119. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/dist/index.mjs.map +7 -0
  120. package/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper/package.json +77 -0
  121. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/LICENSE +21 -0
  122. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/README.md +3 -0
  123. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/dist/index.d.mts +10 -0
  124. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/dist/index.d.ts +10 -0
  125. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/dist/index.js +60 -0
  126. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/dist/index.js.map +7 -0
  127. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/dist/index.mjs +27 -0
  128. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/dist/index.mjs.map +7 -0
  129. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-arrow/package.json +68 -0
  130. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  131. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/README.md +3 -0
  132. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  133. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  134. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  135. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  136. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  137. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  138. package/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive/package.json +68 -0
  139. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  140. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/README.md +3 -0
  141. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  142. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  143. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  144. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  145. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  146. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  147. package/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/package.json +68 -0
  148. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/LICENSE +21 -0
  149. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/README.md +3 -0
  150. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts +62 -0
  151. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts +62 -0
  152. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +373 -0
  153. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +7 -0
  154. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs +341 -0
  155. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.map +7 -0
  156. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer/package.json +74 -0
  157. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/LICENSE +21 -0
  158. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/README.md +3 -0
  159. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/dist/index.d.mts +14 -0
  160. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/dist/index.d.ts +14 -0
  161. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/dist/index.js +55 -0
  162. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/dist/index.js.map +7 -0
  163. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/dist/index.mjs +23 -0
  164. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/dist/index.mjs.map +7 -0
  165. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal/package.json +69 -0
  166. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  167. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/README.md +3 -0
  168. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  169. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  170. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  171. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  172. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  173. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  174. package/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive/package.json +68 -0
  175. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  176. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/README.md +3 -0
  177. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  178. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  179. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  180. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  181. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  182. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  183. package/node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive/package.json +68 -0
  184. package/package.json +2 -2
@@ -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