@noodleseed/one 0.31.0 → 0.32.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.
- package/dist/commands/mcp-apps.js +6 -5
- package/dist/commands/mcp-apps.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +46 -6
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.js +5 -3
- package/node_modules/@noodle-borg/authoring/dist/assistant.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +4 -4
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts +41 -0
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.js +4 -0
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts +4 -2
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.js +6 -1
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/index.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/react/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/index.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/react.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +32 -0
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +5 -12
- package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/package.json +0 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +37 -3
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js +4 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/assets.js +38 -15
- package/node_modules/@noodle-borg/compiler/dist/assets.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/branding.d.ts +6 -0
- package/node_modules/@noodle-borg/compiler/dist/branding.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/branding.js +80 -0
- package/node_modules/@noodle-borg/compiler/dist/branding.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js +2 -20
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +101 -142
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +30 -57
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts +29 -3
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js +28 -2
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/widget/react-bridge-bootstrap.d.ts +1 -1
- package/node_modules/@noodle-borg/protocol/dist/widget/react-bridge-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/widget/react-bridge-bootstrap.js +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/react-bridge-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/assistant-store.d.ts +4 -1
- package/node_modules/@noodle-borg/service/dist/assistant-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/assistant-store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +13 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-assistant.js +2 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres-assistant.js.map +1 -1
- package/package.json +2 -3
- package/node_modules/@noodleseed/assistant/README.md +0 -78
- package/node_modules/@noodleseed/assistant/dist/appearance.d.ts +0 -137
- package/node_modules/@noodleseed/assistant/dist/appearance.d.ts.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/appearance.js +0 -126
- package/node_modules/@noodleseed/assistant/dist/appearance.js.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/element.d.ts +0 -24
- package/node_modules/@noodleseed/assistant/dist/element.d.ts.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/element.js +0 -397
- package/node_modules/@noodleseed/assistant/dist/element.js.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/index.d.ts +0 -3
- package/node_modules/@noodleseed/assistant/dist/index.d.ts.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/index.js +0 -5
- package/node_modules/@noodleseed/assistant/dist/index.js.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/react.d.ts +0 -15
- package/node_modules/@noodleseed/assistant/dist/react.d.ts.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/react.js +0 -31
- package/node_modules/@noodleseed/assistant/dist/react.js.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/server.d.ts +0 -24
- package/node_modules/@noodleseed/assistant/dist/server.d.ts.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/server.js +0 -22
- package/node_modules/@noodleseed/assistant/dist/server.js.map +0 -1
- package/node_modules/@noodleseed/assistant/package.json +0 -49
|
@@ -352,14 +352,15 @@ function auditEmbeddedAssistant(artifact) {
|
|
|
352
352
|
code: 'assistant_configuration',
|
|
353
353
|
severity: 'error',
|
|
354
354
|
message: 'No embedded assistant is declared.',
|
|
355
|
-
cause: 'The embedded-assistant host needs model
|
|
355
|
+
cause: 'The embedded-assistant host needs model and exact-origin configuration.',
|
|
356
356
|
fix: 'Add assistant: embeddedAssistant(...) to server options.',
|
|
357
357
|
next: 'noodle check --target embedded-assistant',
|
|
358
358
|
},
|
|
359
359
|
];
|
|
360
360
|
}
|
|
361
361
|
const unannotated = artifact.tools.filter((tool) => isModelVisibleTool(tool) && tool.annotations === undefined);
|
|
362
|
-
const
|
|
362
|
+
const branding = artifact.server.branding;
|
|
363
|
+
const theme = branding?.theme;
|
|
363
364
|
return [
|
|
364
365
|
{
|
|
365
366
|
code: 'assistant_configuration',
|
|
@@ -373,10 +374,10 @@ function auditEmbeddedAssistant(artifact) {
|
|
|
373
374
|
code: 'assistant_themes',
|
|
374
375
|
severity: theme?.light && theme.dark ? 'info' : 'warn',
|
|
375
376
|
message: theme?.light && theme.dark
|
|
376
|
-
? `
|
|
377
|
+
? `Server branding declares light and dark overrides with ${branding?.colorScheme ?? 'auto'} mode.`
|
|
377
378
|
: 'One or both customer theme overrides are omitted; accessible built-in defaults will be used.',
|
|
378
|
-
cause: '
|
|
379
|
-
fix: 'Optionally declare
|
|
379
|
+
cause: 'One server brand kit keeps widgets and the embedded assistant visually consistent.',
|
|
380
|
+
fix: 'Optionally declare branding.theme.light and branding.theme.dark semantic overrides.',
|
|
380
381
|
next: 'noodle dev',
|
|
381
382
|
},
|
|
382
383
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-apps.js","sourceRoot":"","sources":["../../src/commands/mcp-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,eAAe,EACf,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAsB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAevE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAuB;IACpD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,yBAAyB,IAAI,CAAC,MAAM,8DAA8D,CAAC;QACnH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,gBAAgB,CACrB;gBACE,IAAI,EAAE,gBAAgB;gBACtB,OAAO;gBACP,GAAG,EAAE,yEAAyE;gBAC9E,IAAI,EAAE,0CAA0C;aACjD,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;IAC5D,IAAI,CAAC,YAAY;QAAE,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC;QAChC,YAAY;QACZ,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC1D,OAAO,gBAAgB,CAAC;gBACtB,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,sBAAsB;gBACjD,kEAAkE;gBAClE,IAAI,EAAE,wBAAwB;gBAC9B,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvF,qGAAqG;IACrG,wEAAwE;IACxE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACrE,8FAA8F;IAC9F,iGAAiG;IACjG,MAAM,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAEtE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,EAAE,EAAE,CAAC;YACP,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YACrF,gBAAgB,CAAC;gBACf,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,GAAG,UAAU,sBAAsB;gBAC5C,yEAAyE;gBACzE,GAAG,EAAE,6EAA6E;gBAClF,IAAI,EAAE,yBAAyB,MAAM,SAAS;gBAC9C,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CACT,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;YAClD,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,KAAK,EAAE,eAAe,EAAE;SACzB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,oEAAoE;AACpE,MAAM,aAAa,GAA6C,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE/F;;;;GAIG;AACH,SAAS,wBAAwB,CAC/B,QAAiC,EACjC,WAA+B;IAE/B,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,WAAuC,CAAC,CAAC;IACzE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC;AACpF,CAAC;AAED,kFAAkF;AAClF,SAAS,oBAAoB,CAAC,OAAqB;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAChG,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;QACxC,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,OAAO;QACvB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,OAAO,CAAC,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,QAAyB,EACzB,SAAsB,SAAS;IAE/B,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CACvD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,2BAA2B,CAChE,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACtD,OAAO,EACL,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,4DAA4D;YACvF,CAAC,CAAC,0CAA0C;QAChD,KAAK,EACH,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,kCAAkC;QACxC,GAAG,EAAE,2DAA2D;QAChE,IAAI,EAAE,+BAA+B;KACtC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;IAC/F,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;QAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpE,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,MAAM,CACxD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CACvC,CAAC;IACF,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CACtD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,CACvF,CAAC;IACF,MAAM,4BAA4B,GAAG,WAAW,CAAC,MAAM,CACrD,CAAC,IAAI,EAAE,EAAE,CACP,kBAAkB,CAAC,IAAI,CAAC;QACxB,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,gCAAgC,CAAC,KAAK,QAAQ;YACjE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,+BAA+B,CAAC,KAAK,QAAQ,CAAC,CACvE,CAAC;IACF,MAAM,gBAAgB,GAAG;QACvB,GAAG,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;YACtC,CAAC,CAAC,CAAC,uBAAuB,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACjE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC;YACpC,CAAC,CAAC,CAAC,wBAAwB,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,CAAC,gCAAgC,SAAS,CAAC,4BAA4B,CAAC,EAAE,CAAC;YAC7E,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACzD,OAAO,EACL,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAC3B,CAAC,CAAC,wGAAwG;YAC1G,CAAC,CAAC,8BAA8B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAClE,KAAK,EACH,+IAA+I;QACjJ,GAAG,EAAE,8KAA8K;QACnL,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAC1E,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACnD,OAAO,EACL,SAAS,CAAC,MAAM,KAAK,CAAC;YACpB,CAAC,CAAC,iFAAiF;YACnF,CAAC,CAAC,qDAAqD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC1G,KAAK,EAAE,gEAAgE;QACvE,GAAG,EAAE,uFAAuF;QAC5F,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,MAAM;QAChB,OAAO,EACL,YAAY,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,0LAA0L;YAClN,CAAC,CAAC,4FAA4F;QAClG,KAAK,EACH,yKAAyK;QAC3K,GAAG,EAAE,qIAAqI;QAC1I,IAAI,EAAE,cAAc;KACrB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAClD,OAAO,EACL,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,2BAA2B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,GAAG;QACzK,KAAK,EACH,uGAAuG;QACzG,GAAG,EAAE,oIAAoI;QACzI,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,KAAK,SAAS,CACpD,CAAC;IACF,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,4BAA4B;YAClC,8FAA8F;YAC9F,0FAA0F;YAC1F,4FAA4F;YAC5F,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,wFAAwF,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3J,KAAK,EACH,2OAA2O;YAC7O,GAAG,EAAE,8IAA8I;YACnJ,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC,MAAM,eAAe,GAAG,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACrF,OAAO,EACL,KAAK,KAAK,SAAS;YACjB,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;gBAC1B,CAAC,CAAC,yBAAyB,KAAK,CAAC,UAAU,EAAE,OAAO,IAAI,SAAS,oBAAoB,eAAe,CAAC,MAAM,sBAAsB;gBACjI,CAAC,CAAC,oDAAoD;QAC5D,KAAK,EACH,kJAAkJ;QACpJ,GAAG,EAAE,kHAAkH;QACvH,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,MAAM;QAChB,OAAO,EACL,qHAAqH;QACvH,KAAK,EACH,gIAAgI;QAClI,GAAG,EAAE,2GAA2G;QAChH,IAAI,EAAE,cAAc;KACrB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC1E,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,MAAM;QAChB,OAAO,EACL,YAAY,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,gBAAgB,YAAY,CAAC,MAAM,2BAA2B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAChH,CAAC,CAAC,oHAAoH;QAC1H,KAAK,EACH,YAAY,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,kJAAkJ;YACpJ,CAAC,CAAC,uHAAuH;QAC7H,GAAG,EACD,YAAY,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,yIAAyI;YAC3I,CAAC,CAAC,wJAAwJ;QAC9J,IAAI,EAAE,cAAc;KACrB,CAAC,CAAC;IAEH,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE;YAC5B,QAAQ,EAAE,EAAE,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACjD,OAAO,EACL,EAAE,EAAE,GAAG,KAAK,SAAS;gBACnB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,yBAAyB;gBAC3C,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,gCAAgC;YACtD,KAAK,EAAE,sDAAsD;YAC7D,GAAG,EAAE,4FAA4F;YACjG,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QACH,mGAAmG;QACnG,iGAAiG;QACjG,MAAM,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,CAAU,EAAE,CAAC;YAClF,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,oBAAoB,CAAC,MAAM,CAAC;oBAAE,SAAS;gBAC3C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,cAAc,QAAQ,CAAC,IAAI,EAAE;oBACnC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,QAAQ,IAAI,YAAY,MAAM,uCAAuC;oBAC9F,KAAK,EACH,kJAAkJ;oBACpJ,GAAG,EAAE,kCAAkC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,MAAM,IAAI,GAAG;oBAClH,IAAI,EAAE,cAAc;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,qBAAqB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpF,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,MAAM;QAChB,OAAO,EACL,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,gHAAgH;YAClH,CAAC,CAAC,8DAA8D;QACpE,KAAK,EAAE,qEAAqE;QAC5E,GAAG,EAAE,kHAAkH;QACvH,IAAI,EAAE,oBAAoB;KAC3B,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,qBAAqB,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACxF,OAAO,EACL,qBAAqB,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAC1D,CAAC,CAAC,0FAA0F;YAC5F,CAAC,CAAC,qCAAqC;gBACnC,GAAG,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACpB,KAAK,EACH,iGAAiG;QACnG,GAAG,EAAE,iGAAiG;QACtG,IAAI,EAAE,uCAAuC;KAC9C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC;IACvE,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,MAAM;QAChB,OAAO,EACL,gBAAgB,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,gEAAgE,gBAAgB,CAAC,MAAM,aAAa;YACtG,CAAC,CAAC,+GAA+G;QACrH,KAAK,EACH,6HAA6H;QAC/H,GAAG,EAAE,uIAAuI;QAC5I,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3F,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAkB;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B;IAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,KAAK,KAAK,SAAS;QACxB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,oBAAoB;QAC9B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAmB,EACnB,QAAyB,EACzB,eAA4C,EAC5C,WAAoC;IAEpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,yBAAyB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACzF,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,wBAAwB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACvF,IAAI,MAAM,KAAK,oBAAoB;QAAE,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7E,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAyB;IACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,oCAAoC;gBAC7C,KAAK,EAAE,gFAAgF;gBACvF,GAAG,EAAE,0DAA0D;gBAC/D,IAAI,EAAE,0CAA0C;aACjD;SACF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CACrE,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;IAC1C,OAAO;QACL;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,2BAA2B,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,CAAC,cAAc,CAAC,MAAM,qBAAqB;YACrH,KAAK,EAAE,4EAA4E;YACnF,GAAG,EAAE,wFAAwF;YAC7F,IAAI,EAAE,8CAA8C;SACrD;QACD;YACE,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACtD,OAAO,EACL,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI;gBACxB,CAAC,CAAC,4DAA4D,KAAK,CAAC,WAAW,IAAI,MAAM,QAAQ;gBACjG,CAAC,CAAC,8FAA8F;YACpG,KAAK,EACH,iGAAiG;YACnG,GAAG,EAAE,sFAAsF;YAC3F,IAAI,EAAE,YAAY;SACnB;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACpD,OAAO,EACL,WAAW,CAAC,MAAM,KAAK,CAAC;gBACtB,CAAC,CAAC,gGAAgG;gBAClG,CAAC,CAAC,gDAAgD,SAAS,CAAC,WAAW,CAAC,GAAG;YAC/E,KAAK,EACH,uFAAuF;YACzF,GAAG,EAAE,4FAA4F;YACjG,IAAI,EAAE,0CAA0C;SACjD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,eAA4C,EAC5C,WAAoC;IAEpC,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,KAAK,QAAQ,CACpE,CAAC;IACF,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAC/C,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,0BAA0B,CAAC,KAAK,QAAQ,CAC/E,CAAC;IACF,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CACvC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK,SAAS,CAC9F,CAAC;IACF,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,KAAK,QAAQ,CAC7D,CAAC;IACF,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,MAAM,0BAA0B,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACrE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CACvF,CAAC;IACF,OAAO;QACL;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,qBAAqB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC/D,OAAO,EACL,qBAAqB,CAAC,MAAM,KAAK,CAAC;gBAChC,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,kFAAkF,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnJ,KAAK,EACH,wJAAwJ;YAC1J,GAAG,EAAE,iGAAiG;YACtG,IAAI,EAAE,kDAAkD;SACzD;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC3D,OAAO,EACL,kBAAkB,CAAC,MAAM,KAAK,CAAC;gBAC7B,CAAC,CAAC,sEAAsE;gBACxE,CAAC,CAAC,sEAAsE,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5I,KAAK,EACH,wGAAwG;YAC1G,GAAG,EAAE,+DAA+D;YACpE,IAAI,EAAE,+BAA+B;SACtC;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACnD,OAAO,EACL,UAAU,CAAC,MAAM,KAAK,CAAC;gBACrB,CAAC,CAAC,sEAAsE;gBACxE,CAAC,CAAC,sEAAsE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACpI,KAAK,EACH,2FAA2F;YAC7F,GAAG,EAAE,yFAAyF;YAC9F,IAAI,EAAE,+BAA+B;SACtC;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACtD,OAAO,EACL,aAAa,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,uEAAuE;gBACzE,CAAC,CAAC,+GAA+G,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChL,KAAK,EACH,wLAAwL;YAC1L,GAAG,EAAE,oFAAoF;YACzF,IAAI,EAAE,+BAA+B;SACtC;QACD;YACE,IAAI,EAAE,mCAAmC;YACzC,kGAAkG;YAClG,yFAAyF;YACzF,QAAQ,EAAE,0BAA0B,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACnE,OAAO,EACL,0BAA0B,CAAC,MAAM,KAAK,CAAC;gBACrC,CAAC,CAAC,6EAA6E;gBAC/E,CAAC,CAAC,mGAAmG,0BAA0B,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACjL,KAAK,EACH,mPAAmP;YACrP,GAAG,EAAE,gJAAgJ;YACrJ,IAAI,EAAE,+BAA+B;SACtC;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC5D,OAAO,EACL,kBAAkB,CAAC,MAAM,KAAK,CAAC;gBAC7B,CAAC,CAAC,iFAAiF;gBACnF,CAAC,CAAC,sGAAsG,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5K,KAAK,EACH,kNAAkN;YACpN,GAAG,EAAE,wFAAwF;YAC7F,IAAI,EAAE,kDAAkD;SACzD;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACtD,OAAO,EACL,eAAe,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,6GAA6G;gBAC/G,CAAC,CAAC,kFAAkF;YACxF,KAAK,EACH,uHAAuH;YACzH,GAAG,EAAE,mFAAmF;YACxF,IAAI,EAAE,4CAA4C;SACnD;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,yBAAyB,GAAG,6DAA6D,CAAC;AAEhG,0GAA0G;AAC1G,SAAS,mBAAmB,CAAC,QAA0B;IACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,EAAE,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC;IACpB,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,MAAM,KAAK,IAAI,IAAI;oBAAE,IAAI,OAAO,KAAK,KAAK,QAAQ;wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAC/B,eAA4C,EAC5C,WAAoC;IAEpC,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,KAAK,QAAQ,CAC1D,CAAC;IACF,OAAO;QACL;YACE,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC1F,OAAO,EACL,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;gBAC5D,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,sFAAsF;YAC5F,KAAK,EAAE,oFAAoF;YAC3F,GAAG,EAAE,qEAAqE;YAC1E,IAAI,EAAE,oBAAoB;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAwC;IACjE,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,2BAA2B;QAClC,GAAG,EAAE,yDAAyD;QAC9D,IAAI,EAAE,iBAAiB;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAiC;IACrE,OAAO;QACL,yEAAyE;QACzE,EAAE;QACF,WAAW,IAAI,EAAE;QACjB,EAAE;QACF,WAAW;QACX,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QACzF,EAAE;QACF,yEAAyE;KAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,YAAoB,EACpB,cAAkC;IAElC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,cAAc;YAC/B,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAC/E,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QACrB,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,iBAAiB,CACxB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,0BAA0B,EAAE,CACtF;aACF,CAAC;QACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YACvC,OAAO,EAAE,IAAI,eAAe,CAAC,CAAC,GAAG,qBAAqB,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACrF,WAAW,EAAE;gBACX,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBACxD,YAAY,EAAE,kBAAkB;aACjC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YACd,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,iBAAiB,CACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAC3E;aACF,CAAC;QACJ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;SACtF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp-apps.js","sourceRoot":"","sources":["../../src/commands/mcp-apps.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type
|
|
1
|
+
export { type AssistantLabels, type AssistantLayoutMode, type AssistantPosition, type AssistantThemeMode, type AssistantUiOptions, annotations, asset, type BrandThemeTokens, connector, customerAuth, type EmbeddedAssistantConfig, type EmbeddedAssistantOptions, embeddedAssistant, handoffSession, type OpenAICompatibleModel, type OpenAICompatibleModelInput, openAICompatible, prompt, resource, secret, server, tool, variable, when, z, } from '@noodle-borg/authoring';
|
|
2
2
|
export { run } from './cli.js';
|
|
3
3
|
export { appendServer, clearConfig, configPath, maskToken, type NoodleConfig, readConfig, readServers, resolveAuthToken, resolveServiceUrl, type SavedServer, serversPath, writeConfig, } from './config.js';
|
|
4
4
|
export { DEFAULT_SERVICE_URL, type DeployOptions, type DeployOutcome, deploy } from './deploy.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,WAAW,EACX,KAAK,EACL,KAAK,gBAAgB,EACrB,SAAS,EACT,YAAY,EACZ,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,CAAC,GACF,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,KAAK,YAAY,EACjB,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,WAAW,EAChB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,WAAW,EACX,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,WAAW,EACX,KAAK,EAEL,SAAS,EACT,YAAY,EAGZ,iBAAiB,EACjB,cAAc,EAGd,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,CAAC,GACF,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EAET,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAA0C,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAyD,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EAItB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EAGxB,WAAW,EAGX,uBAAuB,EAGvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-notes.d.ts","sourceRoot":"","sources":["../../src/curated/hook-notes.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"hook-notes.d.ts","sourceRoot":"","sources":["../../src/curated/hook-notes.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqB7C,CAAC"}
|
|
@@ -11,6 +11,7 @@ export const HOOK_NOTES = {
|
|
|
11
11
|
useAppFlow: 'Manage named widget views with persisted params and back-stack state: `const flow = useAppFlow({ initialView, views })`.',
|
|
12
12
|
useHandoff: 'Open server-created HTTP(S) handoff URLs through the host with status/error state; domain policy still comes from `handoff.allowedDomains`.',
|
|
13
13
|
useLayout: 'Read host layout: `{ theme, displayMode, locale?, host?, supports? }` (`displayMode` is `"inline"`/`"pip"`/`"fullscreen"`) — adapt styling to the host theme and mode.',
|
|
14
|
+
useBranding: 'Read the server-level brand name and themed logo/mark/avatar URLs when widget content needs identity assets; CSS tokens are applied automatically.',
|
|
14
15
|
useRequestDisplayMode: 'Request a host-mediated layout change such as fullscreen; treat it as best-effort and keep inline rendering useful.',
|
|
15
16
|
useOpenExternal: 'Open an external link through the host (never `window.open`); the target origin must be listed in the server-level `handoff.allowedDomains`.',
|
|
16
17
|
useSendFollowUpMessage: 'Send a follow-up prompt to the model from a user interaction: `send({ prompt })` — trigger only from an explicit user action.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-notes.js","sourceRoot":"","sources":["../../src/curated/hook-notes.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,EAAE;AACF,mGAAmG;AACnG,gGAAgG;AAChG,iGAAiG;AACjG,yEAAyE;AAEzE,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,WAAW,EACT,wFAAwF;IAC1F,WAAW,EACT,4KAA4K;IAC9K,YAAY,EACV,uHAAuH;IACzH,UAAU,EACR,0HAA0H;IAC5H,UAAU,EACR,6IAA6I;IAC/I,SAAS,EACP,wKAAwK;IAC1K,qBAAqB,EACnB,qHAAqH;IACvH,eAAe,EACb,8IAA8I;IAChJ,sBAAsB,EACpB,+HAA+H;CAClI,CAAC"}
|
|
1
|
+
{"version":3,"file":"hook-notes.js","sourceRoot":"","sources":["../../src/curated/hook-notes.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,EAAE;AACF,mGAAmG;AACnG,gGAAgG;AAChG,iGAAiG;AACjG,yEAAyE;AAEzE,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,WAAW,EACT,wFAAwF;IAC1F,WAAW,EACT,4KAA4K;IAC9K,YAAY,EACV,uHAAuH;IACzH,UAAU,EACR,0HAA0H;IAC5H,UAAU,EACR,6IAA6I;IAC/I,SAAS,EACP,wKAAwK;IAC1K,WAAW,EACT,oJAAoJ;IACtJ,qBAAqB,EACnB,qHAAqH;IACvH,eAAe,EACb,8IAA8I;IAChJ,sBAAsB,EACpB,+HAA+H;CAClI,CAAC"}
|
|
@@ -35,7 +35,7 @@ export const BUNDLED_EXAMPLE_FILES = [
|
|
|
35
35
|
{ relPath: "examples/acme-discovery/src/views/widget-style.css", content: ":root {\n color-scheme: light dark;\n font-family:\n Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --nw-bg: #ffffff;\n --nw-surface: #f4fbfa;\n --nw-text: #10201f;\n --nw-muted: #5b6b6a;\n --nw-border: #d4e6e4;\n --nw-accent: #0ea5a4;\n --nw-accent-strong: #0f766e;\n --nw-accent-soft: #e6faf8;\n --nw-radius: 10px;\n --nw-shadow: 0 18px 50px rgb(15 40 40 / 12%);\n}\n\n.dark,\n[data-theme=\"dark\"] {\n --nw-bg: #0b1b1b;\n --nw-surface: #102624;\n --nw-text: #eafaf8;\n --nw-muted: #9fb6b3;\n --nw-border: #244341;\n --nw-accent: #2dd4bf;\n --nw-accent-strong: #14b8a6;\n --nw-accent-soft: #0f3835;\n --nw-shadow: 0 18px 50px rgb(0 0 0 / 30%);\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n background: var(--nw-bg);\n color: var(--nw-text);\n}\n\nbutton {\n font: inherit;\n}\n\n.nw-shell {\n min-height: 100vh;\n padding: 14px;\n background: var(--nw-bg);\n color: var(--nw-text);\n}\n\n.nw-card {\n max-width: 720px;\n margin: 0 auto;\n background: var(--nw-surface);\n border: 1px solid var(--nw-border);\n border-radius: var(--nw-radius);\n box-shadow: var(--nw-shadow);\n overflow: hidden;\n}\n\n.nw-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n border-bottom: 1px solid var(--nw-border);\n}\n\n.nw-icon svg {\n width: 26px;\n height: 26px;\n fill: none;\n stroke: var(--nw-accent);\n stroke-width: 1.7;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.nw-title-block {\n flex: 1;\n min-width: 0;\n}\n\n.nw-title {\n margin: 0;\n font-size: 17px;\n font-weight: 700;\n}\n\n.nw-subtitle {\n margin: 2px 0 0;\n font-size: 13px;\n color: var(--nw-muted);\n}\n\n.nw-chip {\n padding: 4px 10px;\n border-radius: 999px;\n background: var(--nw-accent-soft);\n color: var(--nw-accent-strong);\n font-size: 12px;\n font-weight: 600;\n}\n\n.nw-carousel {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n gap: 12px;\n padding: 16px;\n}\n\n.nw-dest {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px;\n border: 1px solid var(--nw-border);\n border-radius: 12px;\n background: var(--nw-bg);\n}\n\n.nw-dest-active {\n border-color: var(--nw-accent);\n box-shadow: 0 0 0 1px var(--nw-accent);\n}\n\n.nw-dest-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n}\n\n.nw-dest-name {\n font-weight: 700;\n}\n\n.nw-price {\n color: var(--nw-accent-strong);\n font-size: 12px;\n font-weight: 600;\n}\n\n.nw-dest-region {\n margin: 0;\n font-size: 12px;\n color: var(--nw-muted);\n}\n\n.nw-dest-why {\n margin: 0;\n font-size: 13px;\n flex: 1;\n}\n\n.nw-actions {\n display: flex;\n gap: 8px;\n padding: 0 16px 12px;\n}\n\n.nw-button {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 9px 14px;\n border: 1px solid var(--nw-border);\n border-radius: 10px;\n background: var(--nw-bg);\n color: var(--nw-text);\n cursor: pointer;\n}\n\n.nw-button svg {\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.7;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.nw-button-ghost {\n align-self: flex-start;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.nw-button-primary {\n background: var(--nw-accent);\n border-color: var(--nw-accent);\n color: #ffffff;\n font-weight: 600;\n}\n\n.nw-button-primary:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n.nw-note {\n margin: 0;\n padding: 0 16px 16px;\n font-size: 12px;\n color: var(--nw-muted);\n}\n" },
|
|
36
36
|
{ relPath: "examples/acme-discovery/test/server.test.ts", content: "import { describe, expect, it } from 'vitest';\nimport app from '../src/server.js';\n\ndescribe('acme-discovery example', () => {\n it('exports a Noodle server definition', () => {\n expect(typeof app.toManifest).toBe('function');\n });\n\n it('declares the off-app handoff domain the deep link lands on', async () => {\n // Top-of-funnel: the only external target is Acme's booking site, declared once at the server.\n const manifest = await app.toManifest();\n expect(JSON.stringify(manifest)).toContain('https://book.acme.example');\n });\n\n it('exposes the discovery tool and the handoff tool', async () => {\n const manifest = await app.toManifest();\n const text = JSON.stringify(manifest);\n // The discovery tool renders the carousel; the handoff tool emits the deep link; the widget-only\n // helper records a shortlist.\n expect(text).toContain('discover_getaways');\n expect(text).toContain('create_handoff');\n expect(text).toContain('shortlist_getaway');\n });\n});\n" },
|
|
37
37
|
{ relPath: "examples/acme-discovery/vitest.config.ts", content: "import { defineConfig } from 'vitest/config';\n\n// Local config so `npm test` (vitest run) discovers this example's own tests instead of inheriting a\n// parent monorepo config's include globs.\nexport default defineConfig({\n test: { include: ['test/**/*.test.ts'] },\n});\n" },
|
|
38
|
-
{ relPath: "examples/acme-tasks/README.md", content: "# Acme Tasks — designed around its top-3 prioritized user flows\n\nA Noodle MCP App for **Acme Tasks**, a fictional productivity tool. It is the flagship for\n**designing an app around its prioritized user flows**: a two-way (read + write) experience where the\ntop-3 flows — **Capture, Prioritize, Complete** — all happen in chat, each mapped to a tool and surfaced\nin one `TaskList` widget. It shows the \"identify and prioritize the flows first, then build\" discipline\nthe `noodle-seed` skill's `references/experience-design.md` teaches.\n\nCapability slots: prioritized multi-flow app design, a two-way (read + write) in-chat pattern, a task-list\nwidget with `tool` helpers, and a worked **design-first** artifact (the flow spec + wireframe\nbelow). A real deployment would connect the user's account with the end-user auth pattern — see\n[`../customer-auth/README.md`](../customer-auth/README.md); this example seeds a list so the focus stays\non the flows.\n\n## Design spec (write this before the code)\n\n- **What it is** — an in-chat task manager. Unlike a top-of-funnel app, there is **no handoff**: the value\n is doing the work in place (read the list, add, re-prioritize, complete).\n- **Personas** — the quick capturer (\"remind me to email the vendor\"), the morning triager (re-orders the\n day), the closer (marks things done without leaving chat).\n- **Top-3 prioritized user flows** (the heart of this example — build these, defer the rest)\n 1. **Capture** (`add_task`) — \"add: book flights for the offsite, high priority\" → task captured.\n 2. **Prioritize** (`list_today` renders the widget; `set_priority` re-orders) — triage today's list.\n 3. **Complete** (`complete_task`) — check a task off; the model can also complete on request.\n- **Tools** — `list_today` (model-visible, renders the widget), `add_task` and `complete_task`\n (model-visible), `set_priority` (widget-only helper hidden from the model).\n- **Widgets + display modes** — `TaskList` as an inline card that expands to fullscreen for a long list.\n No carousel or picture-in-picture — a single list is the right surface.\n- **Grounding** — the seeded list in `src/server.ts` stands in for the user's real list; the app never\n invents a task.\n- **Two users** — tools are atomic and model-fillable (\"high priority\" → `priority: \"high\"`), and each\n returns a spoken-ready status so the model can confirm in one turn.\n\n## Wireframe (one screen: the three flows in place)\n\n```html\n<div class=\"phone\"> <!-- in-app: solid frame -->\n <div class=\"chatgpt-header\">ChatGPT · Acme Tasks</div>\n <div class=\"msg user\">what's on my list today?</div>\n <div class=\"tool-call\">list_today { focus: \"today\" }</div>\n <div class=\"wcard\">\n <div class=\"wcard-head\">TaskList</div> <!-- component name = code + spec -->\n <div class=\"wcard-body\">\n <input placeholder=\"Add a task…\" /> <!-- Flow 1: Capture -->\n <div class=\"task\">◻ Email the vendor about the Q3 quote [high ▾]</div> <!-- Flow 2 -->\n <div class=\"task\">◻ Review the analytics pull request [medium ▾]</div>\n <div class=\"task done\">✓ Book flights for the team offsite [low ▾]</div> <!-- Flow 3 -->\n </div>\n </div>\n</div>\n```\n\n## Local author loop\n\n```sh\nnoodle validate\nnoodle test\nnoodle dev\n```\n\nIn another terminal:\n\n```sh\nnoodle tools list\nnoodle tools call list_today --args '{\"focus\":\"today\"}'\nnoodle tools call add_task --args '{\"title\":\"Book flights for the offsite\",\"priority\":\"high\"}'\nnoodle tools call complete_task --args '{\"task\":\"review_pr\",\"title\":\"Review the analytics pull request\"}'\nnoodle check --target chatgpt\n```\n\n## Deploy\n\n```sh\nnoodle link --org demo --app acme-tasks\nnoodle deploy --access owner-only\nnoodle open\n```\n\n## Optional in-product assistant\n\nThe same task tools can also sit inside Acme's authenticated web app. Add an `assistant` option to this\nserver without creating a second tool set:\n\n```ts\nassistant: embeddedAssistant({\n model: openAICompatible({\n baseUrl: variable('ASSISTANT_MODEL_BASE_URL'),\n model: variable('ASSISTANT_MODEL'),\n apiKey: secret('ASSISTANT_MODEL_API_KEY'),\n }),\n allowedOrigins: ['https://tasks.example.com'],\n
|
|
38
|
+
{ relPath: "examples/acme-tasks/README.md", content: "# Acme Tasks — designed around its top-3 prioritized user flows\n\nA Noodle MCP App for **Acme Tasks**, a fictional productivity tool. It is the flagship for\n**designing an app around its prioritized user flows**: a two-way (read + write) experience where the\ntop-3 flows — **Capture, Prioritize, Complete** — all happen in chat, each mapped to a tool and surfaced\nin one `TaskList` widget. It shows the \"identify and prioritize the flows first, then build\" discipline\nthe `noodle-seed` skill's `references/experience-design.md` teaches.\n\nCapability slots: prioritized multi-flow app design, a two-way (read + write) in-chat pattern, a task-list\nwidget with `tool` helpers, and a worked **design-first** artifact (the flow spec + wireframe\nbelow). A real deployment would connect the user's account with the end-user auth pattern — see\n[`../customer-auth/README.md`](../customer-auth/README.md); this example seeds a list so the focus stays\non the flows.\n\n## Design spec (write this before the code)\n\n- **What it is** — an in-chat task manager. Unlike a top-of-funnel app, there is **no handoff**: the value\n is doing the work in place (read the list, add, re-prioritize, complete).\n- **Personas** — the quick capturer (\"remind me to email the vendor\"), the morning triager (re-orders the\n day), the closer (marks things done without leaving chat).\n- **Top-3 prioritized user flows** (the heart of this example — build these, defer the rest)\n 1. **Capture** (`add_task`) — \"add: book flights for the offsite, high priority\" → task captured.\n 2. **Prioritize** (`list_today` renders the widget; `set_priority` re-orders) — triage today's list.\n 3. **Complete** (`complete_task`) — check a task off; the model can also complete on request.\n- **Tools** — `list_today` (model-visible, renders the widget), `add_task` and `complete_task`\n (model-visible), `set_priority` (widget-only helper hidden from the model).\n- **Widgets + display modes** — `TaskList` as an inline card that expands to fullscreen for a long list.\n No carousel or picture-in-picture — a single list is the right surface.\n- **Grounding** — the seeded list in `src/server.ts` stands in for the user's real list; the app never\n invents a task.\n- **Two users** — tools are atomic and model-fillable (\"high priority\" → `priority: \"high\"`), and each\n returns a spoken-ready status so the model can confirm in one turn.\n\n## Wireframe (one screen: the three flows in place)\n\n```html\n<div class=\"phone\"> <!-- in-app: solid frame -->\n <div class=\"chatgpt-header\">ChatGPT · Acme Tasks</div>\n <div class=\"msg user\">what's on my list today?</div>\n <div class=\"tool-call\">list_today { focus: \"today\" }</div>\n <div class=\"wcard\">\n <div class=\"wcard-head\">TaskList</div> <!-- component name = code + spec -->\n <div class=\"wcard-body\">\n <input placeholder=\"Add a task…\" /> <!-- Flow 1: Capture -->\n <div class=\"task\">◻ Email the vendor about the Q3 quote [high ▾]</div> <!-- Flow 2 -->\n <div class=\"task\">◻ Review the analytics pull request [medium ▾]</div>\n <div class=\"task done\">✓ Book flights for the team offsite [low ▾]</div> <!-- Flow 3 -->\n </div>\n </div>\n</div>\n```\n\n## Local author loop\n\n```sh\nnoodle validate\nnoodle test\nnoodle dev\n```\n\nIn another terminal:\n\n```sh\nnoodle tools list\nnoodle tools call list_today --args '{\"focus\":\"today\"}'\nnoodle tools call add_task --args '{\"title\":\"Book flights for the offsite\",\"priority\":\"high\"}'\nnoodle tools call complete_task --args '{\"task\":\"review_pr\",\"title\":\"Review the analytics pull request\"}'\nnoodle check --target chatgpt\n```\n\n## Deploy\n\n```sh\nnoodle link --org demo --app acme-tasks\nnoodle deploy --access owner-only\nnoodle open\n```\n\n## Optional in-product assistant\n\nThe same task tools can also sit inside Acme's authenticated web app. Add an `assistant` option to this\nserver without creating a second tool set:\n\n```ts\nassistant: embeddedAssistant({\n model: openAICompatible({\n baseUrl: variable('ASSISTANT_MODEL_BASE_URL'),\n model: variable('ASSISTANT_MODEL'),\n apiKey: secret('ASSISTANT_MODEL_API_KEY'),\n }),\n allowedOrigins: ['https://tasks.example.com'],\n layout: { mode: 'floating', position: 'bottom-right' },\n labels: { welcomeHeading: 'How can I help with Acme Tasks?' },\n}),\n```\n\nThe assistant automatically inherits this server's existing `branding` block, so its name, accent,\nlight/dark surfaces, density, and radius match the `TaskList` widget without a second brand declaration.\n\nThe customer backend exchanges its authenticated user through `@noodleseed/assistant/server`; the browser\nuses the Web Component or React wrapper and never receives the embed client or model secret. Validate with\n`noodle check --target embedded-assistant`, then create the backend credential with\n`noodle assistant clients create` after deployment.\n\nThis example has no connector secrets and does not include tokens, caller-key mechanisms, or\n`.env.noodle` values. All tasks are fictional seed data.\n" },
|
|
39
39
|
{ relPath: "examples/acme-tasks/design/UX-Document.md", content: "# Acme Tasks ChatGPT App — User Flow & Experience Document\n\n**Prepared by:** Noodle Seed\n**Scope:** Capture, prioritize, and complete today's tasks entirely inside ChatGPT — a two-way (read + write) task manager. There is no handoff; the value is doing the work in place.\n**Status:** Design specification (v1)\n**Two-way scope & auth stance:** IN-APP (in chat) — read today's list, capture new tasks, re-prioritize, and complete them, each write confirmed in-chat. OFF-APP — nothing transactional; the only boundary crossing is a **one-time scoped account connection** (`customerAuth` end-user OAuth: read + write, connected once). Every scope debate resolves here: if a request is \"see, add, re-order, or finish a task,\" it stays in chat; the account link is the single, revocable off-app moment.\n\n> This document is the master spec. The wireframes (`wireframe.html`), the widget code (`src/views/task-list.tsx`), and the server (`src/server.ts`) are all derivable from it. Acme Tasks is a fictional productivity app; all data below is sample content.\n\n---\n\n## Section 0 — The One-Paragraph Thesis\n\nA person mid-conversation in ChatGPT says *\"remind me to email the vendor about the Q3 quote\"* — and today that intent evaporates, because acting on it means leaving the conversation for a separate app. Acme Tasks closes that gap: the moment a task is spoken it is **captured, prioritized, and completed without ever leaving chat**. This is deliberately **not** a top-of-funnel handoff app — there is no cart to check out, no site to open, no \"continue in the app.\" The task manager *is* the conversation. We own the in-chat experience end to end (read the live list, add by natural language, re-prioritize, complete); the user owns their account, connected once through a scoped, revocable link. The strategic kicker: a to-do app is the highest-frequency surface a person touches, and the app that lets them clear their list *in the same window where the work is being discussed* becomes the one they never close. **In-chat completion is the product.**\n\n---\n\n## 1. Acme Tasks Product Overview (Knowledge Base)\n\n**What the company is.** Acme Tasks is a personal + small-team task manager: a single prioritized list per user, each task carrying a **title**, a **priority** (`high` / `medium` / `low`), and a **done** state. It is intentionally minimal — no projects, no assignees, no sub-tasks in v1 — so the model can reason about the whole list in one turn.\n\n**The data domain the app must know.** The user's *today* list. In this flagship the list is **seeded** so the design can focus on the flows; the three seed items are the canonical fixtures every downstream artifact reuses:\n\n| id | title | priority |\n| :--- | :--- | :--- |\n| `email_vendor` | Email the vendor about the Q3 quote | `high` |\n| `review_pr` | Review the analytics pull request | `medium` |\n| `book_offsite` | Book flights for the team offsite | `low` |\n\n**The highest-value / highest-risk domain** is the account write. Because the app can *complete* and *re-prioritize* real tasks, every mutation must be legible and confirmed — a silently-checked-off task is the worst possible failure.\n\n**What lives after any boundary crossing.** Nothing transactional. Unlike a discovery funnel, Acme Tasks has no off-app destination it hands users to; the only off-app step is the one-time `customerAuth` consent screen (§9). After that, everything is in chat.\n\n**Business model / why this matters.** Frequency and retention. A task app is opened many times a day; the version that removes the app-switch tax — \"I thought of it, I said it, it's on my list, it's done\" — wins the habit. The bottleneck the app removes is **context-switching**, not data entry.\n\n---\n\n## 2. Competitive Landscape — Task Managers on ChatGPT\n\nMost task integrations on assistant platforms are **read-only or one-way**: they can list what's due but push the user to a separate app to actually change anything, or they capture a task into a black box with no confirmation. The generic model can *talk about* a to-do list but has no grounded state — it will happily invent tasks that don't exist.\n\n**Acme Tasks' unique position** is the *closed two-way loop in one surface*: a grounded read (the real list, never guessed), natural-language writes (capture, re-prioritize, complete), and an in-chat confirmation for every mutation. The differentiator is not the widget — it is that the widget's actions **commit** and the user **sees what changed** without a tab switch.\n\n---\n\n## 3. Target User Personas\n\n- **The Quick Capturer** — *\"add: book flights for the offsite, low priority.\"* Thinks of a task mid-conversation and wants it on the list before the thought is gone. Values zero-friction capture.\n- **The Morning Triager** — *\"what's on my plate today?\"* Opens the day, scans the list, and re-orders priorities before starting. Values a fast, grounded read plus one-tap re-prioritize.\n- **The Closer** — *\"mark the vendor email done.\"* Finishes work and wants the satisfaction of checking it off without leaving the thread. Values instant, confirmed completion.\n\nAll three are the **same user at different moments of the day** — capture in the morning stand-up, triage before lunch, close out at end of day. The app is designed so one connected session serves all three.\n\n---\n\n## 4. Conversational User Flow\n\n### 4.1 Entry points (natural triggers)\n\n- **Capture:** \"remind me to…\", \"add a task…\", \"put X on my list\", \"I need to email the vendor.\"\n- **Prioritize / read:** \"what's on my list today?\", \"what's due?\", \"show my tasks\", \"make the PR review high priority.\"\n- **Complete:** \"mark X done\", \"I finished the vendor email\", \"check off the offsite booking.\"\n\n### 4.2 Flow architecture\n\n```\n ┌─────────────────────────────┐\n first run ─────────▶│ Connect Acme Tasks (once) │ §9 · customerAuth, scoped R/W\n └──────────────┬──────────────┘\n │ connection live thereafter\n ┌─────────────────────────────┼─────────────────────────────┐\n ▼ ▼ ▼\n ① CAPTURE ② PRIORITIZE ③ COMPLETE\n add_task list_today → TaskList complete_task\n \"add X, high\" (render widget) \"mark X done\"\n │ set_priority (in widget) │\n └──────────────▶ TaskList reflects the change ◀───────────┘\n (grounded read, always current)\n```\n\n`list_today` is the hub — it renders the `TaskList` widget the other two flows write into. Every flow returns a spoken-ready status so the model confirms in one turn.\n\n### 4.3 Detailed conversational scenarios (playscripts)\n\n**Scenario A — Capture (The Quick Capturer)**\n\n```\nUser: Add \"book flights for the team offsite\", low priority.\nTool call: add_task { title: \"Book flights for the team offsite\", priority: \"low\" }\nReturns: { status: \"Added “Book flights for the team offsite” (low).\", title, priority }\nAssistant: Added \"Book flights for the team offsite\" at low priority. Want to see the full list?\n```\n\n**Scenario B — Prioritize / read + re-order (The Morning Triager)**\n\n```\nUser: What's on my plate today?\nTool call: list_today { focus: \"today\" } ← renders TaskList widget\nReturns: { status: \"Acme Tasks for today: 3 open items, highest priority first.\", focus, tasks:[…] }\nWidget: TaskList — Email the vendor (high) · Review the analytics PR (medium) · Book offsite (low)\n\nUser: Bump the PR review to high.\nTool call: set_priority { task: \"review_pr\", priority: \"high\" } ← widget-only helper\nReturns: { status: \"Set review_pr to high priority.\", task, priority }\nWidget: TaskList re-orders — Review the analytics PR now sits with the high group.\n```\n\n**Scenario C — Complete (The Closer)**\n\n```\nUser: I finished the vendor email — mark it done.\nTool call: complete_task { task: \"email_vendor\", title: \"Email the vendor about the Q3 quote\" }\nReturns: { status: \"Completed “Email the vendor about the Q3 quote”.\", task }\nWidget: TaskList strikes the row through; open count drops from 3 → 2.\nAssistant: Done — \"Email the vendor about the Q3 quote\" is checked off. Two left today.\n```\n\n---\n\n## 5. UI Widget Specifications (Noodle Seed Apps Compliant)\n\n### 5.1 Design system compliance\n\nWidgets render inside the host (ChatGPT) via Noodle Seed's `view` component model and **CSS Cascade Layers**, so they inherit the host's light/dark surface and typography rather than shipping an app theme. Compliance rules, all enforceable via `noodle check --target chatgpt`:\n\n- **Tokens, not hard-coded chrome.** Text, surface, and border come from host/Noodle Seed semantic tokens. The **brand accent is declared once** in the server `branding` block — `accent: #7C3AED`, `surface: #F5F3FF`, `surfaceDark: #161228`, `radius: lg`, `density: comfortable` — and is restricted to the **primary CTA, the logo/check mark, and the \"high\" priority emphasis only**. It is never a background wash.\n- **Priority palette (semantic, fixed):** `high` = red `#DC2626`, `medium` = amber `#D97706`, `low` = slate `#6B7280`. These map 1:1 to the `priority` enum so the widget and the model share one vocabulary.\n- **System fonts, outlined monochrome icons, WCAG AA contrast, no nested scroll**, and every mutation shows a confirmable result. The widget exposes a single flat `data-llm` summary line (\"N open of M; K completed this session\") so the model can narrate state without re-reading the DOM.\n\n### 5.2 Display mode strategy\n\n| User intent | Display mode | Why |\n| :--- | :--- | :--- |\n| \"What's on my list?\" | **Inline card** | The whole list fits; the answer is the list. |\n| Triage a long list | **Fullscreen** (expand) | Density without nested scroll when items exceed the card. |\n| Capture / complete / re-prioritize | **Inline card (in place)** | The write updates the same card; no new surface. |\n\n**Deliberately NOT used:** *Carousel* (there is one list, not a set of peers) and *Picture-in-Picture* (nothing runs in the background). Stating the omissions is part of the compliance story.\n\n### 5.3 Widget specifications\n\n**★ `TaskList`** — the single widget; the hub all three flows read and write.\n- **Purpose:** show today's prioritized list and let the user capture, re-prioritize, and complete in place.\n- **Content fields:** header (logo, \"Acme Tasks\", status subtitle, open-count chip); a **capture input** (\"Add a task…\"); a **task row** per item = complete check + title + priority `<select>`; a footer note (\"Two-way in chat: read, capture, re-prioritize, complete\").\n- **Actions (≤2 primary):** **Add** (capture) and the per-row **complete check**; re-prioritize is a lightweight inline `<select>`, not a primary CTA.\n- **States:** *default* (seeded list), *captured* (new row appears immediately, then `add_task` records it), *re-prioritized* (row moves priority group), *completed* (row struck through, check filled, count decremented), *all-clear* (empty-state celebration + nudge to capture the next thing).\n- **Grounding flag:** the list only ever shows tasks that exist in state — the app never invents a task.\n\n---\n\n## 6. Tool Definitions (App Backend)\n\nAll tools are atomic, model-fillable from natural language, and each returns a spoken-ready `status`.\n\n**★ `list_today`** *(read-only · renders `TaskList`)*\n- **Input:** `{ focus: string = \"today\" }`\n- **Output:** `{ status, focus, tasks: [{ id, title, priority, done }] }`\n- **Notes:** `tool` — the one tool that opens the widget. Host status copy: invoking \"Loading your tasks…\", invoked \"Tasks ready\".\n\n**★ `add_task`** *(local write, non-destructive · model-visible)*\n- **Input:** `{ title: string, priority: \"high\"|\"medium\"|\"low\" = \"medium\" }`\n- **Output:** `{ status, title, priority }`\n- **Notes:** capture from natural language; \"high priority\" fills `priority: \"high\"`.\n\n**`complete_task`** *(local write, non-destructive · model-visible)*\n- **Input:** `{ task: string (id), title: string = \"\" }`\n- **Output:** `{ status, task }`\n- **Notes:** model-visible so the user can complete by voice (\"mark the vendor email done\") without touching the widget.\n\n**`set_priority`** *(local write, non-destructive · widget-only)*\n- **Input:** `{ task: string (id), priority: \"high\"|\"medium\"|\"low\" }`\n- **Output:** `{ status, task, priority }`\n- **Notes:** `tool` — hidden from the model; the `<select>` in `TaskList` is its only caller, keeping the model's tool surface to the three it should reason about.\n\n---\n\n## 7. Conversation Design Principles\n\n**Tone.** Brisk, confirming, never chatty. A task app earns trust by getting out of the way; every reply names *what changed* and offers the obvious next move.\n\n**Guardrails (non-negotiable):**\n- **Never invent a task.** The list is grounded in `list_today`'s returned state; if the app hasn't read a list, it says so rather than guessing.\n- **Never mutate silently.** Capture, re-prioritize, and complete each return a visible confirmation and update the widget — the user always sees the new state.\n- **Confirm completion explicitly.** \"Done — *X* is checked off\" plus the remaining count; completion is irreversible-feeling, so it is always narrated.\n- **Priority is the user's, not the model's.** The model may *suggest* a priority when capturing (\"this sounds high?\") but sets what the user says; it does not silently re-rank the list.\n\n**Memory strategy.** Session-scoped: captured tasks and completions persist across turns within the conversation (`added`/`done`/`priority` state layered over the seeded read). A production deployment persists to the connected account (§9).\n\n**Multi-turn intelligence.** The model **infers** structured fields from prose (\"book flights for the offsite, low\" → title + `priority: low`) and **asks** only when a title is genuinely missing. It never asks the user to restate a task it can already see in `TaskList`.\n\n---\n\n## 8. End-to-End User Journey Map\n\n| Phase | Time budget | What happens |\n| :--- | :--- | :--- |\n| **First run — Connect** | one-time, ~10s | Scoped `customerAuth` consent (read + write); dismissed forever after (§9). |\n| **Read (grounded)** | first 3–5s | \"What's on my plate?\" → `list_today` renders `TaskList` with the real list. |\n| **Capture** | ~2s per task | \"Add X, high\" → row appears instantly, `add_task` records it. |\n| **Prioritize** | ~2s per change | Inline `<select>` or \"bump the PR to high\" → `set_priority`, list re-orders. |\n| **Complete** | ~2s per task | Check the row or \"mark X done\" → `complete_task`, struck through, count drops. |\n| **Close-out** | end of day | All-clear empty state; nudge to capture tomorrow's first task. |\n\n---\n\n## 9. Account-Connection / Auth Architecture (Deep Dive)\n\nBecause Acme Tasks **writes** to the user's tasks, the first interaction is a **scoped, one-time connection** — Noodle Seed's `customerAuth` end-user OAuth pattern (see the `customer-auth` example). This replaces the \"handoff\" a top-of-funnel app would have: there is no destination to send the user to, only an account to link.\n\n**What must be true of the connection:**\n- **Plain-language scope.** The consent card names *read* (your tasks and priorities) and *write* (add, re-prioritize, complete tasks you ask me to) in the user's words — not buried in an OAuth redirect.\n- **Held by the connector, never the model.** The delegated credential is exchanged and stored by the credential broker; it is never surfaced in tool payloads, the widget, logs, or the model's context.\n- **Connected once, revocable anytime.** One connection powers all three flows; the consent card links the revoke path.\n- **The request resumes automatically.** After the user approves, the original ask (\"what's on my plate?\") continues without re-typing.\n\n**Flagship simplification (honest note):** this example ships with a **seeded** `today` list rather than a live account, so the design can stay focused on the three flows. The connect screen is wireframed as step 1 because it is the production pattern; the seed list stands in for the connected account's read. A real deployment swaps the seed for `customerAuth`-brokered account reads/writes — the tool signatures and widget do not change.\n\n**Edge cases at the boundary:** connection declined (app degrades to a read-only explanation, no writes attempted); token revoked mid-session (next write returns a re-connect prompt, never a silent failure); scope mismatch (write attempted without write scope → explicit \"reconnect to allow changes\").\n\n---\n\n## 10. Demo Scope Recommendation\n\n**MVP (build these, defer the rest):** the three flows against the seeded list, in one `TaskList` widget — Capture (`add_task`), Prioritize (`list_today` + `set_priority`), Complete (`complete_task`).\n\n**2-minute demo script:**\n1. **0:00** — \"What's on my plate today?\" → `TaskList` renders the three seed tasks, highest priority first. *(grounded read)*\n2. **0:25** — \"Add 'draft the board update', high priority.\" → new row appears at the top instantly. *(capture)*\n3. **0:50** — Open the PR review's priority `<select>`, set **high** → list re-orders. *(prioritize, in-widget)*\n4. **1:15** — \"I finished the vendor email — mark it done.\" → row strikes through, count 4 → 3. *(complete by voice)*\n5. **1:40** — Check the last row in the widget → all-clear empty state + \"capture tomorrow's first task?\" *(close the loop)*\n\n---\n\n## 11. Technical Architecture (High Level)\n\n- **Server:** one `server('acme_tasks', …)` in `src/server.ts` (Noodle Seed authoring SDK), four tools, `branding` tokens, per-tool CSP allowlist.\n- **Widget:** `TaskList` (`src/views/task-list.tsx`), a React `view` using `useCallTool` / `useToolInfo` / `useLayout` / `useViewState`; local session state (`added` / `done` / `priority`) layered over the `list_today` read, each change recorded through a tool call.\n- **State:** session-scoped in the flagship (seed list + local overlay). Production: `customerAuth`-brokered reads/writes to the account.\n- **Validation loop:** `noodle validate` → `noodle test` → `noodle dev`; compliance via `noodle check --target chatgpt`.\n\n---\n\n## 12. Success Metrics\n\n| Metric | Maps to |\n| :--- | :--- |\n| **Connect completion rate** | % of first-runs that finish the `customerAuth` consent (§9). |\n| **In-chat write rate** | writes (`add_task` + `set_priority` + `complete_task`) per session — the core \"work done in chat\" signal. |\n| **Capture-to-list latency** | time from utterance to the row appearing in `TaskList` (target < 1s optimistic). |\n| **Completion rate** | % of read sessions that end with at least one `complete_task` — the retention-driving \"closed the loop\" event. |\n| **Return frequency** | sessions per user per day — the habit metric a task app lives or dies on. |\n\n**Attribution:** each tool call carries the connected account identity (server identity + tenant), so writes are traceable to the session without exposing the credential.\n\n---\n\n## 13. Future Enhancements (Post-Launch)\n\n- **Live account** via `customerAuth` replacing the seed list (the natural first step out of the flagship).\n- **Due dates & scheduling** (\"email the vendor by Friday\") once the model can be trusted to parse relative dates.\n- **Bulk triage** (\"move everything low to tomorrow\") — a batched, previewed, reversible write.\n- **Projects / grouping** beyond a single flat list, once the single-list flows are proven.\n- **Undo** as a first-class in-chat verb for every write.\n\n---\n\n## Appendix — Two-Way Scope Cheat-Sheet\n\n| User request | In chat (in-app) | Off-app |\n| :--- | :---: | :---: |\n| \"What's on my list?\" | ✓ `list_today` → `TaskList` | — |\n| \"Add a task…\" | ✓ `add_task` | — |\n| \"Make X high priority\" | ✓ `set_priority` | — |\n| \"Mark X done\" | ✓ `complete_task` | — |\n| First-run account link | — | ✓ `customerAuth` consent (once, scoped, revocable) |\n| Anything transactional | — | *(none — the app has no transactional off-app step)* |\n" },
|
|
40
40
|
{ relPath: "examples/acme-tasks/design/wireframe.html", content: "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Acme Tasks × ChatGPT — Two-Way App Wireframes</title>\n<style>\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap');\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: 'Inter', -apple-system, sans-serif; background: #f4f5f7; color: #1f1f1f; line-height: 1.55; }\n .mono { font-family: 'JetBrains Mono', monospace; }\n\n /* ── Acme Tasks branding + host-compliant tokens ── */\n :root {\n --accent: #7C3AED; /* branding.accent — CTAs, logo, high-priority emphasis only */\n --accent-soft: #EDE9FE;\n --accent-border: #DDD6FE;\n --ink: #161228; /* branding.surfaceDark — ChatGPT / system surface */\n --hi: #DC2626; /* priority: high */\n --med: #D97706; /* priority: medium */\n --low: #6B7280; /* priority: low */\n --green: #059669;\n --green-soft: #E7F6EF;\n --green-border: #A7E0C6;\n --amber: #B45309;\n --amber-soft: #FBF1E2;\n --amber-border: #EBD7A8;\n --blue-soft: #E8EEFB;\n --line: #ececeb;\n }\n\n .page-header { background: var(--ink); color: #fff; border-bottom: 3px solid var(--accent); padding: 30px 48px; position: sticky; top: 0; z-index: 100; }\n .page-header h1 { font-size: 22px; font-weight: 800; letter-spacing: -0.4px; }\n .page-header h1 .brand { color: #b79bff; }\n .page-header p { font-size: 13px; color: #b3b3c2; margin-top: 4px; }\n .page-header .scope { display: inline-block; margin-top: 10px; font-size: 11px; font-weight: 600; letter-spacing: 0.4px; padding: 4px 12px; background: var(--accent); color: #fff; border-radius: 4px; }\n\n .section-nav { background: #fff; border-bottom: 1px solid #e6e8ec; padding: 12px 48px; display: flex; gap: 22px; font-size: 12px; font-weight: 600; position: sticky; top: 100px; z-index: 99; overflow-x: auto; }\n .section-nav a { color: #8a929c; text-decoration: none; white-space: nowrap; }\n .section-nav a:hover { color: var(--accent); }\n\n .container { max-width: 1480px; margin: 0 auto; padding: 40px 48px 90px; }\n\n /* ── Legend ── */\n .vocab { display: flex; gap: 18px; flex-wrap: wrap; margin: 0 0 24px; padding: 14px 18px; background: #fff; border: 1px solid #e6e8ec; border-radius: 12px; font-size: 12px; color: #555; }\n .vocab-item { display: flex; align-items: center; gap: 8px; }\n .vocab-sw { width: 16px; height: 16px; border-radius: 4px; border: 1px solid rgba(0,0,0,0.1); }\n .vocab-sw.accent { background: var(--accent); }\n .vocab-sw.hi { background: var(--hi); } .vocab-sw.med { background: var(--med); } .vocab-sw.low { background: var(--low); }\n .vocab-sw.green { background: var(--green); }\n .vocab-sw.ink { background: var(--ink); }\n .vocab-sw.grey { background: #cdd2d8; }\n\n .section { margin-bottom: 72px; }\n .section-label { font-size: 11px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: var(--accent); margin-bottom: 8px; display: block; }\n .section-title { font-size: 27px; font-weight: 800; letter-spacing: -0.5px; margin-bottom: 6px; color: var(--ink); }\n .section-subtitle { font-size: 14px; color: #5c6570; margin-bottom: 24px; max-width: 880px; }\n\n /* ── Rationale block ── */\n .rationale { background: #fff; border: 1px solid #e6e8ec; border-left: 3px solid var(--accent); border-radius: 10px; padding: 16px 20px; margin-bottom: 24px; max-width: 960px; }\n .rationale h4 { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px; color: #8a929c; margin-bottom: 8px; }\n .rationale p { font-size: 13px; color: #3d454e; line-height: 1.6; margin-bottom: 8px; }\n .rationale p:last-child { margin-bottom: 0; }\n .r-tag { display: inline-block; font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: 4px; margin-right: 4px; }\n .r-tag.ux { background: var(--green-soft); color: #15734d; }\n .r-tag.ui { background: var(--blue-soft); color: #1d4fa0; }\n .r-tag.acme { background: var(--accent-soft); color: #5b21b6; }\n .r-tag.trust { background: var(--amber-soft); color: #8a5a0a; }\n\n /* ── Phones ── */\n .phones-row { display: flex; gap: 26px; overflow-x: auto; padding-bottom: 16px; align-items: stretch; }\n .phone-step { flex-shrink: 0; display: flex; flex-direction: column; align-items: center; }\n .step-label { font-size: 11px; font-weight: 600; color: #99a1ab; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 12px; text-align: center; max-width: 320px; }\n .step-label small { font-weight: 400; letter-spacing: 0; text-transform: none; color: #b3bac2; display: block; margin-top: 2px; }\n .phone { width: 322px; min-height: 660px; background: #fff; border: 2px solid var(--ink); border-radius: 32px; overflow: hidden; display: flex; flex-direction: column; }\n .phone.offapp { border-color: #b9c0c8; border-style: dashed; }\n .phone-notch { width: 100px; height: 24px; background: var(--ink); border-radius: 0 0 14px 14px; margin: 0 auto; flex-shrink: 0; }\n .phone.offapp .phone-notch { background: #b9c0c8; }\n .phone-screen { padding: 16px; display: flex; flex-direction: column; gap: 12px; flex: 1; }\n .step-arrow { display: flex; align-items: center; justify-content: center; flex-shrink: 0; align-self: center; width: 34px; font-size: 24px; color: #c6ccd3; }\n\n .chatgpt-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 0 10px; border-bottom: 1px solid #eef0f2; }\n .chatgpt-header .model-name { font-size: 14px; font-weight: 600; }\n .chatgpt-header .dots { font-size: 18px; color: #aab; letter-spacing: 2px; }\n .browser-header { display: flex; align-items: center; gap: 8px; padding: 8px 0 10px; border-bottom: 1px solid #eef0f2; }\n .browser-header .url { flex: 1; font-size: 9.5px; color: #8a929c; background: #f1f3f5; border-radius: 12px; padding: 6px 10px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n .browser-header .lock { color: var(--green); font-size: 11px; }\n\n .msg { max-width: 94%; font-size: 13px; line-height: 1.55; }\n .msg.user { align-self: flex-end; background: #ece9e3; color: #1f1f1f; padding: 10px 14px; border-radius: 18px 18px 4px 18px; margin-left: auto; }\n .msg.assistant { color: #1f1f1f; padding: 2px 0; }\n .msg.assistant strong { font-weight: 600; }\n .msg.assistant .ok { color: var(--green); font-weight: 600; }\n\n .tool-call { display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: #f7f8f9; border: 1px solid #e6e8ec; border-radius: 10px; font-size: 11px; color: #5c6570; }\n .tool-call .icon { width: 20px; height: 20px; background: var(--accent); border-radius: 5px; display: flex; align-items: center; justify-content: center; font-size: 12px; flex-shrink: 0; font-weight: 800; color: #fff; }\n .tool-call .label { font-weight: 700; color: #3d454e; }\n .mono-tool { font-family: 'JetBrains Mono', monospace; color: #8a929c; }\n\n /* ── Widget card (TaskList) ── */\n .wcard { border: 1.5px solid #e0e3e7; border-radius: 14px; background: #fff; overflow: hidden; }\n .wcard-head { padding: 11px 14px; background: #fbfbfa; border-bottom: 1px solid var(--line); display: flex; align-items: center; gap: 8px; }\n .wcard-head .wc-logo { width: 18px; height: 18px; background: var(--accent); border-radius: 5px; display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 800; color: #fff; }\n .wcard-head .wc-title { font-size: 12.5px; font-weight: 700; letter-spacing: 0.2px; color: #1f1f1f; }\n .wcard-head .wc-sub { font-size: 10px; color: #a0a4a8; margin-left: auto; font-family: 'JetBrains Mono', monospace; }\n .wcard-body { padding: 12px 14px; display: flex; flex-direction: column; gap: 10px; }\n\n /* ── Capture input ── */\n .capture { display: flex; gap: 8px; }\n .capture .cinput { flex: 1; font-size: 12px; color: #6b7280; background: #f6f7f9; border: 1px solid #e3e6ea; border-radius: 8px; padding: 8px 10px; }\n .capture .cinput.typed { color: #1f1f1f; }\n .capture .cadd { font-size: 12px; font-weight: 700; color: #fff; background: var(--accent); border-radius: 8px; padding: 8px 14px; }\n\n /* ── Task rows ── */\n .task { display: flex; gap: 10px; align-items: center; padding: 8px 0; border-bottom: 1px solid #f2f2f0; }\n .task:last-child { border-bottom: none; }\n .tcheck { width: 18px; height: 18px; border-radius: 50%; border: 1.6px solid #c6ccd3; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: 10px; }\n .tcheck.done { background: var(--green); border-color: var(--green); color: #fff; }\n .ttitle { flex: 1; font-size: 12.5px; color: #202020; line-height: 1.35; min-width: 0; }\n .ttitle.done { text-decoration: line-through; color: #a8adb2; }\n .pri { font-size: 9.5px; font-weight: 700; padding: 2px 8px; border-radius: 5px; flex-shrink: 0; display: inline-flex; align-items: center; gap: 3px; }\n .pri.hi { background: rgba(220,38,38,0.10); color: var(--hi); }\n .pri.med { background: rgba(217,119,6,0.10); color: var(--med); }\n .pri.low { background: rgba(107,114,128,0.12); color: var(--low); }\n .pri .caret { font-size: 8px; opacity: 0.7; }\n\n .note { font-size: 11px; color: #5c6570; background: #f7f8f9; border-radius: 8px; padding: 8px 10px; line-height: 1.5; }\n .note.why { border-left: 3px solid var(--accent); }\n .note.ok { background: var(--green-soft); color: #146b32; border-left: 3px solid var(--green); }\n .caution { display: flex; gap: 6px; font-size: 10.5px; font-weight: 600; padding: 7px 9px; background: var(--amber-soft); color: #8a5a0a; border: 1px solid var(--amber-border); border-radius: 8px; line-height: 1.45; }\n .disclaimer { font-size: 9.5px; color: #a0a4a8; font-style: italic; line-height: 1.45; padding-top: 2px; }\n .footnote { font-size: 10px; color: #8a929c; text-align: center; padding-top: 4px; }\n\n .cta { padding: 9px 10px; background: var(--accent); border-radius: 9px; text-align: center; font-size: 12px; font-weight: 700; color: #fff; }\n .cta.ghost { background: #fff; border: 1.5px solid #d4d8dd; color: #4a525c; }\n .cta-row { display: flex; gap: 8px; }\n .cta-row .cta { flex: 1; }\n\n /* ── Connect / customerAuth ── */\n .connect { text-align: center; padding: 6px 4px; }\n .connect .ci { width: 46px; height: 46px; background: var(--accent); border-radius: 12px; margin: 6px auto 12px; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 22px; font-weight: 800; }\n .connect .ctitle { font-size: 14px; font-weight: 800; color: var(--ink); }\n .scopes { text-align: left; font-size: 10.5px; color: #4a525c; display: flex; flex-direction: column; gap: 6px; margin: 6px 0; }\n .scopes .sc { display: flex; gap: 7px; align-items: flex-start; }\n .scopes .sc .k { color: var(--green); font-weight: 800; min-width: 34px; }\n\n .dest { border: 1.5px solid #e0e3e7; border-radius: 10px; padding: 11px; }\n .dest .dh { font-size: 12px; font-weight: 800; color: var(--ink); margin-bottom: 6px; }\n .dest .dl { font-size: 11px; color: #5c6570; line-height: 1.5; }\n\n .empty { text-align: center; padding: 8px 4px; }\n .empty .ei { width: 44px; height: 44px; background: var(--green); border-radius: 12px; margin: 4px auto 10px; display: flex; align-items: center; justify-content: center; font-size: 22px; }\n .empty .et { font-size: 13px; font-weight: 800; color: var(--ink); }\n\n /* ── Gallery ── */\n .gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 22px; }\n .spec-frame { display: flex; flex-direction: column; gap: 8px; }\n .spec-frame .sf-name { font-size: 12px; font-weight: 700; color: var(--ink); }\n .spec-frame .sf-name span { font-weight: 400; color: #8a929c; }\n\n /* ── API appendix ── */\n .api-panel { background: #fff; border: 1px solid #e6e8ec; border-radius: 12px; padding: 18px 22px; margin-bottom: 18px; max-width: 1040px; }\n .api-panel h4 { font-size: 13px; font-weight: 800; color: var(--ink); margin-bottom: 10px; }\n .api-step { display: flex; gap: 10px; align-items: baseline; padding: 7px 0; border-bottom: 1px dashed #eceef1; font-size: 12.5px; }\n .api-step:last-child { border-bottom: none; }\n .api-step .verb { font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 700; color: #fff; background: var(--accent); padding: 2px 7px; border-radius: 4px; flex-shrink: 0; }\n .api-step .verb.read { background: #64748b; }\n .api-step .tname { font-family: 'JetBrains Mono', monospace; font-weight: 700; color: #3d454e; }\n .api-note { font-size: 11px; color: #6b7280; padding: 4px 0 2px 0; line-height: 1.5; }\n\n /* ── Audit table ── */\n .audit-table { width: 100%; border-collapse: collapse; background: #fff; border: 1px solid #e6e8ec; border-radius: 12px; overflow: hidden; font-size: 12.5px; }\n .audit-table th { text-align: left; background: #fafbfc; color: #5c6570; font-weight: 700; font-size: 11px; text-transform: uppercase; letter-spacing: 0.4px; padding: 11px 14px; border-bottom: 1px solid #e6e8ec; }\n .audit-table td { padding: 11px 14px; border-bottom: 1px solid #f0f1f3; vertical-align: top; color: #3d454e; line-height: 1.5; }\n .audit-table tr:last-child td { border-bottom: none; }\n .audit-table .req { font-weight: 700; color: var(--ink); width: 22%; }\n .verdict { font-weight: 800; font-size: 11px; padding: 2px 8px; border-radius: 5px; white-space: nowrap; }\n .verdict.pass { background: var(--green-soft); color: #146b32; }\n .verdict.flag { background: var(--amber-soft); color: #8a5a0a; }\n\n .footer { text-align: center; font-size: 11px; color: #99a1ab; padding: 30px; border-top: 1px solid #e6e8ec; }\n</style>\n</head>\n<body>\n\n<div class=\"page-header\">\n <h1><span class=\"brand\">Acme Tasks</span> × ChatGPT — Two-Way App Wireframes</h1>\n <p>Prepared by Noodle Seed · a two-way (read + write) task manager — capture, prioritize & complete, all in chat · three core flows</p>\n <span class=\"scope\">SCOPE: two-way in chat — Capture · Prioritize · Complete · OFF-APP: one-time scoped account link (customerAuth) only</span>\n</div>\n\n<div class=\"section-nav\">\n <a href=\"#legend\">Legend</a>\n <a href=\"#connect\">First-run · Connect</a>\n <a href=\"#flow\">End-to-End Flow</a>\n <a href=\"#capture\">1 · Capture</a>\n <a href=\"#prioritize\">2 · Prioritize</a>\n <a href=\"#complete\">3 · Complete</a>\n <a href=\"#gallery\">Widget Gallery</a>\n <a href=\"#api\">MCP Tools</a>\n <a href=\"#audit\">Compliance Audit</a>\n</div>\n\n<div class=\"container\">\n\n <!-- LEGEND -->\n <div class=\"section\" id=\"legend\">\n <div class=\"vocab\">\n <div class=\"vocab-item\"><span class=\"vocab-sw accent\"></span> Acme accent — primary CTAs, logo & checks only</div>\n <div class=\"vocab-item\"><span class=\"vocab-sw hi\"></span> high</div>\n <div class=\"vocab-item\"><span class=\"vocab-sw med\"></span> medium</div>\n <div class=\"vocab-item\"><span class=\"vocab-sw low\"></span> low</div>\n <div class=\"vocab-item\"><span class=\"vocab-sw green\"></span> Completed / success</div>\n <div class=\"vocab-item\"><span class=\"vocab-sw ink\"></span> ChatGPT system surface</div>\n <div class=\"vocab-item\"><span class=\"vocab-sw grey\"></span> Off-app (dashed phone → account link only)</div>\n </div>\n <div class=\"rationale\">\n <h4>How to read these wireframes</h4>\n <p>Solid-border phones are the <strong>in-ChatGPT app</strong>. Acme Tasks is a <strong>two-way (read + write) app</strong>, not a discovery funnel: every widget reflects the user's real list, and each action — capture, re-prioritize, complete — is <strong>recorded through a tool call</strong> and confirmed in-chat. The single dashed phone is the <strong>one-time account link</strong> (<span class=\"mono\">customerAuth</span>); there is no transactional off-app step.</p>\n <p>Widgets are built with the Noodle Seed authoring SDK — <span class=\"mono\">tool + view</span> renders <span class=\"mono\">TaskList</span>; <span class=\"mono\">tool + app visibility</span> powers the in-widget re-prioritize. Styling uses host/Noodle Seed semantic tokens via CSS cascade layers; the brand accent (<span class=\"mono\">#7C3AED</span>) is reserved for the logo, checks, primary CTA and <em>high</em> emphasis. Priority uses fixed semantic colors: high red · medium amber · low slate.</p>\n <p><span class=\"r-tag ux\">UX</span> flow rationale <span class=\"r-tag ui\">UI</span> interface rationale <span class=\"r-tag acme\">ACME</span> product-model fit <span class=\"r-tag trust\">TRUST</span> write-safety / grounding guardrail</p>\n </div>\n </div>\n\n <!-- CONNECT -->\n <div class=\"section\" id=\"connect\">\n <span class=\"section-label\">First-run</span>\n <h2 class=\"section-title\">Connect Acme Tasks — scoped, once</h2>\n <p class=\"section-subtitle\">Because the app writes to the user's tasks, the very first interaction is a scoped account connection. It names exactly what the app can read and change, is dismissed forever after, and the original request resumes automatically. <em>(This flagship seeds the list so the flows stay in focus; the connect screen is the production pattern — see <span class=\"mono\">customer-auth</span>.)</em></p>\n <div class=\"rationale\">\n <h4>Why it's built this way</h4>\n <p><span class=\"r-tag trust\">TRUST</span> An app that can complete and re-prioritize your tasks needs unambiguous, plain-language consent — the scope card names read vs. write in the user's words and links the revoke path, rather than burying it in an OAuth redirect.</p>\n <p><span class=\"r-tag acme\">ACME</span> Uses Noodle Seed's <span class=\"mono\">customerAuth</span> end-user OAuth. One connection powers all three flows; the delegated credential is held by the credential broker, never surfaced to the model, the widget, or logs.</p>\n </div>\n <div class=\"phones-row\">\n <div class=\"phone-step\">\n <div class=\"step-label\">Connect prompt</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">What's on my plate today?</div>\n <div class=\"msg assistant\">I can pull your live Acme Tasks list — let's connect it first (takes a few seconds).</div>\n <div class=\"wcard\"><div class=\"wcard-body\">\n <div class=\"connect\">\n <div class=\"ci\">✓</div>\n <div class=\"ctitle\">Connect Acme Tasks</div>\n </div>\n <div class=\"scopes\">\n <div class=\"sc\"><span class=\"k\">Read</span><span>your tasks and their priorities</span></div>\n <div class=\"sc\"><span class=\"k\">Write</span><span>add, re-prioritize & complete tasks you ask me to</span></div>\n </div>\n <div class=\"cta\">Connect Acme Tasks</div>\n <div class=\"disclaimer\">Scoped end-user OAuth (customerAuth) · read + write · revoke anytime in Acme Tasks → Settings → Connections.</div>\n </div></div>\n </div></div>\n </div>\n <div class=\"step-arrow\">→</div>\n <div class=\"phone-step\">\n <div class=\"step-label\">Authorize (off-app)</div>\n <div class=\"phone offapp\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"browser-header\"><span class=\"lock\">🔒</span><span class=\"url\">tasks.acme.example/oauth/authorize?scope=tasks.read+tasks.write</span></div>\n <div class=\"dest\">\n <div class=\"dh\">Acme Tasks authorization</div>\n <div class=\"dl\">User signs in and approves read + write. Acme redirects back with a token held by the connector, not the model. <strong>Happens once.</strong></div>\n </div>\n <div class=\"note\" style=\"margin-top:8px;\">↩ On return, the original request (\"what's on my plate today?\") resumes automatically — no re-typing.</div>\n </div></div>\n </div>\n <div class=\"step-arrow\">→</div>\n <div class=\"phone-step\">\n <div class=\"step-label\">Connected → request resumes</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"note ok\">✓ Acme Tasks connected — I'll keep it linked for next time.</div>\n <div class=\"tool-call\"><span class=\"icon read\">✓</span><span><span class=\"label\">list_today</span> <span class=\"mono-tool\">{ focus: \"today\" }</span></span></div>\n <div class=\"msg assistant\">Here's today 👇 <span style=\"color:#8a929c;\">(see Flow 2)</span></div>\n </div></div>\n </div>\n </div>\n </div>\n\n <!-- END TO END FLOW -->\n <div class=\"section\" id=\"flow\">\n <span class=\"section-label\">The whole loop</span>\n <h2 class=\"section-title\">End-to-end: read today → capture → re-prioritize → complete</h2>\n <p class=\"section-subtitle\">One connected session touching all three flows. The user reads the grounded list, captures a new task, bumps a priority, and checks work off — never leaving the conversation, every change recorded and confirmed in place.</p>\n <div class=\"phones-row\">\n\n <!-- Step 1 · read -->\n <div class=\"phone-step\">\n <div class=\"step-label\">1 · Read today<small>grounded list</small></div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">What's on my plate today?</div>\n <div class=\"tool-call\"><span class=\"icon read\">✓</span><span><span class=\"label\">list_today</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 3 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"capture\"><span class=\"cinput\">Add a task…</span><span class=\"cadd\">Add</span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri med\">medium <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Book flights for the team offsite</div><span class=\"pri low\">low <span class=\"caret\">▾</span></span></div>\n <div class=\"footnote\">Two-way in chat: read, capture, re-prioritize, complete.</div>\n </div></div>\n </div></div>\n </div>\n\n <div class=\"step-arrow\">→</div>\n\n <!-- Step 2 · capture -->\n <div class=\"phone-step\">\n <div class=\"step-label\">2 · Capture<small>natural language</small></div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">Add \"draft the board update\", high priority.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">add_task</span> <span class=\"mono-tool\">{ title:\"Draft the board update\", priority:\"high\" }</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 4 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Draft the board update</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri med\">medium <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Added \"Draft the board update\" (high).</div>\n </div></div>\n </div></div>\n </div>\n\n <div class=\"step-arrow\">→</div>\n\n <!-- Step 3 · prioritize -->\n <div class=\"phone-step\">\n <div class=\"step-label\">3 · Prioritize<small>in-widget re-order</small></div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">Bump the PR review to high.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">set_priority</span> <span class=\"mono-tool\">{ task:\"review_pr\", priority:\"high\" }</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 4 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Draft the board update</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Set review_pr to high priority.</div>\n </div></div>\n </div></div>\n </div>\n\n <div class=\"step-arrow\">→</div>\n\n <!-- Step 4 · complete -->\n <div class=\"phone-step\">\n <div class=\"step-label\">4 · Complete<small>checked & confirmed</small></div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">I finished the vendor email — mark it done.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">complete_task</span> <span class=\"mono-tool\">{ task:\"email_vendor\", title:\"Email the vendor…\" }</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 3 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck done\">✓</div><div class=\"ttitle done\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high</span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Draft the board update</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Completed \"Email the vendor about the Q3 quote\". 3 left today.</div>\n </div></div>\n </div></div>\n </div>\n\n </div>\n </div>\n\n <!-- FLOW 1 : CAPTURE -->\n <div class=\"section\" id=\"capture\">\n <span class=\"section-label\">Flow 1 · lowest friction</span>\n <h2 class=\"section-title\">Capture — a spoken thought becomes a task, instantly</h2>\n <p class=\"section-subtitle\">The moment a task is mentioned it lands on the list. The model parses the prose into a title and priority, the row appears optimistically, and <span class=\"mono\">add_task</span> records it — no form, no app-switch.</p>\n <div class=\"rationale\">\n <h4>Why it's built this way</h4>\n <p><span class=\"r-tag ux\">UX</span> Capture must be the fastest path in the app — the thought is fragile. \"Add X, high\" is one turn: the model fills <span class=\"mono\">{ title, priority }</span> from natural language, so the user never fills a field by hand.</p>\n <p><span class=\"r-tag ui\">UI</span> The new row renders immediately (optimistic), then the tool call confirms with a spoken-ready status. The capture input lives at the top of <span class=\"mono\">TaskList</span> so keyboard capture and voice capture converge on the same widget.</p>\n <p><span class=\"r-tag trust\">TRUST</span> Priority is the user's: the model may <em>suggest</em> (\"sounds high?\") but sets what the user says, and defaults to <span class=\"mono\">medium</span> when unstated — it never silently ranks work.</p>\n </div>\n <div class=\"phones-row\">\n <div class=\"phone-step\">\n <div class=\"step-label\">Say it</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">Remind me to book flights for the team offsite — low priority.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">add_task</span> <span class=\"mono-tool\">{ title:\"Book flights for the team offsite\", priority:\"low\" }</span></span></div>\n <div class=\"msg assistant\">Added it to today's list at low priority.</div>\n </div></div>\n </div>\n <div class=\"step-arrow\">→</div>\n <div class=\"phone-step\">\n <div class=\"step-label\">Row appears (optimistic + recorded)</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 3 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"capture\"><span class=\"cinput typed\">Book flights for the team offsite</span><span class=\"cadd\">Add</span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri med\">medium <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Book flights for the team offsite</div><span class=\"pri low\">low <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Added \"Book flights for the team offsite\" (low).</div>\n </div></div>\n </div></div>\n </div>\n </div>\n </div>\n\n <!-- FLOW 2 : PRIORITIZE -->\n <div class=\"section\" id=\"prioritize\">\n <span class=\"section-label\">Flow 2 · the hub</span>\n <h2 class=\"section-title\">Prioritize — read the day, then re-order it in place</h2>\n <p class=\"section-subtitle\"><span class=\"mono\">list_today</span> renders the grounded list, highest priority first; the per-row priority control (a <span class=\"mono\">tool + app visibility</span> helper hidden from the model) lets the user re-rank without describing the task twice. This is the widget the other two flows write into.</p>\n <div class=\"rationale\">\n <h4>Why it's built this way</h4>\n <p><span class=\"r-tag ux\">UX</span> \"What's on my plate?\" wants an answer <em>and</em> a next move. The list is grouped high → low so the triager sees the real order at a glance and adjusts with one tap.</p>\n <p><span class=\"r-tag acme\">ACME</span> Re-prioritize is <span class=\"mono\">set_priority</span> as <span class=\"mono\">tool + app visibility</span> — <strong>widget-only</strong>, hidden from the model's tool surface. The model reasons about three tools (list, add, complete); the fourth is pure UI plumbing, keeping the model's choices clean.</p>\n <p><span class=\"r-tag trust\">TRUST</span> The list only ever shows tasks that exist — the app never invents a task or a priority. Every re-rank echoes a confirmation (\"Set review_pr to high priority\").</p>\n </div>\n <div class=\"phones-row\">\n <div class=\"phone-step\">\n <div class=\"step-label\">Grounded read</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">What's due today?</div>\n <div class=\"tool-call\"><span class=\"icon read\">✓</span><span><span class=\"label\">list_today</span> <span class=\"mono-tool\">{ focus:\"today\" }</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 3 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri med\">medium <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Book flights for the team offsite</div><span class=\"pri low\">low <span class=\"caret\">▾</span></span></div>\n </div></div>\n </div></div>\n </div>\n <div class=\"step-arrow\">→</div>\n <div class=\"phone-step\">\n <div class=\"step-label\">Re-prioritize (widget-only write)</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"note why\"><strong>Tapping the priority ▾</strong> on \"Review the analytics pull request\" → <span class=\"mono\">high</span>. The list re-orders in place.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">set_priority</span> <span class=\"mono-tool\">{ task:\"review_pr\", priority:\"high\" }</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 3 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Book flights for the team offsite</div><span class=\"pri low\">low <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Set review_pr to high priority.</div>\n </div></div>\n </div></div>\n </div>\n </div>\n </div>\n\n <!-- FLOW 3 : COMPLETE -->\n <div class=\"section\" id=\"complete\">\n <span class=\"section-label\">Flow 3 · the payoff</span>\n <h2 class=\"section-title\">Complete — check it off by voice or tap, confirmed every time</h2>\n <p class=\"section-subtitle\">The satisfaction loop. The user finishes work and closes it out — either by tapping the row's check or by saying \"mark X done\" (<span class=\"mono\">complete_task</span> is model-visible). The row strikes through, the open count drops, and the model narrates what changed.</p>\n <div class=\"rationale\">\n <h4>Why it's built this way</h4>\n <p><span class=\"r-tag ux\">UX</span> Completion is the reward that drives return visits, so it is friction-free two ways: the check in <span class=\"mono\">TaskList</span> and the spoken \"mark X done\". Ending on an all-clear empty state nudges the next capture instead of a dead end.</p>\n <p><span class=\"r-tag trust\">TRUST</span> Completion is never silent: <span class=\"mono\">complete_task</span> returns \"Completed '…'\" plus the remaining count, and the struck-through row is the visible receipt. The model confirms in the same turn.</p>\n <p><span class=\"r-tag acme\">ACME</span> <span class=\"mono\">complete_task</span> is model-visible (unlike re-prioritize) precisely because \"I finished X\" is a natural sentence the user will say — the model must be able to act on it directly.</p>\n </div>\n <div class=\"phones-row\">\n <div class=\"phone-step\">\n <div class=\"step-label\">Complete by voice (write + confirm)</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">Done with the vendor email and the PR review.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">complete_task ×2</span> <span class=\"mono-tool\">email_vendor · review_pr</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 1 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck done\">✓</div><div class=\"ttitle done\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high</span></div>\n <div class=\"task\"><div class=\"tcheck done\">✓</div><div class=\"ttitle done\">Review the analytics pull request</div><span class=\"pri med\">medium</span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Book flights for the team offsite</div><span class=\"pri low\">low <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Completed 2 tasks. 1 left today.</div>\n </div></div>\n </div></div>\n </div>\n <div class=\"step-arrow\">→</div>\n <div class=\"phone-step\">\n <div class=\"step-label\">All clear (close the loop)</div>\n <div class=\"phone\"><div class=\"phone-notch\"></div><div class=\"phone-screen\">\n <div class=\"chatgpt-header\"><span class=\"model-name\">ChatGPT · Acme Tasks</span><span class=\"dots\">···</span></div>\n <div class=\"msg user\">Booked the flights too — check it off.</div>\n <div class=\"tool-call\"><span class=\"icon\">✓</span><span><span class=\"label\">complete_task · list_today</span></span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · all clear</span><span class=\"wc-sub\">TaskList · empty</span></div><div class=\"wcard-body\">\n <div class=\"empty\"><div class=\"ei\">🎉</div><div class=\"et\">All clear for today</div></div>\n <div class=\"note ok\">Everything on today's list is done — 3/3 completed this session.</div>\n <div class=\"cta-row\"><div class=\"cta\">Capture tomorrow's first task</div></div>\n <div class=\"disclaimer\">Nudges to the next capture instead of leaving the user at a dead end.</div>\n </div></div>\n </div></div>\n </div>\n </div>\n </div>\n\n <!-- WIDGET GALLERY -->\n <div class=\"section\" id=\"gallery\">\n <span class=\"section-label\">Reference</span>\n <h2 class=\"section-title\">Widget gallery</h2>\n <p class=\"section-subtitle\">One widget, <span class=\"mono\">TaskList</span>, across its states. Compliant: system fonts, neutral surfaces, accent reserved for logo/checks/primary CTA/high emphasis; priority in fixed semantic colors (high red · medium amber · low slate).</p>\n <div class=\"gallery\">\n\n <div class=\"spec-frame\">\n <div class=\"sf-name\">TaskList ★ <span>· grounded read (default)</span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 3 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"capture\"><span class=\"cinput\">Add a task…</span><span class=\"cadd\">Add</span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri med\">medium <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Book flights for the team offsite</div><span class=\"pri low\">low <span class=\"caret\">▾</span></span></div>\n </div></div>\n </div>\n\n <div class=\"spec-frame\">\n <div class=\"sf-name\">TaskList <span>· captured (optimistic + recorded)</span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 4 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Draft the board update</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Added \"Draft the board update\" (high).</div>\n </div></div>\n </div>\n\n <div class=\"spec-frame\">\n <div class=\"sf-name\">TaskList <span>· completed (write + confirm)</span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · 2 open</span><span class=\"wc-sub\">TaskList</span></div><div class=\"wcard-body\">\n <div class=\"task\"><div class=\"tcheck done\">✓</div><div class=\"ttitle done\">Email the vendor about the Q3 quote</div><span class=\"pri hi\">high</span></div>\n <div class=\"task\"><div class=\"tcheck\"></div><div class=\"ttitle\">Review the analytics pull request</div><span class=\"pri med\">medium <span class=\"caret\">▾</span></span></div>\n <div class=\"note ok\">✓ Completed \"Email the vendor…\". 2 left.</div>\n </div></div>\n </div>\n\n <div class=\"spec-frame\">\n <div class=\"sf-name\">TaskList <span>· all-clear empty state</span></div>\n <div class=\"wcard\"><div class=\"wcard-head\"><span class=\"wc-logo\">✓</span><span class=\"wc-title\">Today's tasks · all clear</span><span class=\"wc-sub\">TaskList · empty</span></div><div class=\"wcard-body\">\n <div class=\"empty\"><div class=\"ei\">🎉</div><div class=\"et\">All clear for today</div></div>\n <div class=\"cta\">Capture tomorrow's first task</div>\n </div></div>\n </div>\n\n <div class=\"spec-frame\">\n <div class=\"sf-name\">Connect / customerAuth <span>· scoped consent</span></div>\n <div class=\"wcard\"><div class=\"wcard-body\">\n <div class=\"connect\"><div class=\"ci\">✓</div><div class=\"ctitle\">Connect Acme Tasks</div></div>\n <div class=\"scopes\"><div class=\"sc\"><span class=\"k\">R/W</span><span>read tasks & priorities · add, re-prioritize, complete</span></div></div>\n <div class=\"cta\">Connect Acme Tasks</div>\n </div></div>\n </div>\n\n </div>\n </div>\n\n <!-- MCP TOOLS APPENDIX -->\n <div class=\"section\" id=\"api\">\n <span class=\"section-label\">Technical appendix</span>\n <h2 class=\"section-title\">MCP tools & call sequence</h2>\n <p class=\"section-subtitle\">The four tools behind the flows. <span class=\"mono\">list_today</span> is the only widget-opening tool (<span class=\"mono\">tool + view</span>); <span class=\"mono\">set_priority</span> is widget-only (<span class=\"mono\">tool + app visibility</span>, hidden from the model); <span class=\"mono\">add_task</span> and <span class=\"mono\">complete_task</span> are model-visible.</p>\n\n <div class=\"api-panel\">\n <h4>Read & render (Flow 2 · the hub)</h4>\n <div class=\"api-step\"><span class=\"verb read\">READ</span><span><span class=\"tname\">list_today</span> — returns { status, focus, tasks:[{ id, title, priority, done }] } and renders TaskList</span></div>\n <div class=\"api-note\">Input <span class=\"mono\">{ focus:\"today\" }</span>. Read-only annotation; host status copy: invoking \"Loading your tasks…\", invoked \"Tasks ready\". This is the single widget-opening tool — the other flows write into the card it renders.</div>\n </div>\n\n <div class=\"api-panel\">\n <h4>Capture (Flow 1)</h4>\n <div class=\"api-step\"><span class=\"verb\">WRITE</span><span><span class=\"tname\">add_task</span> — returns { status, title, priority }</span></div>\n <div class=\"api-note\">Input <span class=\"mono\">{ title, priority: \"high\"|\"medium\"|\"low\" = \"medium\" }</span>. Model-fillable from prose (\"book flights, low\" → { title, priority:\"low\" }); local non-destructive write. Status is spoken-ready so the model confirms in one turn.</div>\n </div>\n\n <div class=\"api-panel\">\n <h4>Prioritize (Flow 2 helper) & Complete (Flow 3)</h4>\n <div class=\"api-step\"><span class=\"verb\">WRITE</span><span><span class=\"tname\">set_priority</span> — returns { status, task, priority } · tool + app visibility, hidden from the model</span></div>\n <div class=\"api-note\">Input <span class=\"mono\">{ task:id, priority }</span>. Called only by the priority ▾ in TaskList — keeps the model's tool surface to the three it should reason about.</div>\n <div class=\"api-step\"><span class=\"verb\">WRITE</span><span><span class=\"tname\">complete_task</span> — returns { status, task } · model-visible</span></div>\n <div class=\"api-note\">Input <span class=\"mono\">{ task:id, title:\"\" }</span>. Model-visible so \"I finished X\" completes directly; local non-destructive write, confirmed with the remaining count.</div>\n </div>\n </div>\n\n <!-- COMPLIANCE AUDIT -->\n <div class=\"section\" id=\"audit\">\n <span class=\"section-label\">Submission-ready</span>\n <h2 class=\"section-title\">OpenAI Apps SDK Compliance Audit</h2>\n <p class=\"section-subtitle\">Every row cites concrete app behavior. Built with the Noodle Seed authoring SDK and verified with <span class=\"mono\">noodle check --target chatgpt</span>.</p>\n\n <table class=\"audit-table\">\n <thead><tr><th class=\"req\">Requirement</th><th>How Acme Tasks addresses it</th><th>Verdict</th></tr></thead>\n <tbody>\n <tr><td class=\"req\">Conversational value</td><td>Capture parses prose into structured fields (\"book flights for the offsite, low\" → { title, priority:\"low\" }); complete-by-voice (\"I finished the vendor email\") acts directly — actions no tap-only app affords.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Beyond base ChatGPT</td><td>Grounded read of the user's real list (never guessed) plus committed writes to the connected account — state the base model cannot hold.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Atomic, model-friendly tools</td><td>Four tools, explicit Zod input/output schemas, each returning a spoken-ready status. <span class=\"mono\">list_today</span> / <span class=\"mono\">add_task</span> / <span class=\"mono\">complete_task</span> model-visible; <span class=\"mono\">set_priority</span> widget-only.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Helpful UI only</td><td>One widget, <span class=\"mono\">TaskList</span> — visual scanning of a prioritized list plus in-place capture/complete/re-prioritize. No carousel (one list) and no PiP (nothing backgrounded); omissions are deliberate.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">In-chat task completion</td><td>The whole loop — read, capture, re-prioritize, complete — finishes in chat; there is no handoff. The only off-app step is the one-time account link.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Performance & responsiveness</td><td>Optimistic render on capture/complete, then the tool call records; one tool call per user step. Host status copy shown while <span class=\"mono\">list_today</span> loads.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Discoverability</td><td>Broad natural triggers: \"remind me to…\", \"what's on my list?\", \"make X high priority\", \"mark X done\". Golden-prompt set & description keywords are a launch workstream.</td><td><span class=\"verdict flag\">PLAN</span></td></tr>\n <tr><td class=\"req\">Design tokens & theming</td><td>Host/Noodle Seed semantic tokens via CSS cascade layers; brand accent (<span class=\"mono\">#7C3AED</span>) restricted to logo, checks, primary CTA & high emphasis. Adapts to host light/dark.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">System fonts, icons, WCAG AA</td><td>System font stack; single outlined monochrome check icon; contrast on priority chips and CTAs meets AA; no nested scroll (inline card → fullscreen for long lists).</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">≤2 primary actions on inline card</td><td>Two primaries — capture <strong>Add</strong> and the per-row <strong>complete</strong> check; re-prioritize is a lightweight inline control, not a CTA.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Write safety (domain guardrail)</td><td>No silent mutation: capture, re-prioritize & complete each return a confirmation and update the widget. Completion always states the remaining count. Priority is the user's — the model suggests, never silently re-ranks.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Grounding (domain guardrail)</td><td>The list only shows tasks that exist in state; the app never invents a task. A production deployment reads from the connected account, not the model's memory.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n <tr><td class=\"req\">Scoped account auth & secrets</td><td>Scoped <span class=\"mono\">customerAuth</span> (read + write), connected once, revocable. Delegated credential held by the credential broker — never in tool payloads, the widget, or logs.</td><td><span class=\"verdict pass\">PASS</span></td></tr>\n </tbody>\n </table>\n </div>\n\n</div>\n\n<div class=\"footer\">\n Acme Tasks × ChatGPT — Two-Way App Wireframes · Noodle Seed · v1 · July 2026<br>\n Illustrative wireframes for a fictional app. Built with the Noodle Seed authoring SDK (tool + view / tool + app visibility · customerAuth). This flagship seeds the task list; a production deployment connects the user's account. Task data shown is sample content.\n</div>\n\n</body>\n</html>\n" },
|
|
41
41
|
{ relPath: "examples/acme-tasks/noodle.json", content: "{\n \"entrypoint\": \"src/server.ts\",\n \"name\": \"acme-tasks\",\n \"template\": \"widget\"\n}\n" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example-files.js","sourceRoot":"","sources":["../../src/generated/example-files.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,kFAAkF;AAClF,iGAAiG;AAQjG,uGAAuG;AACvG,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,OAAO;IACP,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,YAAY;IACZ,aAAa;CACd,CAAC;AAEF,yGAAyG;AACzG,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAClE,EAAE,OAAO,EAAE,gCAAgC,EAAE,OAAO,EAAE,0pEAA0pE,EAAE;IACltE,EAAE,OAAO,EAAE,4CAA4C,EAAE,OAAO,EAAE,u/wBAAu/wB,EAAE;IAC3jxB,EAAE,OAAO,EAAE,6CAA6C,EAAE,OAAO,EAAE,kkQAAkkQ,EAAE;IACvoQ,EAAE,OAAO,EAAE,4CAA4C,EAAE,OAAO,EAAE,klqDAAklqD,EAAE;IACtpqD,EAAE,OAAO,EAAE,kCAAkC,EAAE,OAAO,EAAE,wGAAwG,EAAE;IAClK,EAAE,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,mfAAmf,EAAE;IAC9iB,EAAE,OAAO,EAAE,qCAAqC,EAAE,OAAO,EAAE,yRAAyR,EAAE;IACtV,EAAE,OAAO,EAAE,oCAAoC,EAAE,OAAO,EAAE,i9LAAi9L,EAAE;IAC7gM,EAAE,OAAO,EAAE,8CAA8C,EAAE,OAAO,EAAE,okLAAokL,EAAE;IAC1oL,EAAE,OAAO,EAAE,iDAAiD,EAAE,OAAO,EAAE,8zHAA8zH,EAAE;IACv4H,EAAE,OAAO,EAAE,0CAA0C,EAAE,OAAO,EAAE,wyBAAwyB,EAAE;IAC12B,EAAE,OAAO,EAAE,uCAAuC,EAAE,OAAO,EAAE,uRAAuR,EAAE;IACtV,EAAE,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,2tIAA2tI,EAAE;IACtxI,EAAE,OAAO,EAAE,+CAA+C,EAAE,OAAO,EAAE,mrhCAAmrhC,EAAE;IAC1vhC,EAAE,OAAO,EAAE,+CAA+C,EAAE,OAAO,EAAE,g4sDAAg4sD,EAAE;IACv8sD,EAAE,OAAO,EAAE,qCAAqC,EAAE,OAAO,EAAE,2GAA2G,EAAE;IACxK,EAAE,OAAO,EAAE,sCAAsC,EAAE,OAAO,EAAE,sfAAsf,EAAE;IACpjB,EAAE,OAAO,EAAE,wCAAwC,EAAE,OAAO,EAAE,yRAAyR,EAAE;IACzV,EAAE,OAAO,EAAE,uCAAuC,EAAE,OAAO,EAAE,gqOAAgqO,EAAE;IAC/tO,EAAE,OAAO,EAAE,0DAA0D,EAAE,OAAO,EAAE,4jLAA4jL,EAAE;IAC9oL,EAAE,OAAO,EAAE,oDAAoD,EAAE,OAAO,EAAE,ijHAAijH,EAAE;IAC7nH,EAAE,OAAO,EAAE,6CAA6C,EAAE,OAAO,EAAE,8/BAA8/B,EAAE;IACnkC,EAAE,OAAO,EAAE,0CAA0C,EAAE,OAAO,EAAE,uRAAuR,EAAE;IACzV,EAAE,OAAO,EAAE,+BAA+B,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"example-files.js","sourceRoot":"","sources":["../../src/generated/example-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAIA,8FAA8F;AAC9F,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAuDzC,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAgBxC,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAwChD,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAIA,8FAA8F;AAC9F,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAuDzC,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAgBxC,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAwChD,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAWxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,iGAAiG;AAEjG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,MAAM;IACN,SAAS;IACT,UAAU;IACV,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,MAAM;IACN,OAAO;IACP,WAAW;IACX,SAAS;IACT,KAAK;IACL,UAAU;IACV,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,MAAM;IACN,aAAa;IACb,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,WAAW;CACZ,CAAC;AAEF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,aAAa;IACb,OAAO;IACP,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,GAAG;CACJ,CAAC;AAEF,iGAAiG;AACjG,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,8BAA8B;IAC9B,uBAAuB;IACvB,cAAc;IACd,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,0BAA0B;IAC1B,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,uBAAuB;IACvB,wBAAwB;IACxB,6BAA6B;IAC7B,eAAe;IACf,gCAAgC;IAChC,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,cAAc;CACf,CAAC;AAEF,oGAAoG;AACpG,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,aAAa;IACb,aAAa;IACb,cAAc;IACd,WAAW;IACX,uBAAuB;IACvB,iBAAiB;IACjB,wBAAwB;IACxB,YAAY;IACZ,YAAY;CACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,iGAAiG;AAEjG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,MAAM;IACN,SAAS;IACT,UAAU;IACV,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,MAAM;IACN,OAAO;IACP,WAAW;IACX,SAAS;IACT,KAAK;IACL,UAAU;IACV,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,MAAM;IACN,aAAa;IACb,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,WAAW;CACZ,CAAC;AAEF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,aAAa;IACb,OAAO;IACP,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,GAAG;CACJ,CAAC;AAEF,iGAAiG;AACjG,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,8BAA8B;IAC9B,uBAAuB;IACvB,cAAc;IACd,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,0BAA0B;IAC1B,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,uBAAuB;IACvB,wBAAwB;IACxB,6BAA6B;IAC7B,eAAe;IACf,gCAAgC;IAChC,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,cAAc;CACf,CAAC;AAEF,oGAAoG;AACpG,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,aAAa;IACb,aAAa;IACb,cAAc;IACd,WAAW;IACX,aAAa;IACb,uBAAuB;IACvB,iBAAiB;IACjB,wBAAwB;IACxB,YAAY;IACZ,YAAY;CACb,CAAC"}
|
|
@@ -216,7 +216,7 @@ export function renderAuthoringWorkflowReference() {
|
|
|
216
216
|
'',
|
|
217
217
|
'## Embedded assistant',
|
|
218
218
|
'',
|
|
219
|
-
'To place the same server tools inside the SaaS web app, add `assistant: embeddedAssistant({ model: openAICompatible({ baseUrl: variable("ASSISTANT_MODEL_BASE_URL"), model: variable("ASSISTANT_MODEL"), apiKey: secret("ASSISTANT_MODEL_API_KEY") }), allowedOrigins: ["https://app.example.com"],
|
|
219
|
+
'To place the same server tools inside the SaaS web app, declare the shared identity once with `branding: { name: "Acme", accent: "#3157D5", surface: "#FFFFFF", surfaceDark: "#161B26", theme: { dark: { accent: "#9FB4FF" } } }`, then add `assistant: embeddedAssistant({ model: openAICompatible({ baseUrl: variable("ASSISTANT_MODEL_BASE_URL"), model: variable("ASSISTANT_MODEL"), apiKey: secret("ASSISTANT_MODEL_API_KEY") }), allowedOrigins: ["https://app.example.com"], layout: { mode: "floating", position: "bottom-right" } })`. Widgets and the embed inherit the same brand kit. Keep origins exact. The customer backend uses `@noodleseed/assistant/server` to exchange its already-authenticated user for a short-lived browser session; client and model secrets never enter the browser. Run `noodle check --target embedded-assistant` before deploy, then manage backend credentials with `noodle assistant clients create|list|rotate|revoke`.',
|
|
220
220
|
'',
|
|
221
221
|
'## Boundaries',
|
|
222
222
|
'',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-authoring-refs.js","sourceRoot":"","sources":["../src/skill-authoring-refs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"skill-authoring-refs.js","sourceRoot":"","sources":["../src/skill-authoring-refs.ts"],"names":[],"mappings":"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"}
|