mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
1963a0eb18
This enables the use of the `experimentalWebMcpTool` option on signal forms and implicitly declares a WebMCP tool based on the form data model. This is an experiment inspirted by the WebMCP declarative forms API to see if Angular's framework-level knowledge of the form's declarative data model can produce higher quality WebMCP tools than the web standard can on its own with less effort from the developer.
Example:
```typescript
// main.ts
import {bootstrapApplication} from '@angular/platform-browser';
import {provideExperimentalWebMcpForms} from '@angular/forms';
import {MyComp} from './form';
bootstrapApplication(MyComp, {
providers: [
// Activate the feature.
provideExperimentalWebMcpForms(),
],
});
```
```typescript
// form.ts
import {Component, signal} from '@angular/core';
import {form} from '@angular/forms';
@Component({ /* ... */ })
export class MyComp {
private readonly f = form(signal({
firstName: '',
lastName: '',
}), {
// Implicitly creates a WebMCP tool named `createUser` which accepts a `firstName` and `lastName` as parameters.
experimentalWebMcpTool: {
name: 'createUser',
description: 'Creates a user with the given name.',
},
// Invokes the submit action when the agent calls the WebMCP tool.
submission: {
action: () => {
console.log('User clicked submit, or agent called the tool!');
},
},
});
// ...
}
```
28 lines
682 B
Python
28 lines
682 B
Python
load("//tools:defaults.bzl", "ng_project", "zoneless_jasmine_test")
|
|
|
|
ng_project(
|
|
name = "test_lib",
|
|
testonly = True,
|
|
srcs = glob(["**/*.spec.ts"]),
|
|
deps = [
|
|
"//packages/common/http",
|
|
"//packages/common/http/testing",
|
|
"//packages/core",
|
|
"//packages/core/testing",
|
|
"//packages/forms",
|
|
"//packages/forms:node_modules/zod",
|
|
"//packages/forms/signals",
|
|
"//packages/forms/signals/compat",
|
|
"//packages/platform-browser",
|
|
"//packages/platform-browser/testing",
|
|
"//packages/private/testing",
|
|
],
|
|
)
|
|
|
|
zoneless_jasmine_test(
|
|
name = "test",
|
|
data = [
|
|
":test_lib",
|
|
],
|
|
)
|