@noodleseed/one 0.155.0 → 0.156.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 (136) hide show
  1. package/README.md +5 -1
  2. package/dist/assistant-embed-django-tests.d.ts +3 -0
  3. package/dist/assistant-embed-django-tests.d.ts.map +1 -0
  4. package/dist/assistant-embed-django-tests.js +140 -0
  5. package/dist/assistant-embed-django-tests.js.map +1 -0
  6. package/dist/assistant-embed-django.d.ts +4 -0
  7. package/dist/assistant-embed-django.d.ts.map +1 -0
  8. package/dist/assistant-embed-django.js +259 -0
  9. package/dist/assistant-embed-django.js.map +1 -0
  10. package/dist/assistant-embed-installation.d.ts +29 -0
  11. package/dist/assistant-embed-installation.d.ts.map +1 -0
  12. package/dist/assistant-embed-installation.js +124 -0
  13. package/dist/assistant-embed-installation.js.map +1 -0
  14. package/dist/assistant-embed-profile.d.ts +8 -0
  15. package/dist/assistant-embed-profile.d.ts.map +1 -0
  16. package/dist/assistant-embed-profile.js +150 -0
  17. package/dist/assistant-embed-profile.js.map +1 -0
  18. package/dist/assistant-embed-scaffold-template.d.ts +3 -2
  19. package/dist/assistant-embed-scaffold-template.d.ts.map +1 -1
  20. package/dist/assistant-embed-scaffold-template.js +39 -84
  21. package/dist/assistant-embed-scaffold-template.js.map +1 -1
  22. package/dist/assistant-embed-tests.d.ts +5 -0
  23. package/dist/assistant-embed-tests.d.ts.map +1 -0
  24. package/dist/assistant-embed-tests.js +106 -0
  25. package/dist/assistant-embed-tests.js.map +1 -0
  26. package/dist/assistant-embed-vue.d.ts +3 -0
  27. package/dist/assistant-embed-vue.d.ts.map +1 -0
  28. package/dist/assistant-embed-vue.js +77 -0
  29. package/dist/assistant-embed-vue.js.map +1 -0
  30. package/dist/commands/assistant-embed-ops.d.ts.map +1 -1
  31. package/dist/commands/assistant-embed-ops.js +112 -63
  32. package/dist/commands/assistant-embed-ops.js.map +1 -1
  33. package/dist/commands/author-loop.d.ts.map +1 -1
  34. package/dist/commands/author-loop.js +24 -28
  35. package/dist/commands/author-loop.js.map +1 -1
  36. package/dist/commands/deploy-first-flow.d.ts.map +1 -1
  37. package/dist/commands/deploy-first-flow.js +26 -15
  38. package/dist/commands/deploy-first-flow.js.map +1 -1
  39. package/dist/commands/deploy-preflight.d.ts +5 -0
  40. package/dist/commands/deploy-preflight.d.ts.map +1 -1
  41. package/dist/commands/deploy-preflight.js +44 -5
  42. package/dist/commands/deploy-preflight.js.map +1 -1
  43. package/dist/commands/local-readiness.d.ts +9 -1
  44. package/dist/commands/local-readiness.d.ts.map +1 -1
  45. package/dist/commands/local-readiness.js +74 -4
  46. package/dist/commands/local-readiness.js.map +1 -1
  47. package/dist/commands/project-setup.d.ts.map +1 -1
  48. package/dist/commands/project-setup.js +10 -15
  49. package/dist/commands/project-setup.js.map +1 -1
  50. package/dist/control-plane-request.d.ts +4 -0
  51. package/dist/control-plane-request.d.ts.map +1 -1
  52. package/dist/control-plane-request.js +40 -20
  53. package/dist/control-plane-request.js.map +1 -1
  54. package/dist/project-scaffold-model.d.ts +14 -0
  55. package/dist/project-scaffold-model.d.ts.map +1 -0
  56. package/dist/project-scaffold-model.js +36 -0
  57. package/dist/project-scaffold-model.js.map +1 -0
  58. package/dist/project-scaffold-templates.d.ts.map +1 -1
  59. package/dist/project-scaffold-templates.js +73 -39
  60. package/dist/project-scaffold-templates.js.map +1 -1
  61. package/dist/project-scaffold-test-template.d.ts +4 -0
  62. package/dist/project-scaffold-test-template.d.ts.map +1 -0
  63. package/dist/project-scaffold-test-template.js +89 -0
  64. package/dist/project-scaffold-test-template.js.map +1 -0
  65. package/dist/project.d.ts.map +1 -1
  66. package/dist/project.js +1 -2
  67. package/dist/project.js.map +1 -1
  68. package/dist/widget-focused-template.d.ts +1 -1
  69. package/dist/widget-focused-template.d.ts.map +1 -1
  70. package/dist/widget-focused-template.js +34 -12
  71. package/dist/widget-focused-template.js.map +1 -1
  72. package/dist/widget-scaffold-template.d.ts +1 -1
  73. package/dist/widget-scaffold-template.d.ts.map +1 -1
  74. package/dist/widget-scaffold-template.js +75 -43
  75. package/dist/widget-scaffold-template.js.map +1 -1
  76. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +17 -3
  77. package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.js +2 -2
  78. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +9 -12
  79. package/node_modules/@noodle-borg/agent-kit/dist/skill-connect-refs.js +2 -2
  80. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-operations-ref.js +1 -1
  81. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +32 -26
  82. package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js +2 -2
  83. package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.js +2 -1
  84. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  85. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  86. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +6 -0
  87. package/node_modules/@noodle-borg/authoring/dist/recording.d.ts +1 -1
  88. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js +10 -4
  89. package/node_modules/@noodle-borg/compiler/package.json +0 -1
  90. package/node_modules/@noodle-borg/deploy-client/dist/deploy-payload-size.js +6 -2
  91. package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts +1 -1
  92. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +193 -96
  93. package/node_modules/@noodle-borg/service/package.json +1 -1
  94. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +3 -0
  95. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +3 -0
  96. package/node_modules/@noodleseed/assistant/README.md +21 -23
  97. package/node_modules/@noodleseed/assistant/package.json +1 -1
  98. package/package.json +5 -4
  99. package/dist/saas-scaffold-template.d.ts +0 -4
  100. package/dist/saas-scaffold-template.d.ts.map +0 -1
  101. package/dist/saas-scaffold-template.js +0 -56
  102. package/dist/saas-scaffold-template.js.map +0 -1
  103. package/node_modules/tailwindcss/LICENSE +0 -21
  104. package/node_modules/tailwindcss/README.md +0 -36
  105. package/node_modules/tailwindcss/dist/chunk-5JIJA4QV.mjs +0 -1
  106. package/node_modules/tailwindcss/dist/chunk-HMCCH6MG.mjs +0 -1
  107. package/node_modules/tailwindcss/dist/chunk-X4GG3EDV.mjs +0 -1
  108. package/node_modules/tailwindcss/dist/colors-C__qRT83.d.ts +0 -347
  109. package/node_modules/tailwindcss/dist/colors.d.mts +0 -347
  110. package/node_modules/tailwindcss/dist/colors.d.ts +0 -5
  111. package/node_modules/tailwindcss/dist/colors.js +0 -1
  112. package/node_modules/tailwindcss/dist/colors.mjs +0 -1
  113. package/node_modules/tailwindcss/dist/default-theme.d.mts +0 -1199
  114. package/node_modules/tailwindcss/dist/default-theme.d.ts +0 -1199
  115. package/node_modules/tailwindcss/dist/default-theme.js +0 -1
  116. package/node_modules/tailwindcss/dist/default-theme.mjs +0 -1
  117. package/node_modules/tailwindcss/dist/flatten-color-palette.d.mts +0 -6
  118. package/node_modules/tailwindcss/dist/flatten-color-palette.d.ts +0 -6
  119. package/node_modules/tailwindcss/dist/flatten-color-palette.js +0 -1
  120. package/node_modules/tailwindcss/dist/flatten-color-palette.mjs +0 -1
  121. package/node_modules/tailwindcss/dist/lib.d.mts +0 -379
  122. package/node_modules/tailwindcss/dist/lib.d.ts +0 -3
  123. package/node_modules/tailwindcss/dist/lib.js +0 -38
  124. package/node_modules/tailwindcss/dist/lib.mjs +0 -38
  125. package/node_modules/tailwindcss/dist/plugin.d.mts +0 -11
  126. package/node_modules/tailwindcss/dist/plugin.d.ts +0 -134
  127. package/node_modules/tailwindcss/dist/plugin.js +0 -1
  128. package/node_modules/tailwindcss/dist/plugin.mjs +0 -1
  129. package/node_modules/tailwindcss/dist/resolve-config-B4yBzhca.d.ts +0 -29
  130. package/node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.mts +0 -190
  131. package/node_modules/tailwindcss/dist/types-DWdTiksJ.d.mts +0 -128
  132. package/node_modules/tailwindcss/index.css +0 -944
  133. package/node_modules/tailwindcss/package.json +0 -89
  134. package/node_modules/tailwindcss/preflight.css +0 -393
  135. package/node_modules/tailwindcss/theme.css +0 -510
  136. package/node_modules/tailwindcss/utilities.css +0 -1
@@ -18,28 +18,35 @@ async function serviceRequest(url, token, init, fetchImpl, options, accept, read
18
18
  const timeoutMs = options.timeoutMs ?? DEFAULT_SERVICE_TIMEOUT_MS;
19
19
  const method = (init.method ?? 'GET').toUpperCase();
20
20
  const maxAttempts = method === 'GET' ? 2 : 1;
21
+ const sentRequestId = new Headers(init.headers).get('x-request-id') ?? undefined;
21
22
  let lastError;
22
23
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
24
+ const startedAt = Date.now();
23
25
  try {
24
- const response = await fetchService(url, token, init, fetchImpl, timeoutMs, accept);
25
- if (response.ok)
26
- return await read(response);
27
- const error = await serviceErrorFromResponse(response, token);
28
- if (attempt < maxAttempts && isTransientStatus(error.status)) {
29
- lastError = error;
30
- continue;
31
- }
32
- throw error;
26
+ return await fetchService(url, token, init, fetchImpl, timeoutMs, accept, async (response) => {
27
+ if (response.ok)
28
+ return read(response);
29
+ throw await serviceErrorFromResponse(response, token);
30
+ });
33
31
  }
34
32
  catch (error) {
35
- const normalized = error instanceof ServiceRequestError
36
- ? error
37
- : new ServiceRequestError({
38
- status: 0,
39
- message: error instanceof Error && error.name === 'AbortError'
40
- ? `request timed out after ${timeoutMs}ms`
41
- : redactKnown(error instanceof Error ? error.message : String(error), token),
42
- });
33
+ const serviceError = error instanceof ServiceRequestError ? error : undefined;
34
+ const timedOut = error instanceof Error && ['AbortError', 'TimeoutError'].includes(error.name);
35
+ const requestId = serviceError?.requestId ?? sentRequestId;
36
+ const code = serviceError?.code ?? (timedOut ? 'request_timeout' : undefined);
37
+ const normalized = new ServiceRequestError({
38
+ status: serviceError?.status ?? 0,
39
+ message: timedOut
40
+ ? `request timed out after ${timeoutMs}ms`
41
+ : redactKnown(error instanceof Error ? error.message : String(error), token),
42
+ ...(code !== undefined ? { code } : {}),
43
+ ...(requestId !== undefined ? { requestId } : {}),
44
+ elapsedMs: Date.now() - startedAt,
45
+ ...(serviceError?.phase !== undefined ? { phase: serviceError.phase } : {}),
46
+ ...(serviceError?.retryAfterSeconds !== undefined
47
+ ? { retryAfterSeconds: serviceError.retryAfterSeconds }
48
+ : {}),
49
+ });
43
50
  if (attempt < maxAttempts && isTransientStatus(normalized.status)) {
44
51
  lastError = normalized;
45
52
  continue;
@@ -49,7 +56,7 @@ async function serviceRequest(url, token, init, fetchImpl, options, accept, read
49
56
  }
50
57
  throw lastError ?? new ServiceRequestError({ status: 0, message: 'request failed' });
51
58
  }
52
- async function fetchService(url, token, init, fetchImpl, timeoutMs, accept) {
59
+ async function fetchService(url, token, init, fetchImpl, timeoutMs, accept, consume) {
53
60
  const headers = new Headers(init.headers);
54
61
  headers.set('accept', accept);
55
62
  headers.set('x-noodle-cli-version', currentCliVersion());
@@ -58,7 +65,7 @@ async function fetchService(url, token, init, fetchImpl, timeoutMs, accept) {
58
65
  const controller = new AbortController();
59
66
  const timer = setTimeout(() => controller.abort(), timeoutMs);
60
67
  try {
61
- return await fetchImpl(url, { ...init, headers, signal: controller.signal });
68
+ return await consume(await fetchImpl(url, { ...init, headers, signal: controller.signal }));
62
69
  }
63
70
  finally {
64
71
  clearTimeout(timer);
@@ -67,20 +74,27 @@ async function fetchService(url, token, init, fetchImpl, timeoutMs, accept) {
67
74
  async function serviceErrorFromResponse(response, token) {
68
75
  let message = `request failed (${response.status})`;
69
76
  let code;
77
+ let phase;
70
78
  try {
71
79
  const body = (await response.json());
72
80
  if (typeof body.error === 'string')
73
81
  message = body.error;
74
82
  if (typeof body.code === 'string')
75
83
  code = body.code;
84
+ if (typeof body.phase === 'string' && /^(body|validation|checks|admission)$/.test(body.phase))
85
+ phase = body.phase;
86
+ }
87
+ catch (error) {
88
+ if (error instanceof Error && ['AbortError', 'TimeoutError'].includes(error.name))
89
+ throw error;
76
90
  }
77
- catch { }
78
91
  const requestId = response.headers.get('x-request-id') ?? response.headers.get('x-correlation-id') ?? undefined;
79
92
  const retryAfterSeconds = parseRetryAfterSeconds(response.headers.get('retry-after'));
80
93
  return new ServiceRequestError({
81
94
  status: response.status,
82
95
  message: redactKnown(message, token),
83
96
  ...(code !== undefined ? { code } : {}),
97
+ ...(phase !== undefined ? { phase } : {}),
84
98
  ...(requestId !== undefined ? { requestId } : {}),
85
99
  ...(retryAfterSeconds !== undefined ? { retryAfterSeconds } : {}),
86
100
  });
@@ -109,6 +123,8 @@ export class ServiceRequestError extends Error {
109
123
  code;
110
124
  requestId;
111
125
  retryAfterSeconds;
126
+ elapsedMs;
127
+ phase;
112
128
  constructor(input) {
113
129
  super(input.message);
114
130
  this.name = 'ServiceRequestError';
@@ -119,6 +135,10 @@ export class ServiceRequestError extends Error {
119
135
  this.requestId = input.requestId;
120
136
  if (input.retryAfterSeconds !== undefined)
121
137
  this.retryAfterSeconds = input.retryAfterSeconds;
138
+ if (input.elapsedMs !== undefined)
139
+ this.elapsedMs = input.elapsedMs;
140
+ if (input.phase !== undefined)
141
+ this.phase = input.phase;
122
142
  }
123
143
  }
124
144
  //# sourceMappingURL=control-plane-request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-plane-request.js","sourceRoot":"","sources":["../src/control-plane-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"control-plane-request.js","sourceRoot":"","sources":["../src/control-plane-request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { InitTemplate } from './project.js';
2
+ /** Shared content contract: scripts, environment declarations and executable fixtures use these seams. */
3
+ export interface ScaffoldModel {
4
+ readonly widget: boolean;
5
+ readonly tool: string;
6
+ readonly input: Readonly<Record<string, unknown>>;
7
+ readonly invalidInput: Readonly<Record<string, unknown>>;
8
+ readonly expected: Readonly<Record<string, unknown>>;
9
+ readonly variables: readonly string[];
10
+ readonly httpFixture: boolean;
11
+ }
12
+ export declare const SCAFFOLD_MODELS: Readonly<Record<InitTemplate, ScaffoldModel>>;
13
+ export declare function scaffoldEnvironment(model: ScaffoldModel): string;
14
+ //# sourceMappingURL=project-scaffold-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scaffold-model.d.ts","sourceRoot":"","sources":["../src/project-scaffold-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,0GAA0G;AAC1G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAYD,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAqBzE,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAKhE"}
@@ -0,0 +1,36 @@
1
+ const workspace = {
2
+ widget: true,
3
+ tool: 'show_preferences',
4
+ input: {},
5
+ invalidInput: { unexpected: 'not permitted' },
6
+ expected: { channel: 'email', demo: true },
7
+ variables: [],
8
+ httpFixture: false,
9
+ };
10
+ export const SCAFFOLD_MODELS = {
11
+ hello: {
12
+ widget: false,
13
+ tool: 'greet',
14
+ input: { name: 'Ada' },
15
+ invalidInput: { name: 7 },
16
+ expected: { message: 'Hello, Ada!' },
17
+ variables: [],
18
+ httpFixture: false,
19
+ },
20
+ 'http-api': {
21
+ widget: false,
22
+ tool: 'get_post',
23
+ input: { post_id: '1' },
24
+ invalidInput: { post_id: '../private' },
25
+ expected: { title: 'Fixture post', body: 'Synthetic test content.' },
26
+ variables: ['POSTS_API_ORIGIN'],
27
+ httpFixture: true,
28
+ },
29
+ widget: workspace,
30
+ saas: { ...workspace, variables: ['ASSISTANT_ORIGIN'] },
31
+ };
32
+ export function scaffoldEnvironment(model) {
33
+ return ('# Names only. Bind the exact local or hosted target with noodle variables set.\n' +
34
+ model.variables.map((name) => `${name}=\n`).join(''));
35
+ }
36
+ //# sourceMappingURL=project-scaffold-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scaffold-model.js","sourceRoot":"","sources":["../src/project-scaffold-model.ts"],"names":[],"mappings":"AAaA,MAAM,SAAS,GAAkB;IAC/B,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,EAAE;IACT,YAAY,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE;IAC7C,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1C,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAkD;IAC5E,KAAK,EAAE;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACtB,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QACzB,QAAQ,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;QACpC,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,KAAK;KACnB;IACD,UAAU,EAAE;QACV,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACvB,YAAY,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;QACvC,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,yBAAyB,EAAE;QACpE,SAAS,EAAE,CAAC,kBAAkB,CAAC;QAC/B,WAAW,EAAE,IAAI;KAClB;IACD,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAE;CACxD,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACtD,OAAO,CACL,kFAAkF;QAClF,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CACrD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-scaffold-templates.d.ts","sourceRoot":"","sources":["../src/project-scaffold-templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAErE,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3C;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AACD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BxB;AACD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsDxB;AACD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,SAAS,kBAAkB,EAAE,EAC3C,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmGxB"}
1
+ {"version":3,"file":"project-scaffold-templates.d.ts","sourceRoot":"","sources":["../src/project-scaffold-templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIrE,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3C;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AACD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BxB;AACD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoDxB;AACD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,SAAS,kBAAkB,EAAE,EAC3C,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyIxB"}
@@ -1,3 +1,5 @@
1
+ import { SCAFFOLD_MODELS, scaffoldEnvironment } from './project-scaffold-model.js';
2
+ import { scaffoldBehaviorTest } from './project-scaffold-test-template.js';
1
3
  export function title(value) {
2
4
  return value
3
5
  .split('-')
@@ -35,27 +37,29 @@ export default server('${serverName}', { title: '${title(name)}', version: '1.0.
35
37
  }
36
38
  export function httpApiFiles(name, agentTargets) {
37
39
  const serverName = manifestName(name);
38
- return commonFiles(name, 'http-api', agentTargets, `import { connector, server, tool, z } from '@noodleseed/one';
40
+ return commonFiles(name, 'http-api', agentTargets, `import { annotations, connector, server, tool, variable, z } from '@noodleseed/one';
39
41
 
40
- const jsonplaceholder = connector('jsonplaceholder')
42
+ // CONTRACT SEAM: share the operation's validated input/output with the public tool.
43
+ const input = z.object({ post_id: z.string().regex(/^[0-9]{1,12}$/).default('1') }).strict();
44
+ const output = z.object({ title: z.string(), body: z.string() });
45
+ // BINDING SEAM: the operator supplies a reviewed origin, never a tool argument or browser value.
46
+ const origin = variable('POSTS_API_ORIGIN');
47
+ const posts = connector('posts')
41
48
  .version('1.0.0')
42
49
  .http({
43
- baseUrl: 'https://jsonplaceholder.typicode.com',
44
- allowedOrigins: ['https://jsonplaceholder.typicode.com'],
50
+ baseUrl: origin,
51
+ allowedOrigins: [origin],
45
52
  operations: {
46
53
  get_post: {
47
54
  type: 'read',
48
55
  method: 'GET',
49
56
  path: '/posts/\${args.post_id}',
50
- input: z.object({ post_id: z.string() }),
57
+ input,
51
58
  response: {
52
59
  title: '\${response.title}',
53
60
  body: '\${response.body}',
54
61
  },
55
- output: z.object({
56
- title: z.string().optional(),
57
- body: z.string().optional(),
58
- }),
62
+ output,
59
63
  },
60
64
  },
61
65
  });
@@ -63,17 +67,13 @@ const jsonplaceholder = connector('jsonplaceholder')
63
67
  export default server('${serverName}', {
64
68
  title: '${title(name)}',
65
69
  version: '1.0.0',
66
- use: { posts: jsonplaceholder },
70
+ use: { posts },
67
71
  }, [
68
72
  tool('get_post', {
69
- description: 'Fetch a post from JSONPlaceholder.',
70
- input: z.object({
71
- post_id: z.string().default('1'),
72
- }),
73
- output: z.object({
74
- title: z.string(),
75
- body: z.string(),
76
- }),
73
+ description: 'Read one post by its validated numeric identifier.',
74
+ annotations: annotations.readOnly(),
75
+ input,
76
+ output,
77
77
  fulfil: ({ input, connectors }) => {
78
78
  const post = connectors.posts.getPost({ post_id: input.post_id });
79
79
  return { title: post.title, body: post.body };
@@ -83,15 +83,13 @@ export default server('${serverName}', {
83
83
  `, {});
84
84
  }
85
85
  export function commonFiles(name, template, agentTargets, serverTs, extraDevDependencies) {
86
- // A single agent-facing readiness check that chains the local author loop in machine-readable mode.
87
- // The widget template adds the widget-specific `check` gate (Apps metadata/privacy readiness).
88
- const agentCheck = template === 'widget'
89
- ? 'noodle validate --json && noodle test --json && noodle check --json'
90
- : 'noodle validate --json && noodle test --json';
86
+ const model = SCAFFOLD_MODELS[template];
87
+ const agentCheck = 'vitest run --dir test && noodle validate --json && tsc --noEmit' +
88
+ (model.widget ? ' && noodle check --json' : '');
91
89
  // Widget projects also get a ChatGPT-targeted readiness gate (domain, openai/* metadata, CSP shape) —
92
90
  // the ChatGPT App out-of-box promise, so an agent can exercise it explicitly.
93
- const agentCheckChatgpt = template === 'widget'
94
- ? 'noodle validate --json && noodle test --json && noodle check --target chatgpt --json'
91
+ const agentCheckChatgpt = model.widget
92
+ ? 'vitest run --dir test && noodle validate --json && tsc --noEmit && noodle check --target chatgpt --json'
95
93
  : undefined;
96
94
  return {
97
95
  'noodle.json': `${JSON.stringify({
@@ -111,6 +109,7 @@ export function commonFiles(name, template, agentTargets, serverTs, extraDevDepe
111
109
  type: 'module',
112
110
  scripts: {
113
111
  test: 'vitest run --dir test',
112
+ typecheck: 'tsc --noEmit',
114
113
  validate: 'noodle validate',
115
114
  dev: 'noodle dev',
116
115
  deploy: 'noodle deploy',
@@ -121,29 +120,63 @@ export function commonFiles(name, template, agentTargets, serverTs, extraDevDepe
121
120
  devDependencies: {
122
121
  '@noodleseed/one': 'latest',
123
122
  vitest: 'latest',
123
+ typescript: 'latest',
124
+ '@types/node': 'latest',
124
125
  ...extraDevDependencies,
125
126
  },
126
127
  }, null, 2)}\n`,
127
- 'test/server.test.ts': `import { describe, expect, it } from 'vitest';
128
- import app from '../src/server.js';
129
-
130
- describe('${name}', () => {
131
- it('exports a Noodle server definition', () => {
132
- expect(typeof app.toManifest).toBe('function');
133
- });
134
- });
135
- `,
136
- '.gitignore': ['node_modules', 'dist', '.env', '.env.noodle', '.env.*', '.noodle/', ''].join('\n'),
128
+ 'test/server.test.ts': scaffoldBehaviorTest(model),
129
+ 'tsconfig.json': `${JSON.stringify({
130
+ compilerOptions: {
131
+ target: 'ESNext',
132
+ module: 'ESNext',
133
+ moduleResolution: 'bundler',
134
+ lib: ['ESNext', 'DOM', 'DOM.Iterable'],
135
+ ...(model.widget ? { jsx: 'react-jsx' } : {}),
136
+ strict: true,
137
+ skipLibCheck: true,
138
+ esModuleInterop: true,
139
+ noEmit: true,
140
+ },
141
+ include: ['src', 'test'],
142
+ }, null, 2)}\n`,
143
+ 'vitest.config.ts': "import { defineConfig } from 'vitest/config';\n\n// Keep generated Agent Kit example suites outside the application's test run.\nexport default defineConfig({ test: { dir: 'test', include: ['**/*.test.ts'], pool: 'forks' } });\n",
144
+ ...(model.variables.length ? { '.env.example': scaffoldEnvironment(model) } : {}),
145
+ '.gitignore': [
146
+ 'node_modules',
147
+ 'dist',
148
+ '.env',
149
+ '.env.noodle',
150
+ '.env.*',
151
+ '!.env.example',
152
+ '.noodle/',
153
+ '',
154
+ ].join('\n'),
137
155
  'README.md': `# ${title(name)}
138
156
 
139
157
  ## Run locally (no account, no login)
140
158
 
141
159
  \`\`\`sh
142
- noodle dev
160
+ npm install
161
+ npm test
143
162
  \`\`\`
144
163
 
145
- \`noodle dev\` boots a local loopback MCP server on \`src/server.ts\` and hot-reloads on save. For a
146
- one-shot check, run \`noodle validate\` (compile only) or \`noodle test\` (compile + MCP smoke).
164
+ The generated tests compile the authored source, list tools, check a representative result and reject invalid
165
+ input. They copy source into temporary fixture storage, never copy customer credentials, and make no hosted
166
+ requests. Use your existing package manager consistently. A fixture pass is not a customer-integration pass.
167
+ ${model.variables.length
168
+ ? `
169
+ ## Bind the application
170
+
171
+ The operator supplies ${model.variables.map((name) => `\`${name}\``).join(', ')}; \`.env.example\` lists names only.
172
+ Use \`noodle variables set <name> --runtime local --scope env --org local --app ${name} --env dev --from-env <name>\`
173
+ after exporting the reviewed value, or use your existing ignored \`.env\` locally. Do not put secrets in source.
174
+ For the API profile, connect the existing authorized endpoint; add delegated connector auth before private data.
175
+ `
176
+ : ''}
177
+ Run \`npm run dev\` for hot reload and \`npm run agent:check\` for the local suite plus validation. A bare
178
+ \`noodle test\` checks registration only; use \`--tool ${model.tool} --args '${JSON.stringify(model.input)}'\`
179
+ for an explicit read after configuring its backend. Never use a production write as a setup check.
147
180
 
148
181
  ## Deploy (requires a Noodle Seed account)
149
182
 
@@ -152,7 +185,8 @@ noodle login
152
185
  noodle deploy --org <org> --app ${name}
153
186
  \`\`\`
154
187
 
155
- \`noodle deploy\` infers and saves the target on first run, so later deploys are just \`noodle deploy\`. (Optional: \`noodle link --org <org> --app ${name}\` saves the target up front; \`noodle start\` scaffolds + deploys in one step.)
188
+ \`noodle deploy\` infers and saves the target on first run. Review that target and keep private capabilities
189
+ owner-only until the real customer authentication and authorization checks pass.
156
190
 
157
191
  If this project already uses \`.env\`, \`noodle dev\` treats matching declared \`secret("NAME")\` and
158
192
  \`variable("NAME")\` keys as a read-only fallback. Scoped values in \`.env.noodle\`, written with
@@ -1 +1 @@
1
- {"version":3,"file":"project-scaffold-templates.js","sourceRoot":"","sources":["../src/project-scaffold-templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-scaffold-templates.js","sourceRoot":"","sources":["../src/project-scaffold-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ScaffoldModel } from './project-scaffold-model.js';
2
+ /** Exercise the actual authored source through the local CLI; never mutate customer config or call live APIs. */
3
+ export declare function scaffoldBehaviorTest(model: ScaffoldModel): string;
4
+ //# sourceMappingURL=project-scaffold-test-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scaffold-test-template.d.ts","sourceRoot":"","sources":["../src/project-scaffold-test-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,iHAAiH;AACjH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA0FjE"}
@@ -0,0 +1,89 @@
1
+ /** Exercise the actual authored source through the local CLI; never mutate customer config or call live APIs. */
2
+ export function scaffoldBehaviorTest(model) {
3
+ return `import { execFile } from 'node:child_process';
4
+ import { cpSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from 'node:fs';
5
+ ${model.httpFixture ? "import { createServer } from 'node:http';\n" : ''}import { tmpdir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
9
+
10
+ // TEST SEAM: update the representative read and expectations when your business contract changes.
11
+ // This proves local synthetic behavior, not customer identity, hosted integration or production readiness.
12
+ const project = fileURLToPath(new URL('..', import.meta.url));
13
+ const scratch = mkdtempSync(join(tmpdir(), 'noodle-behavior-'));
14
+ const tool = ${JSON.stringify(model.tool)};
15
+ const variables: readonly string[] = ${JSON.stringify(model.variables)};
16
+ ${model.httpFixture
17
+ ? `let requests = 0;
18
+ const backend = createServer((request, response) => {
19
+ requests++;
20
+ if (request.method !== 'GET' || request.url !== '/posts/1') {
21
+ response.writeHead(404).end();
22
+ return;
23
+ }
24
+ response.writeHead(200, { 'content-type': 'application/json' });
25
+ response.end(JSON.stringify(${JSON.stringify(model.expected)}));
26
+ });
27
+ `
28
+ : ''}
29
+ beforeAll(async () => {
30
+ // Copy only authored source, never .env, saved accounts, project links, credentials or generated skills.
31
+ cpSync(join(project, 'src'), join(scratch, 'src'), { recursive: true });
32
+ cpSync(join(project, 'package.json'), join(scratch, 'package.json'));
33
+ symlinkSync(join(project, 'node_modules'), join(scratch, 'node_modules'), 'dir');
34
+ mkdirSync(join(scratch, 'home'));
35
+ writeFileSync(join(scratch, 'noodle.json'), JSON.stringify({ entrypoint: 'src/server.ts', name: 'fixture' }));
36
+ writeFileSync(join(scratch, 'runner.mjs'), "import { run } from '@noodleseed/one'; process.exitCode = await run(JSON.parse(process.argv[2]), {}, process.argv[3]);");
37
+ ${model.httpFixture
38
+ ? ` await new Promise<void>((resolve) => backend.listen(0, '127.0.0.1', resolve));
39
+ const address = backend.address();
40
+ if (!address || typeof address === 'string') throw new Error('fixture did not listen');
41
+ const origin = 'http://127.0.0.1:' + address.port;
42
+ `
43
+ : " const origin = 'http://localhost:3000';\n"} writeFileSync(join(scratch, '.env'), variables.map((name) => name + '=' + origin).join('\\n'));
44
+ });
45
+ afterAll(async () => {
46
+ ${model.httpFixture ? ' await new Promise<void>((resolve) => backend.close(() => resolve()));\n' : ''} rmSync(scratch, { recursive: true, force: true });
47
+ });
48
+
49
+ function command(args: string[]): Promise<{ exit: number; body: unknown }> {
50
+ // Execute the installed public CLI in native Node, independent of the test runner's module transforms.
51
+ return new Promise((resolve, reject) => execFile(process.execPath, [
52
+ join(scratch, 'runner.mjs'),
53
+ JSON.stringify([...args, '--json']),
54
+ join(scratch, 'home'),
55
+ ], {
56
+ cwd: scratch, timeout: 25_000, maxBuffer: 1024 * 1024,
57
+ env: { PATH: process.env.PATH, NOODLE_UPDATE_CHECK: 'off' },
58
+ }, (error, stdout) => {
59
+ if (error && typeof error.code !== 'number') { reject(new Error('Local CLI process could not complete.')); return; }
60
+ const exit = typeof error?.code === 'number' ? error.code : 0;
61
+ try { resolve({ exit, body: JSON.parse(stdout) }); }
62
+ catch { reject(new Error('Local CLI did not return a JSON envelope.')); }
63
+ }));
64
+ }
65
+
66
+ describe.sequential('local application behavior', () => {
67
+ it('compiles the authored source and view', async () => {
68
+ const result = await command(['validate']);
69
+ expect(result.exit, JSON.stringify(result.body)).toBe(0);
70
+ }, 30_000);
71
+ it('registers the representative capability', async () => {
72
+ const result = await command(['tools', 'list']);
73
+ expect(result.exit, JSON.stringify(result.body)).toBe(0);
74
+ expect(result.body).toMatchObject({ ok: true, data: { result: { tools: expect.arrayContaining([expect.objectContaining({ name: tool })]) } } });
75
+ }, 30_000);
76
+ it('returns the expected useful result', async () => {
77
+ const result = await command(['tools', 'call', tool, '--args', JSON.stringify(${JSON.stringify(model.input)})]);
78
+ expect(result.exit, JSON.stringify(result.body)).toBe(0);
79
+ expect(result.body).toMatchObject({ ok: true, data: { result: { structuredContent: ${JSON.stringify(model.expected)} } } });
80
+ ${model.httpFixture ? ' expect(requests).toBe(1);\n' : ''} }, 30_000);
81
+ it('rejects invalid input without claiming completion', async () => {
82
+ const result = await command(['tools', 'call', tool, '--args', JSON.stringify(${JSON.stringify(model.invalidInput)})]);
83
+ expect(result.exit).not.toBe(0);
84
+ expect(result.body).toMatchObject({ ok: false });
85
+ ${model.httpFixture ? ' expect(requests).toBe(1);\n' : ''} }, 30_000);
86
+ });
87
+ `;
88
+ }
89
+ //# sourceMappingURL=project-scaffold-test-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scaffold-test-template.js","sourceRoot":"","sources":["../src/project-scaffold-test-template.ts"],"names":[],"mappings":"AAEA,iHAAiH;AACjH,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,OAAO;;EAEP,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,EAAE;;;;;;;;;eASzD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;uCACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;EAEpE,KAAK,CAAC,WAAW;QACf,CAAC,CAAC;;;;;;;;gCAQ0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;;CAE7D;QACG,CAAC,CAAC,EACN;;;;;;;;;EAUE,KAAK,CAAC,WAAW;QACf,CAAC,CAAC;;;;CAIL;QACG,CAAC,CAAC,6CACN;;;EAGE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,2EAA2E,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFA+BlB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;;yFAEtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;EACrH,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,EAAE;;oFAEwB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;;;EAGpH,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,EAAE;;CAE3D,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
package/dist/project.js CHANGED
@@ -4,7 +4,6 @@ import { ACCESS_MODES } from '@noodle-borg/wire-contracts';
4
4
  import { DEFAULT_SERVICE_URL, slug } from './deploy.js';
5
5
  import { resolveConfiguredProjectEntrypoint, resolveConventionalEntrypoint, resolveProjectEntrypoint, } from './project-entrypoint.js';
6
6
  import { helloFiles, httpApiFiles } from './project-scaffold-templates.js';
7
- import { saasFiles } from './saas-scaffold-template.js';
8
7
  import { widgetFiles } from './widget-scaffold-template.js';
9
8
  export { CONVENTIONAL_ENTRYPOINTS, resolveConventionalEntrypoint, } from './project-entrypoint.js';
10
9
  export function projectConfigPath(cwd = process.cwd()) {
@@ -164,7 +163,7 @@ export function initProject(options = {}) {
164
163
  }
165
164
  }
166
165
  const files = template === 'saas'
167
- ? saasFiles(name, options.agentTargets ?? ['codex', 'claude-code'])
166
+ ? widgetFiles(name, options.agentTargets ?? ['codex', 'claude-code'], 'saas')
168
167
  : template === 'hello'
169
168
  ? helloFiles(name, options.agentTargets ?? ['codex', 'claude-code'])
170
169
  : template === 'http-api'