@vurb/core 3.5.0 → 3.6.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/README.md +51 -2
- package/dist/cli/scaffold.js +2 -0
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/templates/config.js +1 -1
- package/dist/cli/templates/config.js.map +1 -1
- package/dist/cli/templates/index.d.ts +1 -0
- package/dist/cli/templates/index.d.ts.map +1 -1
- package/dist/cli/templates/index.js +2 -0
- package/dist/cli/templates/index.js.map +1 -1
- package/dist/cli/templates/model.d.ts +7 -0
- package/dist/cli/templates/model.d.ts.map +1 -0
- package/dist/cli/templates/model.js +31 -0
- package/dist/cli/templates/model.js.map +1 -0
- package/dist/cli/templates/presenter.d.ts.map +1 -1
- package/dist/cli/templates/presenter.js +4 -9
- package/dist/cli/templates/presenter.js.map +1 -1
- package/dist/cli/templates/readme.d.ts.map +1 -1
- package/dist/cli/templates/readme.js +2 -0
- package/dist/cli/templates/readme.js.map +1 -1
- package/dist/core/builder/BuildPipeline.d.ts +56 -0
- package/dist/core/builder/BuildPipeline.d.ts.map +1 -0
- package/dist/core/builder/BuildPipeline.js +139 -0
- package/dist/core/builder/BuildPipeline.js.map +1 -0
- package/dist/core/builder/FluentToolBuilder.d.ts +64 -19
- package/dist/core/builder/FluentToolBuilder.d.ts.map +1 -1
- package/dist/core/builder/FluentToolBuilder.js +116 -114
- package/dist/core/builder/FluentToolBuilder.js.map +1 -1
- package/dist/core/builder/ProxyHandler.d.ts +26 -0
- package/dist/core/builder/ProxyHandler.d.ts.map +1 -0
- package/dist/core/builder/ProxyHandler.js +65 -0
- package/dist/core/builder/ProxyHandler.js.map +1 -0
- package/dist/core/builder/SemanticDefaults.d.ts +25 -0
- package/dist/core/builder/SemanticDefaults.d.ts.map +1 -0
- package/dist/core/builder/SemanticDefaults.js +16 -0
- package/dist/core/builder/SemanticDefaults.js.map +1 -0
- package/dist/core/builder/index.d.ts +2 -1
- package/dist/core/builder/index.d.ts.map +1 -1
- package/dist/core/builder/index.js +1 -0
- package/dist/core/builder/index.js.map +1 -1
- package/dist/core/middleware/AuditTrail.d.ts.map +1 -1
- package/dist/core/middleware/AuditTrail.js +6 -2
- package/dist/core/middleware/AuditTrail.js.map +1 -1
- package/dist/core/middleware/RateLimiter.d.ts.map +1 -1
- package/dist/core/middleware/RateLimiter.js +3 -1
- package/dist/core/middleware/RateLimiter.js.map +1 -1
- package/dist/fsm/StateMachineGate.d.ts +3 -0
- package/dist/fsm/StateMachineGate.d.ts.map +1 -1
- package/dist/fsm/StateMachineGate.js +12 -0
- package/dist/fsm/StateMachineGate.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model/defineModel.d.ts +167 -0
- package/dist/model/defineModel.d.ts.map +1 -0
- package/dist/model/defineModel.js +345 -0
- package/dist/model/defineModel.js.map +1 -0
- package/dist/model/index.d.ts +8 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +7 -0
- package/dist/model/index.js.map +1 -0
- package/dist/observability/TelemetryBus.d.ts.map +1 -1
- package/dist/observability/TelemetryBus.js +14 -13
- package/dist/observability/TelemetryBus.js.map +1 -1
- package/dist/presenter/Presenter.d.ts +21 -0
- package/dist/presenter/Presenter.d.ts.map +1 -1
- package/dist/presenter/Presenter.js +17 -8
- package/dist/presenter/Presenter.js.map +1 -1
- package/dist/presenter/PresenterPipeline.d.ts +2 -0
- package/dist/presenter/PresenterPipeline.d.ts.map +1 -1
- package/dist/presenter/PresenterPipeline.js +4 -0
- package/dist/presenter/PresenterPipeline.js.map +1 -1
- package/dist/presenter/definePresenter.d.ts.map +1 -1
- package/dist/presenter/definePresenter.js +13 -3
- package/dist/presenter/definePresenter.js.map +1 -1
- package/dist/resource/ResourceRegistry.d.ts +3 -0
- package/dist/resource/ResourceRegistry.d.ts.map +1 -1
- package/dist/resource/ResourceRegistry.js +8 -2
- package/dist/resource/ResourceRegistry.js.map +1 -1
- package/dist/sandbox/SandboxGuard.js +7 -4
- package/dist/sandbox/SandboxGuard.js.map +1 -1
- package/dist/server/ServerAttachment.d.ts.map +1 -1
- package/dist/server/ServerAttachment.js +48 -9
- package/dist/server/ServerAttachment.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<img src="https://github.com/user-attachments/assets/86ae1b28-a938-4e12-af29-bfc60a55dbe8" style="border-radius:8px;background:#000000;padding:10px;border:1px solid #414141;" alt="Vurb.ts">
|
|
6
6
|
</picture>
|
|
7
7
|
|
|
8
|
-
**The
|
|
9
|
-
|
|
8
|
+
**The TypeScript Framework for MCP Servers.**<br>
|
|
9
|
+
Type-safe tools, structured AI perception, and built-in security. Deploy once — every AI assistant connects instantly.
|
|
10
10
|
|
|
11
11
|
[](https://www.npmjs.com/package/@vurb/core)
|
|
12
12
|
[](https://www.npmjs.com/package/@vurb/core)
|
|
@@ -20,6 +20,55 @@ Structured perception for AI agents. Zero hallucination. Zero data leaks.
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## Zero Learning Curve — Ship a SKILL.md, Not a Tutorial
|
|
24
|
+
|
|
25
|
+
Every framework you've adopted followed the same loop: read the docs, study the conventions, hit an edge case, search GitHub issues, re-read the docs. Weeks before your first production PR. Your AI coding agent does the same — it hallucinates Express patterns into your Hono project because it has no formal contract to work from.
|
|
26
|
+
|
|
27
|
+
Vurb.ts ships a **[SKILL.md](https://agentskills.io)** — a machine-readable architectural contract that your AI agent ingests before generating a single line. Not a tutorial. Not a "getting started guide" the LLM will paraphrase loosely. A **typed specification**: every Fluent API method, every builder chain, every Presenter composition rule, every middleware signature, every file-based routing convention. The agent doesn't approximate — it compiles against the spec.
|
|
28
|
+
|
|
29
|
+
**One prompt. Working server. Zero iterations:**
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
→ "Build an MCP server for patient records with Prisma.
|
|
33
|
+
Redact SSN and diagnosis from LLM output. Add an FSM
|
|
34
|
+
that gates discharge tools until attending physician signs off."
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The agent reads `SKILL.md` and produces:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// src/tools/patients/discharge.ts — generated by your AI agent
|
|
41
|
+
const PatientPresenter = createPresenter('Patient')
|
|
42
|
+
.schema({ id: t.string, name: t.string, ssn: t.string, diagnosis: t.string })
|
|
43
|
+
.redactPII(['ssn', 'diagnosis'])
|
|
44
|
+
.rules(['HIPAA: diagnosis visible in UI blocks but REDACTED in LLM output']);
|
|
45
|
+
|
|
46
|
+
const gate = f.fsm({
|
|
47
|
+
id: 'discharge', initial: 'admitted',
|
|
48
|
+
states: {
|
|
49
|
+
admitted: { on: { SIGN_OFF: 'cleared' } },
|
|
50
|
+
cleared: { on: { DISCHARGE: 'discharged' } },
|
|
51
|
+
discharged: { type: 'final' },
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
export default f.mutation('patients.discharge')
|
|
56
|
+
.describe('Discharge a patient')
|
|
57
|
+
.bindState('cleared', 'DISCHARGE')
|
|
58
|
+
.returns(PatientPresenter)
|
|
59
|
+
.handle(async (input, ctx) => ctx.db.patients.update({
|
|
60
|
+
where: { id: input.id }, data: { status: 'discharged' },
|
|
61
|
+
}));
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Correct Presenter with `.redactPII()`. FSM gating that makes `patients.discharge` invisible until sign-off. File-based routing. Typed handler. **First pass — no corrections.**
|
|
65
|
+
|
|
66
|
+
This works on Cursor, Claude Code, GitHub Copilot, Windsurf, Cline — any agent that can read a file. The `SKILL.md` is the single source of truth: the agent doesn't need to have been trained on Vurb.ts, it just needs to read the spec.
|
|
67
|
+
|
|
68
|
+
> **You don't learn Vurb.ts. You don't teach your agent Vurb.ts.** You hand it a 400-line contract. It writes the server. You review the PR.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
23
72
|
## Get Started in 5 Seconds
|
|
24
73
|
|
|
25
74
|
```bash
|
package/dist/cli/scaffold.js
CHANGED
|
@@ -61,6 +61,8 @@ function buildFileList(config) {
|
|
|
61
61
|
// ── Tools ────────────────────────────────────────────
|
|
62
62
|
files.push({ path: 'src/tools/system/health.ts', content: tpl.healthToolTs() });
|
|
63
63
|
files.push({ path: 'src/tools/system/echo.ts', content: tpl.echoToolTs() });
|
|
64
|
+
// ── Model ─────────────────────────────────────────────
|
|
65
|
+
files.push({ path: 'src/models/SystemModel.ts', content: tpl.systemModelTs() });
|
|
64
66
|
// ── Presenter ────────────────────────────────────────
|
|
65
67
|
files.push({ path: 'src/presenters/SystemPresenter.ts', content: tpl.systemPresenterTs() });
|
|
66
68
|
// ── Prompts ──────────────────────────────────────────
|
package/dist/cli/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { CORE_VERSION, TESTING_VERSION, MCP_SDK_VERSION, ZOD_VERSION } from './c
|
|
|
3
3
|
export function packageJson(config) {
|
|
4
4
|
const deps = {
|
|
5
5
|
'@modelcontextprotocol/sdk': MCP_SDK_VERSION,
|
|
6
|
-
'vurb': CORE_VERSION,
|
|
6
|
+
'@vurb/core': CORE_VERSION,
|
|
7
7
|
'zod': ZOD_VERSION,
|
|
8
8
|
};
|
|
9
9
|
if (config.vector === 'prisma') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/templates/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7F,wDAAwD;AACxD,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC7C,MAAM,IAAI,GAA2B;QACjC,2BAA2B,EAAE,eAAe;QAC5C,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/templates/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
export { packageJson, tsconfig, gitignore, envExample } from './config.js';
|
|
8
8
|
export { vurbTs, contextTs, serverTs } from './core.js';
|
|
9
9
|
export { healthToolTs, echoToolTs } from './tools.js';
|
|
10
|
+
export { systemModelTs } from './model.js';
|
|
10
11
|
export { systemPresenterTs } from './presenter.js';
|
|
11
12
|
export { greetPromptTs } from './prompt.js';
|
|
12
13
|
export { authMiddlewareTs } from './middleware.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -10,6 +10,8 @@ export { packageJson, tsconfig, gitignore, envExample } from './config.js';
|
|
|
10
10
|
export { vurbTs, contextTs, serverTs } from './core.js';
|
|
11
11
|
// Tools
|
|
12
12
|
export { healthToolTs, echoToolTs } from './tools.js';
|
|
13
|
+
// Model
|
|
14
|
+
export { systemModelTs } from './model.js';
|
|
13
15
|
// Presenter
|
|
14
16
|
export { systemPresenterTs } from './presenter.js';
|
|
15
17
|
// Prompt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3E,+CAA+C;AAC/C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExD,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtD,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvE,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3E,+CAA+C;AAC/C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExD,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtD,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvE,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2CAA2C;AAC3C,wBAAgB,aAAa,IAAI,MAAM,CAwBtC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Template — MVA Domain Layer (defineModel)
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
/** Generate `src/models/SystemModel.ts` */
|
|
6
|
+
export function systemModelTs() {
|
|
7
|
+
return `/**
|
|
8
|
+
* System Model — MVA Domain Layer (defineModel)
|
|
9
|
+
*
|
|
10
|
+
* Defines the shape of system health data using defineModel().
|
|
11
|
+
* The Model provides:
|
|
12
|
+
* - Field types with m.string(), m.number(), etc.
|
|
13
|
+
* - .describe() annotations that become JIT system rules
|
|
14
|
+
* - Validation and casting for the domain entity
|
|
15
|
+
*
|
|
16
|
+
* The Presenter references this Model instead of raw z.object(),
|
|
17
|
+
* keeping a single source of truth for the data shape.
|
|
18
|
+
*/
|
|
19
|
+
import { defineModel } from '@vurb/core';
|
|
20
|
+
|
|
21
|
+
export const SystemModel = defineModel('SystemHealth', m => {
|
|
22
|
+
m.casts({
|
|
23
|
+
status: m.string('Server operational status'),
|
|
24
|
+
uptime: m.number('Uptime in seconds since process start'),
|
|
25
|
+
version: m.string('Server version string'),
|
|
26
|
+
timestamp: m.string('ISO 8601 timestamp of this check'),
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
`;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/cli/templates/model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2CAA2C;AAC3C,MAAM,UAAU,aAAa;IACzB,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBV,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/presenter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mDAAmD;AACnD,wBAAgB,iBAAiB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/presenter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mDAAmD;AACnD,wBAAgB,iBAAiB,IAAI,MAAM,CAkC1C"}
|
|
@@ -9,27 +9,22 @@ export function systemPresenterTs() {
|
|
|
9
9
|
' * System Presenter — MVA View Layer (Egress Firewall)',
|
|
10
10
|
' *',
|
|
11
11
|
' * Defines how the Agent perceives system health data.',
|
|
12
|
-
' * The
|
|
12
|
+
' * The Model schema acts as a field whitelist — undeclared',
|
|
13
13
|
' * fields are physically stripped in RAM before they',
|
|
14
14
|
' * reach the LLM context window.',
|
|
15
15
|
' *',
|
|
16
16
|
' * Features demonstrated:',
|
|
17
|
-
' * - definePresenter() with
|
|
17
|
+
' * - definePresenter() with Model schema (not raw z.object)',
|
|
18
18
|
' * - .describe() auto-rules (JIT — travel with data, not in global prompt)',
|
|
19
19
|
' * - ui.markdown() server-rendered UI blocks',
|
|
20
20
|
' * - suggestActions() for HATEOAS-style affordances',
|
|
21
21
|
' */',
|
|
22
22
|
"import { definePresenter, ui } from '@vurb/core';",
|
|
23
|
-
"import {
|
|
23
|
+
"import { SystemModel } from '../models/SystemModel.js';",
|
|
24
24
|
'',
|
|
25
25
|
'export const SystemPresenter = definePresenter({',
|
|
26
26
|
" name: 'SystemHealth',",
|
|
27
|
-
' schema:
|
|
28
|
-
" status: z.string().describe('Server operational status'),",
|
|
29
|
-
" uptime: z.number().describe('Uptime in seconds since process start'),",
|
|
30
|
-
" version: z.string().describe('Server version string'),",
|
|
31
|
-
" timestamp: z.string().describe('ISO 8601 timestamp of this check'),",
|
|
32
|
-
' }),',
|
|
27
|
+
' schema: SystemModel,',
|
|
33
28
|
' // autoRules: true (default) — .describe() annotations become system rules',
|
|
34
29
|
' ui: (data) => [',
|
|
35
30
|
' ui.markdown(',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presenter.js","sourceRoot":"","sources":["../../../src/cli/templates/presenter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mDAAmD;AACnD,MAAM,UAAU,iBAAiB;IAC7B,OAAO;QACH,KAAK;QACL,wDAAwD;QACxD,IAAI;QACJ,wDAAwD;QACxD,
|
|
1
|
+
{"version":3,"file":"presenter.js","sourceRoot":"","sources":["../../../src/cli/templates/presenter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mDAAmD;AACnD,MAAM,UAAU,iBAAiB;IAC7B,OAAO;QACH,KAAK;QACL,wDAAwD;QACxD,IAAI;QACJ,wDAAwD;QACxD,4DAA4D;QAC5D,sDAAsD;QACtD,kCAAkC;QAClC,IAAI;QACJ,2BAA2B;QAC3B,6DAA6D;QAC7D,4EAA4E;QAC5E,8CAA8C;QAC9C,qDAAqD;QACrD,KAAK;QACL,mDAAmD;QACnD,yDAAyD;QACzD,EAAE;QACF,kDAAkD;QAClD,2BAA2B;QAC3B,0BAA0B;QAC1B,gFAAgF;QAChF,qBAAqB;QACrB,sBAAsB;QACtB,uGAAuG;QACvG,YAAY;QACZ,QAAQ;QACR,yDAAyD;QACzD,kFAAkF;QAClF,eAAe;QACf,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/readme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,8DAA8D;AAC9D,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/readme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,8DAA8D;AAC9D,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA8FpD"}
|
|
@@ -39,6 +39,8 @@ src/
|
|
|
39
39
|
│ └── system/
|
|
40
40
|
│ ├── health.ts # Health check with Presenter
|
|
41
41
|
│ └── echo.ts # Echo for connectivity testing
|
|
42
|
+
├── models/ # MVA Model Layer (defineModel)
|
|
43
|
+
│ └── SystemModel.ts
|
|
42
44
|
├── presenters/ # MVA View Layer (Egress Firewall)
|
|
43
45
|
│ └── SystemPresenter.ts
|
|
44
46
|
├── prompts/ # MCP Prompt Engine
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../../../src/cli/templates/readme.ts"],"names":[],"mappings":"AAMA,8DAA8D;AAC9D,MAAM,UAAU,MAAM,CAAC,MAAqB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK;QAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE;QACtC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC;IAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,UAAU,EAAE;YACR,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW;SAC7B;KACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEZ,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK;QACtC,CAAC,CAAC,2HAA2H;QAC7H,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,KAAK,MAAM,CAAC,IAAI;;;;;;;;;;EAUzB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;;CAMlB,CAAC,CAAC,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../../../src/cli/templates/readme.ts"],"names":[],"mappings":"AAMA,8DAA8D;AAC9D,MAAM,UAAU,MAAM,CAAC,MAAqB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK;QAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE;QACtC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC;IAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,UAAU,EAAE;YACR,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW;SAC7B;KACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEZ,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK;QACtC,CAAC,CAAC,2HAA2H;QAC7H,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,KAAK,MAAM,CAAC,IAAI;;;;;;;;;;EAUzB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;;CAMlB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BJ,OAAO;;;;;;;EAOP,YAAY;;EAEZ,mBAAmB,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyB5B,CAAC;AACF,CAAC;AAED,qCAAqC;AACrC,SAAS,mBAAmB,CAAC,MAAqB;IAC9C,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,QAAQ;YACT,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;QACM,KAAK,KAAK;YACN,OAAO;;;;;;;;;;;CAWlB,CAAC;QACM,KAAK,SAAS;YACV,OAAO;;;;;;;;;;;CAWlB,CAAC;QACM,KAAK,OAAO;YACR,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBlB,CAAC;QACM;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BuildPipeline — Compiles FluentToolBuilder state into a GroupedToolBuilder.
|
|
3
|
+
*
|
|
4
|
+
* Extracts the `_build()` pipeline from FluentToolBuilder into a
|
|
5
|
+
* standalone function for SRP compliance. Handles:
|
|
6
|
+
* - Name parsing (`domain.action`)
|
|
7
|
+
* - Description compilation (instructions + sandbox prompting)
|
|
8
|
+
* - Semantic defaults resolution
|
|
9
|
+
* - Handler wrapping (implicit `success()`)
|
|
10
|
+
* - GroupedToolBuilder assembly + middleware propagation
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { type ZodObject, type ZodRawShape } from 'zod';
|
|
15
|
+
import { GroupedToolBuilder } from './GroupedToolBuilder.js';
|
|
16
|
+
import { type ToolResponse, type MiddlewareFn } from '../types.js';
|
|
17
|
+
import { type Presenter } from '../../presenter/Presenter.js';
|
|
18
|
+
import { type ConcurrencyConfig } from '../execution/ConcurrencyGuard.js';
|
|
19
|
+
import { type SandboxConfig } from '../../sandbox/SandboxEngine.js';
|
|
20
|
+
import { type SemanticDefaults } from './SemanticDefaults.js';
|
|
21
|
+
/**
|
|
22
|
+
* Configuration object assembled from FluentToolBuilder state.
|
|
23
|
+
* Passed to `buildToolFromFluent()` to produce a `GroupedToolBuilder`.
|
|
24
|
+
*/
|
|
25
|
+
export interface FluentBuildConfig<TContext, TCtx> {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string | undefined;
|
|
28
|
+
instructions: string | undefined;
|
|
29
|
+
withParams: Record<string, import('zod').ZodType>;
|
|
30
|
+
inputSchema?: ZodObject<ZodRawShape>;
|
|
31
|
+
tags: string[];
|
|
32
|
+
middlewares: MiddlewareFn<TContext>[];
|
|
33
|
+
returns: Presenter<unknown> | undefined;
|
|
34
|
+
semanticDefaults: SemanticDefaults;
|
|
35
|
+
readOnly: boolean | undefined;
|
|
36
|
+
destructive: boolean | undefined;
|
|
37
|
+
idempotent: boolean | undefined;
|
|
38
|
+
toonMode: boolean;
|
|
39
|
+
annotations: Record<string, unknown> | undefined;
|
|
40
|
+
invalidatesPatterns: string[];
|
|
41
|
+
cacheControl: 'no-store' | 'immutable' | undefined;
|
|
42
|
+
concurrency: ConcurrencyConfig | undefined;
|
|
43
|
+
egressMaxBytes: number | undefined;
|
|
44
|
+
sandboxConfig: SandboxConfig | undefined;
|
|
45
|
+
fsmStates: string[] | undefined;
|
|
46
|
+
fsmTransition: string | undefined;
|
|
47
|
+
handler: (input: Record<string, unknown>, ctx: TCtx) => Promise<ToolResponse | unknown>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compile FluentToolBuilder state into a GroupedToolBuilder.
|
|
51
|
+
*
|
|
52
|
+
* @param config - Assembled configuration from builder state
|
|
53
|
+
* @returns A `GroupedToolBuilder` ready for registration
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildToolFromFluent<TContext, TCtx>(config: FluentBuildConfig<TContext, TCtx>): GroupedToolBuilder<TContext>;
|
|
56
|
+
//# sourceMappingURL=BuildPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,QAAQ,EAAE,IAAI;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACxC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACjD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IACnD,WAAW,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,CACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,IAAI,KACR,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAC9C,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAC1C,kBAAkB,CAAC,QAAQ,CAAC,CA4H9B"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BuildPipeline — Compiles FluentToolBuilder state into a GroupedToolBuilder.
|
|
3
|
+
*
|
|
4
|
+
* Extracts the `_build()` pipeline from FluentToolBuilder into a
|
|
5
|
+
* standalone function for SRP compliance. Handles:
|
|
6
|
+
* - Name parsing (`domain.action`)
|
|
7
|
+
* - Description compilation (instructions + sandbox prompting)
|
|
8
|
+
* - Semantic defaults resolution
|
|
9
|
+
* - Handler wrapping (implicit `success()`)
|
|
10
|
+
* - GroupedToolBuilder assembly + middleware propagation
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import {} from 'zod';
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
import { GroupedToolBuilder } from './GroupedToolBuilder.js';
|
|
17
|
+
import {} from '../types.js';
|
|
18
|
+
import { success, TOOL_RESPONSE_BRAND } from '../response.js';
|
|
19
|
+
import {} from '../../presenter/Presenter.js';
|
|
20
|
+
import {} from '../execution/ConcurrencyGuard.js';
|
|
21
|
+
import {} from '../../sandbox/SandboxEngine.js';
|
|
22
|
+
import { SANDBOX_SYSTEM_INSTRUCTION } from '../../sandbox/index.js';
|
|
23
|
+
import {} from './SemanticDefaults.js';
|
|
24
|
+
/**
|
|
25
|
+
* Compile FluentToolBuilder state into a GroupedToolBuilder.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Assembled configuration from builder state
|
|
28
|
+
* @returns A `GroupedToolBuilder` ready for registration
|
|
29
|
+
*/
|
|
30
|
+
export function buildToolFromFluent(config) {
|
|
31
|
+
// Build accumulated with* params into ZodObject
|
|
32
|
+
let inputSchema;
|
|
33
|
+
if (Object.keys(config.withParams).length > 0) {
|
|
34
|
+
inputSchema = z.object(config.withParams);
|
|
35
|
+
}
|
|
36
|
+
// Parse name: 'domain.action' → tool='domain', action='action'
|
|
37
|
+
const dotIndex = config.name.indexOf('.');
|
|
38
|
+
// Bug #109 fix: reject multi-dot names early with a clear error.
|
|
39
|
+
if (dotIndex > 0 && config.name.indexOf('.', dotIndex + 1) !== -1) {
|
|
40
|
+
throw new Error(`Tool name '${config.name}' has too many dot-separated segments. ` +
|
|
41
|
+
`Only one dot is allowed (e.g. 'group.action'). Use f.router() for nested prefixes.`);
|
|
42
|
+
}
|
|
43
|
+
const toolName = dotIndex > 0 ? config.name.slice(0, dotIndex) : config.name;
|
|
44
|
+
const actionName = dotIndex > 0 ? config.name.slice(dotIndex + 1) : 'default';
|
|
45
|
+
// Compile description: instructions + description
|
|
46
|
+
const descParts = [];
|
|
47
|
+
if (config.instructions) {
|
|
48
|
+
descParts.push(`[INSTRUCTIONS] ${config.instructions}`);
|
|
49
|
+
}
|
|
50
|
+
if (config.description) {
|
|
51
|
+
descParts.push(config.description);
|
|
52
|
+
}
|
|
53
|
+
// HATEOAS Auto-Prompting: teach the LLM about sandbox capability
|
|
54
|
+
if (config.sandboxConfig) {
|
|
55
|
+
descParts.push(SANDBOX_SYSTEM_INSTRUCTION.trim());
|
|
56
|
+
}
|
|
57
|
+
const compiledDescription = descParts.length > 0 ? descParts.join('\n\n') : undefined;
|
|
58
|
+
// Resolve semantic defaults + overrides
|
|
59
|
+
const readOnly = config.readOnly ?? config.semanticDefaults.readOnly;
|
|
60
|
+
const destructive = config.destructive ?? config.semanticDefaults.destructive;
|
|
61
|
+
const idempotent = config.idempotent ?? config.semanticDefaults.idempotent;
|
|
62
|
+
// Wrap handler: (input, ctx) → (ctx, args)
|
|
63
|
+
const resolvedHandler = config.handler;
|
|
64
|
+
const wrappedHandler = async (ctx, args) => {
|
|
65
|
+
const result = await resolvedHandler(args, ctx);
|
|
66
|
+
// Guard: void/null handlers → safe fallback (Bug #41)
|
|
67
|
+
if (result === undefined || result === null) {
|
|
68
|
+
return success('OK');
|
|
69
|
+
}
|
|
70
|
+
// Auto-wrap non-ToolResponse results (implicit success)
|
|
71
|
+
// Primary: check brand symbol stamped by success()/error()/toolError() helpers.
|
|
72
|
+
// Fallback: shape-based heuristic for manually constructed ToolResponse objects.
|
|
73
|
+
if (typeof result === 'object' && result !== null) {
|
|
74
|
+
// Brand check — reliable, no false positives (Bug #127)
|
|
75
|
+
if (TOOL_RESPONSE_BRAND in result) {
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
// Shape heuristic — backward compat for manually constructed ToolResponse
|
|
79
|
+
if ('content' in result &&
|
|
80
|
+
Array.isArray(result.content) &&
|
|
81
|
+
result.content.length > 0 &&
|
|
82
|
+
result.content[0]?.type === 'text' &&
|
|
83
|
+
typeof result.content[0]?.text === 'string' &&
|
|
84
|
+
Object.keys(result).every(k => k === 'content' || k === 'isError')) {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Implicit success() — the dev just returns raw data!
|
|
89
|
+
return success(result);
|
|
90
|
+
};
|
|
91
|
+
// Build via GroupedToolBuilder for consistency with existing pipeline
|
|
92
|
+
const builder = new GroupedToolBuilder(toolName);
|
|
93
|
+
if (compiledDescription)
|
|
94
|
+
builder.description(compiledDescription);
|
|
95
|
+
if (config.tags.length > 0)
|
|
96
|
+
builder.tags(...config.tags);
|
|
97
|
+
if (config.toonMode)
|
|
98
|
+
builder.toonDescription();
|
|
99
|
+
if (config.annotations)
|
|
100
|
+
builder.annotations(config.annotations);
|
|
101
|
+
// Propagate state sync hints
|
|
102
|
+
if (config.invalidatesPatterns.length > 0) {
|
|
103
|
+
builder.invalidates(...config.invalidatesPatterns);
|
|
104
|
+
}
|
|
105
|
+
if (config.cacheControl) {
|
|
106
|
+
config.cacheControl === 'immutable' ? builder.cached() : builder.stale();
|
|
107
|
+
}
|
|
108
|
+
// Propagate runtime guards
|
|
109
|
+
if (config.concurrency) {
|
|
110
|
+
builder.concurrency(config.concurrency);
|
|
111
|
+
}
|
|
112
|
+
if (config.egressMaxBytes !== undefined) {
|
|
113
|
+
builder.maxPayloadBytes(config.egressMaxBytes);
|
|
114
|
+
}
|
|
115
|
+
// Propagate sandbox config
|
|
116
|
+
if (config.sandboxConfig) {
|
|
117
|
+
builder.sandbox(config.sandboxConfig);
|
|
118
|
+
}
|
|
119
|
+
// Propagate FSM state gate
|
|
120
|
+
if (config.fsmStates) {
|
|
121
|
+
builder.bindState(config.fsmStates, config.fsmTransition);
|
|
122
|
+
}
|
|
123
|
+
// Apply middleware
|
|
124
|
+
for (const mw of config.middlewares) {
|
|
125
|
+
builder.use(mw);
|
|
126
|
+
}
|
|
127
|
+
// Register the single action
|
|
128
|
+
builder.action({
|
|
129
|
+
name: actionName,
|
|
130
|
+
handler: wrappedHandler,
|
|
131
|
+
...(inputSchema ? { schema: inputSchema } : {}),
|
|
132
|
+
...(readOnly !== undefined ? { readOnly } : {}),
|
|
133
|
+
...(destructive !== undefined ? { destructive } : {}),
|
|
134
|
+
...(idempotent !== undefined ? { idempotent } : {}),
|
|
135
|
+
...(config.returns ? { returns: config.returns } : {}),
|
|
136
|
+
});
|
|
137
|
+
return builder;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=BuildPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildPipeline.js","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,27 +26,15 @@
|
|
|
26
26
|
* @module
|
|
27
27
|
*/
|
|
28
28
|
import { type ZodType, type ZodObject, type ZodRawShape } from 'zod';
|
|
29
|
+
import { type Model } from '../../model/defineModel.js';
|
|
29
30
|
import { GroupedToolBuilder } from './GroupedToolBuilder.js';
|
|
30
31
|
import { type ToolResponse, type MiddlewareFn } from '../types.js';
|
|
31
32
|
import { type Presenter } from '../../presenter/Presenter.js';
|
|
32
33
|
import { type ConcurrencyConfig } from '../execution/ConcurrencyGuard.js';
|
|
33
34
|
import { type SandboxConfig } from '../../sandbox/SandboxEngine.js';
|
|
34
35
|
import { type MiddlewareDefinition } from '../middleware/ContextDerivation.js';
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
* @internal
|
|
38
|
-
*/
|
|
39
|
-
export interface SemanticDefaults {
|
|
40
|
-
readonly readOnly?: boolean;
|
|
41
|
-
readonly destructive?: boolean;
|
|
42
|
-
readonly idempotent?: boolean;
|
|
43
|
-
}
|
|
44
|
-
/** Defaults for `f.query()` — read-only, no side effects */
|
|
45
|
-
export declare const QUERY_DEFAULTS: SemanticDefaults;
|
|
46
|
-
/** Defaults for `f.mutation()` — destructive, irreversible */
|
|
47
|
-
export declare const MUTATION_DEFAULTS: SemanticDefaults;
|
|
48
|
-
/** Defaults for `f.action()` — neutral, no assumptions */
|
|
49
|
-
export declare const ACTION_DEFAULTS: SemanticDefaults;
|
|
36
|
+
import { type SemanticDefaults } from './SemanticDefaults.js';
|
|
37
|
+
export { type SemanticDefaults, QUERY_DEFAULTS, MUTATION_DEFAULTS, ACTION_DEFAULTS } from './SemanticDefaults.js';
|
|
50
38
|
/**
|
|
51
39
|
* Fluent builder that accumulates types at each step.
|
|
52
40
|
*
|
|
@@ -54,13 +42,14 @@ export declare const ACTION_DEFAULTS: SemanticDefaults;
|
|
|
54
42
|
* @typeParam TInput - Accumulated input type (built by `with*()` methods)
|
|
55
43
|
* @typeParam TCtx - Accumulated context type (enriched by `.use()`)
|
|
56
44
|
*/
|
|
57
|
-
export declare class FluentToolBuilder<TContext, TInput =
|
|
45
|
+
export declare class FluentToolBuilder<TContext, TInput = Record<string, never>, TCtx = TContext> {
|
|
58
46
|
/** @internal */ readonly _name: string;
|
|
59
47
|
/** @internal */ _description?: string;
|
|
60
48
|
/** @internal */ _instructions?: string;
|
|
61
49
|
/** @internal */ _inputSchema?: ZodObject<ZodRawShape>;
|
|
62
50
|
/** @internal */ _withParams: Record<string, ZodType>;
|
|
63
51
|
/** @internal */ _tags: string[];
|
|
52
|
+
/** @internal */ _modelRef?: Model;
|
|
64
53
|
/**
|
|
65
54
|
* @internal Bug #118 fix: reject duplicate parameter names.
|
|
66
55
|
* All `withXxx()` methods delegate to this instead of assigning directly.
|
|
@@ -411,6 +400,27 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
411
400
|
withOptionalArrays<I extends 'string' | 'number' | 'boolean', R extends Record<string, string>>(itemType: I, fields: R): FluentToolBuilder<TContext, TInput & {
|
|
412
401
|
[K in keyof R & string]?: (I extends 'string' ? string : I extends 'number' ? number : boolean)[] | undefined;
|
|
413
402
|
}, TCtx>;
|
|
403
|
+
/**
|
|
404
|
+
* Derive tool input parameters from a Model's fillable profile.
|
|
405
|
+
*
|
|
406
|
+
* Reads the specified operation from `model.input` (fillable profiles),
|
|
407
|
+
* then adds each field as a parameter using the type and description from
|
|
408
|
+
* the Model's casts. For `create`, fields respect their schema optionality.
|
|
409
|
+
* For `update` and `filter`, all fields become optional.
|
|
410
|
+
*
|
|
411
|
+
* @param model - A `Model` from `defineModel()`
|
|
412
|
+
* @param operation - The fillable profile name (e.g. `'create'`, `'update'`, `'filter'`)
|
|
413
|
+
* @returns Builder with additional parameters from the Model
|
|
414
|
+
*
|
|
415
|
+
* @example
|
|
416
|
+
* ```typescript
|
|
417
|
+
* f.mutation('task.create')
|
|
418
|
+
* .fromModel(TaskModel, 'create')
|
|
419
|
+
* .withStrings({ company_slug: '...', project_slug: '...' })
|
|
420
|
+
* .handle(async (input, ctx) => { ... });
|
|
421
|
+
* ```
|
|
422
|
+
*/
|
|
423
|
+
fromModel<M extends Model>(model: M, operation: string): FluentToolBuilder<TContext, TInput & Record<string, any>, TCtx>;
|
|
414
424
|
/**
|
|
415
425
|
* Add context-derivation middleware (tRPC-style).
|
|
416
426
|
*
|
|
@@ -456,7 +466,7 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
456
466
|
* @param presenter - A Presenter instance
|
|
457
467
|
* @returns `this` for chaining
|
|
458
468
|
*/
|
|
459
|
-
returns(presenter: Presenter<
|
|
469
|
+
returns(presenter: Presenter<any>): FluentToolBuilder<TContext, TInput, TCtx>;
|
|
460
470
|
/**
|
|
461
471
|
* Add capability tags for selective tool exposure.
|
|
462
472
|
*
|
|
@@ -593,13 +603,48 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
593
603
|
* });
|
|
594
604
|
* ```
|
|
595
605
|
*/
|
|
596
|
-
handle(handler: (input: TInput extends
|
|
606
|
+
handle(handler: (input: [TInput] extends [Record<string, never>] ? Record<string, any> : TInput, ctx: TCtx) => Promise<ToolResponse | unknown>): GroupedToolBuilder<TContext>;
|
|
607
|
+
/**
|
|
608
|
+
* Auto-generate a handler that proxies to `ctx.client` HTTP methods.
|
|
609
|
+
*
|
|
610
|
+
* Eliminates boilerplate by deriving the HTTP method from the semantic
|
|
611
|
+
* verb (`query` → GET, `mutation` → POST) and passing model input
|
|
612
|
+
* directly as query params or request body.
|
|
613
|
+
*
|
|
614
|
+
* For tools with non-trivial logic (data transformation, multi-step
|
|
615
|
+
* calls, conditional behavior), use `.handle()` instead.
|
|
616
|
+
*
|
|
617
|
+
* @param endpoint - API path (e.g. `'companies/standup/summary'`)
|
|
618
|
+
* @param options - Optional overrides
|
|
619
|
+
* @param options.method - Force HTTP method (`'GET'`, `'POST'`, `'PUT'`, `'DELETE'`)
|
|
620
|
+
* @param options.unwrap - Auto-unwrap `response.data` (default: `true`)
|
|
621
|
+
* @returns A `GroupedToolBuilder` ready for registration
|
|
622
|
+
*
|
|
623
|
+
* @example
|
|
624
|
+
* ```typescript
|
|
625
|
+
* const pulse = analytics.query('pulse')
|
|
626
|
+
* .fromModel(AnalyticsModel, 'query')
|
|
627
|
+
* .proxy('companies/manager-dashboard/pulse');
|
|
628
|
+
*
|
|
629
|
+
* const create = note.mutation('create')
|
|
630
|
+
* .fromModel(NoteModel, 'create')
|
|
631
|
+
* .proxy('notes');
|
|
632
|
+
*
|
|
633
|
+
* const update = note.mutation('update')
|
|
634
|
+
* .fromModel(NoteModel, 'update')
|
|
635
|
+
* .proxy('notes/:uuid', { method: 'PUT' });
|
|
636
|
+
* ```
|
|
637
|
+
*/
|
|
638
|
+
proxy(endpoint: string, options?: {
|
|
639
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
640
|
+
unwrap?: boolean;
|
|
641
|
+
}): GroupedToolBuilder<TContext>;
|
|
597
642
|
/**
|
|
598
643
|
* Alias for `.handle()` — for backward compatibility.
|
|
599
644
|
* @internal
|
|
600
645
|
*/
|
|
601
646
|
resolve(handler: (args: {
|
|
602
|
-
input: TInput extends
|
|
647
|
+
input: [TInput] extends [Record<string, never>] ? Record<string, any> : TInput;
|
|
603
648
|
ctx: TCtx;
|
|
604
649
|
}) => Promise<ToolResponse | unknown>): GroupedToolBuilder<TContext>;
|
|
605
650
|
/** @internal */
|