@uwmd/core 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +79 -0
  2. package/dist/agents/bancroft.d.ts +32 -0
  3. package/dist/agents/bancroft.d.ts.map +1 -0
  4. package/dist/agents/bancroft.js +292 -0
  5. package/dist/agents/bancroft.js.map +1 -0
  6. package/dist/agents/schemas.d.ts +13 -0
  7. package/dist/agents/schemas.d.ts.map +1 -0
  8. package/dist/agents/schemas.js +74 -0
  9. package/dist/agents/schemas.js.map +1 -0
  10. package/dist/bindings.d.ts +85 -0
  11. package/dist/bindings.d.ts.map +1 -0
  12. package/dist/bindings.js +293 -0
  13. package/dist/bindings.js.map +1 -0
  14. package/dist/browser.d.ts +66 -0
  15. package/dist/browser.d.ts.map +1 -0
  16. package/dist/browser.js +53 -0
  17. package/dist/browser.js.map +1 -0
  18. package/dist/calc/builtins.d.ts +4 -0
  19. package/dist/calc/builtins.d.ts.map +1 -0
  20. package/dist/calc/builtins.js +329 -0
  21. package/dist/calc/builtins.js.map +1 -0
  22. package/dist/calc/dependencies.d.ts +34 -0
  23. package/dist/calc/dependencies.d.ts.map +1 -0
  24. package/dist/calc/dependencies.js +101 -0
  25. package/dist/calc/dependencies.js.map +1 -0
  26. package/dist/calc/errors.d.ts +8 -0
  27. package/dist/calc/errors.d.ts.map +1 -0
  28. package/dist/calc/errors.js +18 -0
  29. package/dist/calc/errors.js.map +1 -0
  30. package/dist/calc/evaluator.d.ts +5 -0
  31. package/dist/calc/evaluator.d.ts.map +1 -0
  32. package/dist/calc/evaluator.js +184 -0
  33. package/dist/calc/evaluator.js.map +1 -0
  34. package/dist/calc/index.d.ts +14 -0
  35. package/dist/calc/index.d.ts.map +1 -0
  36. package/dist/calc/index.js +56 -0
  37. package/dist/calc/index.js.map +1 -0
  38. package/dist/calc/parser.d.ts +32 -0
  39. package/dist/calc/parser.d.ts.map +1 -0
  40. package/dist/calc/parser.js +361 -0
  41. package/dist/calc/parser.js.map +1 -0
  42. package/dist/cascade.d.ts +85 -0
  43. package/dist/cascade.d.ts.map +1 -0
  44. package/dist/cascade.js +172 -0
  45. package/dist/cascade.js.map +1 -0
  46. package/dist/cli.d.ts +3 -0
  47. package/dist/cli.d.ts.map +1 -0
  48. package/dist/cli.js +843 -0
  49. package/dist/cli.js.map +1 -0
  50. package/dist/codec.d.ts +25 -0
  51. package/dist/codec.d.ts.map +1 -0
  52. package/dist/codec.js +62 -0
  53. package/dist/codec.js.map +1 -0
  54. package/dist/codecs.d.ts +6 -0
  55. package/dist/codecs.d.ts.map +1 -0
  56. package/dist/codecs.js +12 -0
  57. package/dist/codecs.js.map +1 -0
  58. package/dist/compactor.d.ts +11 -0
  59. package/dist/compactor.d.ts.map +1 -0
  60. package/dist/compactor.js +84 -0
  61. package/dist/compactor.js.map +1 -0
  62. package/dist/context-profiles.d.ts +30 -0
  63. package/dist/context-profiles.d.ts.map +1 -0
  64. package/dist/context-profiles.js +225 -0
  65. package/dist/context-profiles.js.map +1 -0
  66. package/dist/context.d.ts +55 -0
  67. package/dist/context.d.ts.map +1 -0
  68. package/dist/context.js +288 -0
  69. package/dist/context.js.map +1 -0
  70. package/dist/dcf.d.ts +9 -0
  71. package/dist/dcf.d.ts.map +1 -0
  72. package/dist/dcf.js +75 -0
  73. package/dist/dcf.js.map +1 -0
  74. package/dist/debt.d.ts +11 -0
  75. package/dist/debt.d.ts.map +1 -0
  76. package/dist/debt.js +85 -0
  77. package/dist/debt.js.map +1 -0
  78. package/dist/defaults.d.ts +104 -0
  79. package/dist/defaults.d.ts.map +1 -0
  80. package/dist/defaults.js +622 -0
  81. package/dist/defaults.js.map +1 -0
  82. package/dist/derived.d.ts +17 -0
  83. package/dist/derived.d.ts.map +1 -0
  84. package/dist/derived.js +29 -0
  85. package/dist/derived.js.map +1 -0
  86. package/dist/editor.d.ts +76 -0
  87. package/dist/editor.d.ts.map +1 -0
  88. package/dist/editor.js +502 -0
  89. package/dist/editor.js.map +1 -0
  90. package/dist/envelope.d.ts +51 -0
  91. package/dist/envelope.d.ts.map +1 -0
  92. package/dist/envelope.js +213 -0
  93. package/dist/envelope.js.map +1 -0
  94. package/dist/format.d.ts +60 -0
  95. package/dist/format.d.ts.map +1 -0
  96. package/dist/format.js +115 -0
  97. package/dist/format.js.map +1 -0
  98. package/dist/gaps.d.ts +62 -0
  99. package/dist/gaps.d.ts.map +1 -0
  100. package/dist/gaps.js +272 -0
  101. package/dist/gaps.js.map +1 -0
  102. package/dist/index.d.ts +75 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +47 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/init.d.ts +15 -0
  107. package/dist/init.d.ts.map +1 -0
  108. package/dist/init.js +169 -0
  109. package/dist/init.js.map +1 -0
  110. package/dist/integrity-canonical.d.ts +17 -0
  111. package/dist/integrity-canonical.d.ts.map +1 -0
  112. package/dist/integrity-canonical.js +124 -0
  113. package/dist/integrity-canonical.js.map +1 -0
  114. package/dist/integrity.d.ts +54 -0
  115. package/dist/integrity.d.ts.map +1 -0
  116. package/dist/integrity.js +244 -0
  117. package/dist/integrity.js.map +1 -0
  118. package/dist/modules.d.ts +24 -0
  119. package/dist/modules.d.ts.map +1 -0
  120. package/dist/modules.js +322 -0
  121. package/dist/modules.js.map +1 -0
  122. package/dist/negotiation.d.ts +19 -0
  123. package/dist/negotiation.d.ts.map +1 -0
  124. package/dist/negotiation.js +70 -0
  125. package/dist/negotiation.js.map +1 -0
  126. package/dist/opstatement.d.ts +9 -0
  127. package/dist/opstatement.d.ts.map +1 -0
  128. package/dist/opstatement.js +80 -0
  129. package/dist/opstatement.js.map +1 -0
  130. package/dist/packs/excel-emit.d.ts +21 -0
  131. package/dist/packs/excel-emit.d.ts.map +1 -0
  132. package/dist/packs/excel-emit.js +135 -0
  133. package/dist/packs/excel-emit.js.map +1 -0
  134. package/dist/packs/index.d.ts +13 -0
  135. package/dist/packs/index.d.ts.map +1 -0
  136. package/dist/packs/index.js +37 -0
  137. package/dist/packs/index.js.map +1 -0
  138. package/dist/packs/industrial.d.ts +3 -0
  139. package/dist/packs/industrial.d.ts.map +1 -0
  140. package/dist/packs/industrial.js +115 -0
  141. package/dist/packs/industrial.js.map +1 -0
  142. package/dist/packs/multifamily.d.ts +3 -0
  143. package/dist/packs/multifamily.d.ts.map +1 -0
  144. package/dist/packs/multifamily.js +82 -0
  145. package/dist/packs/multifamily.js.map +1 -0
  146. package/dist/packs/office.d.ts +3 -0
  147. package/dist/packs/office.d.ts.map +1 -0
  148. package/dist/packs/office.js +108 -0
  149. package/dist/packs/office.js.map +1 -0
  150. package/dist/packs/retail.d.ts +3 -0
  151. package/dist/packs/retail.d.ts.map +1 -0
  152. package/dist/packs/retail.js +115 -0
  153. package/dist/packs/retail.js.map +1 -0
  154. package/dist/packs/self-storage.d.ts +3 -0
  155. package/dist/packs/self-storage.d.ts.map +1 -0
  156. package/dist/packs/self-storage.js +105 -0
  157. package/dist/packs/self-storage.js.map +1 -0
  158. package/dist/parser.d.ts +15 -0
  159. package/dist/parser.d.ts.map +1 -0
  160. package/dist/parser.js +430 -0
  161. package/dist/parser.js.map +1 -0
  162. package/dist/protocol.d.ts +389 -0
  163. package/dist/protocol.d.ts.map +1 -0
  164. package/dist/protocol.js +714 -0
  165. package/dist/protocol.js.map +1 -0
  166. package/dist/refinement.d.ts +63 -0
  167. package/dist/refinement.d.ts.map +1 -0
  168. package/dist/refinement.js +242 -0
  169. package/dist/refinement.js.map +1 -0
  170. package/dist/renderer.d.ts +22 -0
  171. package/dist/renderer.d.ts.map +1 -0
  172. package/dist/renderer.js +478 -0
  173. package/dist/renderer.js.map +1 -0
  174. package/dist/rentroll.d.ts +21 -0
  175. package/dist/rentroll.d.ts.map +1 -0
  176. package/dist/rentroll.js +256 -0
  177. package/dist/rentroll.js.map +1 -0
  178. package/dist/report.d.ts +29 -0
  179. package/dist/report.d.ts.map +1 -0
  180. package/dist/report.js +924 -0
  181. package/dist/report.js.map +1 -0
  182. package/dist/runner.d.ts +43 -0
  183. package/dist/runner.d.ts.map +1 -0
  184. package/dist/runner.js +288 -0
  185. package/dist/runner.js.map +1 -0
  186. package/dist/sourcesuses.d.ts +14 -0
  187. package/dist/sourcesuses.d.ts.map +1 -0
  188. package/dist/sourcesuses.js +63 -0
  189. package/dist/sourcesuses.js.map +1 -0
  190. package/dist/types.d.ts +248 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +15 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/uwcsv.d.ts +23 -0
  195. package/dist/uwcsv.d.ts.map +1 -0
  196. package/dist/uwcsv.js +877 -0
  197. package/dist/uwcsv.js.map +1 -0
  198. package/dist/uwjson.d.ts +19 -0
  199. package/dist/uwjson.d.ts.map +1 -0
  200. package/dist/uwjson.js +61 -0
  201. package/dist/uwjson.js.map +1 -0
  202. package/dist/uwxml.d.ts +18 -0
  203. package/dist/uwxml.d.ts.map +1 -0
  204. package/dist/uwxml.js +297 -0
  205. package/dist/uwxml.js.map +1 -0
  206. package/dist/validator.d.ts +35 -0
  207. package/dist/validator.d.ts.map +1 -0
  208. package/dist/validator.js +553 -0
  209. package/dist/validator.js.map +1 -0
  210. package/dist/valuation.d.ts +9 -0
  211. package/dist/valuation.d.ts.map +1 -0
  212. package/dist/valuation.js +34 -0
  213. package/dist/valuation.js.map +1 -0
  214. package/package.json +58 -0
package/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # @uwmd/core
2
+
3
+ Reference TypeScript implementation of the UW Markdown (`.uw.md`) underwriting standard.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install @uwmd/core
9
+ ```
10
+
11
+ ## Basic use
12
+
13
+ ```ts
14
+ import { parseUWFile, validateUWFile, render } from '@uwmd/core';
15
+
16
+ const parsed = parseUWFile(source);
17
+ const validation = validateUWFile(parsed);
18
+ const summary = render(parsed, { format: 'summary' });
19
+ ```
20
+
21
+ Browser-safe exports are available from `@uwmd/core/browser`. The `pdf` and `docx`
22
+ core render targets throw `UnsupportedRenderFormatError`; use `@uwmd/report` for
23
+ PDF generation.
24
+
25
+ Specification, examples, and conformance fixtures:
26
+ [github.com/jaredmaxey/uw-markdown](https://github.com/jaredmaxey/uw-markdown).
27
+
28
+ ## Machine interchange
29
+
30
+ UW Document Envelope 1.0 is the shared model behind deterministic UW JSON 1.0,
31
+ UW XML 1.0, and normalized UW CSV Bundle 1.0. All three preserve provenance,
32
+ prose, extensions, arrays, and superseded history and verify the same semantic
33
+ SHA-256 digest.
34
+
35
+ ```ts
36
+ import {
37
+ CORE_CODEC_REGISTRY,
38
+ parseUWFile,
39
+ parseUWXmlVerified,
40
+ stringifyUWXml,
41
+ encodeUWCSVZip,
42
+ toUWEnvelope,
43
+ } from '@uwmd/core';
44
+
45
+ const envelope = toUWEnvelope(parseUWFile(markdown));
46
+ const xml = await stringifyUWXml(envelope);
47
+ const verified = await parseUWXmlVerified(xml);
48
+ const csvZip = await encodeUWCSVZip(verified);
49
+ const json = await CORE_CODEC_REGISTRY.encode<string>('uw-json', verified);
50
+ ```
51
+
52
+ See the [UW XML Mapping 1.0](https://github.com/jaredmaxey/uw-markdown/blob/main/spec/UW_XML_MAPPING_v1.md) and [UW CSV Bundle 1.0](https://github.com/jaredmaxey/uw-markdown/blob/main/spec/UW_CSV_BUNDLE_v1.md) specifications.
53
+
54
+ ## HTTP and MCP bindings
55
+
56
+ The optional transport helpers preserve the same registry and semantic digest:
57
+
58
+ ```ts
59
+ import {
60
+ createUWHTTPResponse,
61
+ createUWMCPGetDocumentResult,
62
+ createUWMCPResource,
63
+ } from '@uwmd/core';
64
+
65
+ const http = await createUWHTTPResponse(envelope, {
66
+ accept: 'application/vnd.uwmd.document+xml',
67
+ ifNoneMatch: request.headers.get('if-none-match') ?? undefined,
68
+ });
69
+ const toolResult = await createUWMCPGetDocumentResult(envelope, dealId, {
70
+ representation: 'uw-json',
71
+ });
72
+ const resource = await createUWMCPResource(envelope, dealId, {
73
+ representation: 'uw-json',
74
+ });
75
+ ```
76
+
77
+ Tool results contain compact `structuredContent` plus JSON text fallback and a
78
+ resource link. Complete JSON/XML, CSV views, and binary CSV ZIP bytes are read
79
+ through resources. See [HTTP Binding 1.0](https://github.com/jaredmaxey/uw-markdown/blob/main/spec/bindings/UW_HTTP_BINDING_v1.md) and [MCP Binding 1.0](https://github.com/jaredmaxey/uw-markdown/blob/main/spec/bindings/UW_MCP_BINDING_v1.md).
@@ -0,0 +1,32 @@
1
+ export interface BancroftRunOptions {
2
+ apiKey: string;
3
+ model?: string;
4
+ maxRetries?: number;
5
+ maxTokens?: number;
6
+ temperature?: number;
7
+ userInstructions?: string;
8
+ /** Called on each status update during the run */
9
+ onProgress?: (event: ProgressEvent) => void;
10
+ }
11
+ export interface ProgressEvent {
12
+ stage: 'context_built' | 'calling_claude' | 'parsing_output' | 'writing_block' | 'complete' | 'error';
13
+ message: string;
14
+ agentId: string;
15
+ sectionId?: string;
16
+ }
17
+ export interface BancroftRunResult {
18
+ success: boolean;
19
+ updatedContent: string;
20
+ sectionsWritten: string[];
21
+ tokensUsed: {
22
+ input: number;
23
+ output: number;
24
+ };
25
+ durationMs: number;
26
+ logEntryIds: string[];
27
+ error?: string;
28
+ retries: number;
29
+ }
30
+ export declare function runBancroftAgent(fileContent: string, agentId: string, opts: BancroftRunOptions): Promise<BancroftRunResult>;
31
+ export declare function runBancroftAgentStreaming(fileContent: string, agentId: string, opts: BancroftRunOptions): Promise<BancroftRunResult>;
32
+ //# sourceMappingURL=bancroft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bancroft.d.ts","sourceRoot":"","sources":["../../src/agents/bancroft.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,GAAG,OAAO,CAAC;IACtG,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,iBAAiB,CAAC,CA+H5B;AAwCD,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAyG5B"}
@@ -0,0 +1,292 @@
1
+ // Bancroft agent runner — calls Claude API and writes output back to .uw.md
2
+ //
3
+ // Flow:
4
+ // 1. Build curated context for the requested agent layer
5
+ // 2. Call Claude with the context + structured output tool
6
+ // 3. Parse the tool_use response into section content
7
+ // 4. Write each output section via writeAgentBlock (supersedes prior versions)
8
+ // 5. Return the updated file content + run metadata
9
+ //
10
+ // Uses Claude's tool_use mechanism for guaranteed JSON output. Claude must call
11
+ // write_uw_section (or write_multiple_uw_sections for multi-section layers);
12
+ // if it doesn't, we retry up to maxRetries before writing an error log entry.
13
+ import Anthropic from '@anthropic-ai/sdk';
14
+ import { parseUWFile } from '../parser.js';
15
+ import { writeAgentBlock, writeErrorEntry, buildMeta } from '../runner.js';
16
+ import { buildAgentContext, buildAgentPrompt, isContextReady, BANCROFT_LAYERS } from '../context.js';
17
+ import { WRITE_UW_SECTION_TOOL, WRITE_MULTIPLE_SECTIONS_TOOL, MULTI_SECTION_LAYERS, } from './schemas.js';
18
+ // ─── Main entry point ─────────────────────────────────────────────────────────
19
+ export async function runBancroftAgent(fileContent, agentId, opts) {
20
+ const startMs = Date.now();
21
+ const model = opts.model ?? 'claude-sonnet-4-6';
22
+ const maxRetries = opts.maxRetries ?? 2;
23
+ const emit = opts.onProgress ?? (() => undefined);
24
+ const client = new Anthropic({ apiKey: opts.apiKey });
25
+ const layerPrefix = agentId.match(/^(L\d+)/)?.[1] ?? 'L7';
26
+ const isMultiSection = MULTI_SECTION_LAYERS.has(layerPrefix);
27
+ const tools = isMultiSection
28
+ ? [WRITE_MULTIPLE_SECTIONS_TOOL]
29
+ : [WRITE_UW_SECTION_TOOL];
30
+ const toolName = isMultiSection ? 'write_multiple_uw_sections' : 'write_uw_section';
31
+ let currentContent = fileContent;
32
+ const currentParsed = parseUWFile(fileContent);
33
+ // ── Context check ──────────────────────────────────────────────────────────
34
+ const ctx = buildAgentContext(currentParsed, agentId);
35
+ emit({ stage: 'context_built', agentId, message: `Context ready: ${isContextReady(ctx)}, sections: ${Object.keys(ctx.sections).join(', ')}` });
36
+ if (!isContextReady(ctx)) {
37
+ const reason = ctx.blockingFlags.length
38
+ ? `blocking flags: ${ctx.blockingFlags.join(', ')}`
39
+ : `missing required sections: ${ctx.missingRequired.join(', ')}`;
40
+ return {
41
+ success: false,
42
+ updatedContent: fileContent,
43
+ sectionsWritten: [],
44
+ tokensUsed: { input: 0, output: 0 },
45
+ durationMs: Date.now() - startMs,
46
+ logEntryIds: [],
47
+ error: `Context not ready — ${reason}`,
48
+ retries: 0,
49
+ };
50
+ }
51
+ // ── Claude call with retry ─────────────────────────────────────────────────
52
+ const { systemPrompt, userMessage } = buildAgentPrompt(ctx, opts.userInstructions);
53
+ let lastError = '';
54
+ let retries = 0;
55
+ let totalInput = 0;
56
+ let totalOutput = 0;
57
+ let toolOutputs = [];
58
+ let rawResponse = null;
59
+ while (retries <= maxRetries) {
60
+ emit({ stage: 'calling_claude', agentId, message: `Calling ${model} (attempt ${retries + 1}/${maxRetries + 1})` });
61
+ try {
62
+ rawResponse = await client.messages.create({
63
+ model,
64
+ max_tokens: opts.maxTokens ?? 4096,
65
+ temperature: opts.temperature ?? 0.1,
66
+ system: systemPrompt,
67
+ messages: [{ role: 'user', content: userMessage }],
68
+ tools,
69
+ tool_choice: { type: 'any' },
70
+ });
71
+ totalInput += rawResponse.usage.input_tokens;
72
+ totalOutput += rawResponse.usage.output_tokens;
73
+ toolOutputs = extractToolOutputs(rawResponse, toolName);
74
+ if (toolOutputs.length === 0) {
75
+ lastError = `Claude did not call the ${toolName} tool`;
76
+ retries++;
77
+ continue;
78
+ }
79
+ break; // success
80
+ }
81
+ catch (err) {
82
+ lastError = err instanceof Error ? err.message : String(err);
83
+ emit({ stage: 'error', agentId, message: `API error: ${lastError}` });
84
+ retries++;
85
+ if (retries > maxRetries)
86
+ break;
87
+ await sleep(1000 * retries); // simple backoff
88
+ }
89
+ }
90
+ // ── Handle failure ────────────────────────────────────────────────────────
91
+ if (toolOutputs.length === 0) {
92
+ currentContent = writeErrorEntry(currentContent, currentParsed, agentId, 'unknown', 'AGENT_NO_TOOL_CALL', lastError, { agentId, durationMs: Date.now() - startMs });
93
+ return {
94
+ success: false,
95
+ updatedContent: currentContent,
96
+ sectionsWritten: [],
97
+ tokensUsed: { input: totalInput, output: totalOutput },
98
+ durationMs: Date.now() - startMs,
99
+ logEntryIds: [],
100
+ error: lastError,
101
+ retries,
102
+ };
103
+ }
104
+ // ── Write each section block ───────────────────────────────────────────────
105
+ const { logEntryIds, sectionsWritten, content: finalContent } = writeSectionOutputs(currentContent, agentId, layerPrefix, toolOutputs, ctx.layer.reads, startMs, emit);
106
+ currentContent = finalContent;
107
+ emit({ stage: 'complete', agentId, message: `Wrote ${sectionsWritten.join(', ')} — ${totalInput + totalOutput} tokens` });
108
+ return {
109
+ success: true,
110
+ updatedContent: currentContent,
111
+ sectionsWritten,
112
+ tokensUsed: { input: totalInput, output: totalOutput },
113
+ durationMs: Date.now() - startMs,
114
+ logEntryIds,
115
+ retries,
116
+ };
117
+ }
118
+ // ─── Parse Claude's tool_use response ────────────────────────────────────────
119
+ function extractToolOutputs(response, toolName) {
120
+ const toolUseBlocks = response.content.filter((b) => b.type === 'tool_use' && b.name === toolName);
121
+ if (toolUseBlocks.length === 0)
122
+ return [];
123
+ const results = [];
124
+ for (const block of toolUseBlocks) {
125
+ const input = block.input;
126
+ if (toolName === 'write_multiple_uw_sections') {
127
+ // Multi-section tool: input.sections is an array of section outputs
128
+ const sections = input['sections'] ?? [];
129
+ results.push(...sections);
130
+ }
131
+ else {
132
+ // Single-section tool
133
+ results.push({
134
+ section_id: input['section_id'],
135
+ confidence: input['confidence'],
136
+ human_review_required: input['human_review_required'],
137
+ flags: input['flags'] ?? [],
138
+ section_data: input['section_data'] ?? {},
139
+ notes: input['notes'],
140
+ });
141
+ }
142
+ }
143
+ return results;
144
+ }
145
+ // ─── Streaming variant ────────────────────────────────────────────────────────
146
+ // Same as runBancroftAgent but uses streaming so progress events arrive in real time.
147
+ // Useful for UI integrations (underwriter.cc wizard).
148
+ export async function runBancroftAgentStreaming(fileContent, agentId, opts) {
149
+ const startMs = Date.now();
150
+ const model = opts.model ?? 'claude-sonnet-4-6';
151
+ const emit = opts.onProgress ?? (() => undefined);
152
+ const client = new Anthropic({ apiKey: opts.apiKey });
153
+ const layerPrefix = agentId.match(/^(L\d+)/)?.[1] ?? 'L7';
154
+ const isMultiSection = MULTI_SECTION_LAYERS.has(layerPrefix);
155
+ const tools = isMultiSection
156
+ ? [WRITE_MULTIPLE_SECTIONS_TOOL]
157
+ : [WRITE_UW_SECTION_TOOL];
158
+ const toolName = isMultiSection ? 'write_multiple_uw_sections' : 'write_uw_section';
159
+ const currentParsed = parseUWFile(fileContent);
160
+ const ctx = buildAgentContext(currentParsed, agentId);
161
+ if (!isContextReady(ctx)) {
162
+ const reason = ctx.blockingFlags.length
163
+ ? `blocking flags: ${ctx.blockingFlags.join(', ')}`
164
+ : `missing required sections: ${ctx.missingRequired.join(', ')}`;
165
+ return {
166
+ success: false,
167
+ updatedContent: fileContent,
168
+ sectionsWritten: [],
169
+ tokensUsed: { input: 0, output: 0 },
170
+ durationMs: Date.now() - startMs,
171
+ logEntryIds: [],
172
+ error: reason,
173
+ retries: 0,
174
+ };
175
+ }
176
+ const { systemPrompt, userMessage } = buildAgentPrompt(ctx, opts.userInstructions);
177
+ emit({ stage: 'calling_claude', agentId, message: `Streaming ${model}` });
178
+ let totalInput = 0;
179
+ let totalOutput = 0;
180
+ let toolOutputs = [];
181
+ try {
182
+ // Collect the full streamed response before processing
183
+ const stream = await client.messages.stream({
184
+ model,
185
+ max_tokens: opts.maxTokens ?? 4096,
186
+ temperature: opts.temperature ?? 0.1,
187
+ system: systemPrompt,
188
+ messages: [{ role: 'user', content: userMessage }],
189
+ tools,
190
+ tool_choice: { type: 'any' },
191
+ });
192
+ const response = await stream.finalMessage();
193
+ totalInput = response.usage.input_tokens;
194
+ totalOutput = response.usage.output_tokens;
195
+ toolOutputs = extractToolOutputs(response, toolName);
196
+ }
197
+ catch (err) {
198
+ const error = err instanceof Error ? err.message : String(err);
199
+ return {
200
+ success: false,
201
+ updatedContent: fileContent,
202
+ sectionsWritten: [],
203
+ tokensUsed: { input: totalInput, output: totalOutput },
204
+ durationMs: Date.now() - startMs,
205
+ logEntryIds: [],
206
+ error,
207
+ retries: 0,
208
+ };
209
+ }
210
+ if (toolOutputs.length === 0) {
211
+ return {
212
+ success: false,
213
+ updatedContent: fileContent,
214
+ sectionsWritten: [],
215
+ tokensUsed: { input: totalInput, output: totalOutput },
216
+ durationMs: Date.now() - startMs,
217
+ logEntryIds: [],
218
+ error: 'Claude did not call the write tool',
219
+ retries: 0,
220
+ };
221
+ }
222
+ // Write sections using the shared helper (no second API call)
223
+ const { logEntryIds, sectionsWritten, content: finalContent } = writeSectionOutputs(fileContent, agentId, layerPrefix, toolOutputs, ctx.layer.reads, startMs, emit);
224
+ emit({ stage: 'complete', agentId, message: `Wrote ${sectionsWritten.join(', ')} — ${totalInput + totalOutput} tokens` });
225
+ return {
226
+ success: true,
227
+ updatedContent: finalContent,
228
+ sectionsWritten,
229
+ tokensUsed: { input: totalInput, output: totalOutput },
230
+ durationMs: Date.now() - startMs,
231
+ logEntryIds,
232
+ retries: 0,
233
+ };
234
+ }
235
+ // ─── Shared write helper ──────────────────────────────────────────────────────
236
+ // Used by both runBancroftAgent and runBancroftAgentStreaming after tool outputs
237
+ // are extracted. Iterates over tool outputs, builds _meta, calls writeAgentBlock.
238
+ function writeSectionOutputs(fileContent, agentId, layerPrefix, toolOutputs, inputSections, startMs, emit) {
239
+ const layer = BANCROFT_LAYERS.find(l => l.id === layerPrefix);
240
+ const pipelineStateUpdate = layer
241
+ ? { [layer.pipelineStateKey]: 'complete' }
242
+ : undefined;
243
+ let currentContent = fileContent;
244
+ const logEntryIds = [];
245
+ const sectionsWritten = [];
246
+ for (const toolOut of toolOutputs) {
247
+ emit({ stage: 'writing_block', agentId, sectionId: toolOut.section_id, message: `Writing ${toolOut.section_id}` });
248
+ // Re-parse before each write so line numbers are fresh
249
+ const currentParsed = parseUWFile(currentContent);
250
+ const existingBlock = currentParsed.sections[toolOut.section_id];
251
+ const existingVersion = existingBlock && 'meta' in existingBlock
252
+ ? (existingBlock.meta?.version ?? 0)
253
+ : 0;
254
+ const newVersion = existingVersion + 1;
255
+ const meta = buildMeta(toolOut.section_id, newVersion, {
256
+ source: agentId,
257
+ agentId,
258
+ agentVersion: '1.0.0',
259
+ actor: 'system',
260
+ confidence: toolOut.confidence,
261
+ humanReviewRequired: toolOut.human_review_required,
262
+ flags: toolOut.flags,
263
+ notes: toolOut.notes,
264
+ });
265
+ // Strip any _meta/_notes Claude included in section_data — we own those fields.
266
+ const { _meta: _ignoredMeta, _notes: _ignoredNotes, ...cleanSectionData } = toolOut.section_data;
267
+ void _ignoredMeta;
268
+ void _ignoredNotes;
269
+ const sectionContent = {
270
+ _meta: meta,
271
+ _notes: toolOut.notes ?? null,
272
+ ...cleanSectionData,
273
+ };
274
+ const runResult = writeAgentBlock(currentContent, currentParsed, { sectionId: toolOut.section_id, content: sectionContent }, {
275
+ agentId,
276
+ agentVersion: '1.0.0',
277
+ durationMs: Date.now() - startMs,
278
+ flagsRaised: toolOut.flags,
279
+ inputSections,
280
+ updatePipelineState: pipelineStateUpdate,
281
+ });
282
+ currentContent = runResult.content;
283
+ logEntryIds.push(runResult.logEntryId);
284
+ sectionsWritten.push(toolOut.section_id);
285
+ }
286
+ return { content: currentContent, logEntryIds, sectionsWritten };
287
+ }
288
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
289
+ function sleep(ms) {
290
+ return new Promise(resolve => setTimeout(resolve, ms));
291
+ }
292
+ //# sourceMappingURL=bancroft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bancroft.js","sourceRoot":"","sources":["../../src/agents/bancroft.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type Anthropic from '@anthropic-ai/sdk';
2
+ export declare const WRITE_UW_SECTION_TOOL: Anthropic.Tool;
3
+ export declare const WRITE_MULTIPLE_SECTIONS_TOOL: Anthropic.Tool;
4
+ export declare const MULTI_SECTION_LAYERS: Set<string>;
5
+ export interface ToolOutput {
6
+ section_id: string;
7
+ confidence: 'high' | 'medium' | 'low';
8
+ human_review_required: boolean;
9
+ flags: string[];
10
+ section_data: Record<string, unknown>;
11
+ notes?: string;
12
+ }
13
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/agents/schemas.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAO/C,eAAO,MAAM,qBAAqB,EAAE,SAAS,CAAC,IAmC7C,CAAC;AAKF,eAAO,MAAM,4BAA4B,EAAE,SAAS,CAAC,IAyBpD,CAAC;AAGF,eAAO,MAAM,oBAAoB,aAAwB,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,74 @@
1
+ // Per-layer output tool schemas for Claude tool_use
2
+ // Each Bancroft layer uses the write_uw_section tool to return structured output.
3
+ // Claude fills in section_data; we wrap it with _meta in bancroft.ts.
4
+ // ─── Universal write tool ─────────────────────────────────────────────────────
5
+ // All layers use the same tool; section_data content varies by layer.
6
+ // Using a single flexible schema rather than per-layer schemas keeps prompts
7
+ // shorter and avoids schema drift — the system prompt describes the expected fields.
8
+ export const WRITE_UW_SECTION_TOOL = {
9
+ name: 'write_uw_section',
10
+ description: 'Write the analyzed section data back to the .uw.md deal file. Call this exactly once with your complete output. Do not call it multiple times.',
11
+ input_schema: {
12
+ type: 'object',
13
+ properties: {
14
+ section_id: {
15
+ type: 'string',
16
+ description: 'The section ID being written (e.g. "screening", "noi_model", "risk_assessment"). Must match one of the sections you are responsible for writing.',
17
+ },
18
+ confidence: {
19
+ type: 'string',
20
+ enum: ['high', 'medium', 'low'],
21
+ description: 'Confidence in your output. high = deterministic/directly sourced, medium = inferred/estimated, low = insufficient data.',
22
+ },
23
+ human_review_required: {
24
+ type: 'boolean',
25
+ description: 'Set true if any output field is uncertain, estimated, or depends on missing inputs. This gates the pipeline.',
26
+ },
27
+ flags: {
28
+ type: 'array',
29
+ items: { type: 'string' },
30
+ description: 'Machine-readable flag strings for anomalies, policy concerns, or data quality issues. Use snake_case. Examples: dscr_below_threshold, management_fee_above_market, ofac_match_required.',
31
+ },
32
+ section_data: {
33
+ type: 'object',
34
+ description: 'All field values for this section. Include every required field. Use null for unknown values — do not omit fields.',
35
+ },
36
+ notes: {
37
+ type: 'string',
38
+ description: 'Optional human-readable explanation of uncertainties, assumptions made, or instructions for the next reviewer.',
39
+ },
40
+ },
41
+ required: ['section_id', 'confidence', 'human_review_required', 'flags', 'section_data'],
42
+ },
43
+ };
44
+ // ─── Multi-section write tool ─────────────────────────────────────────────────
45
+ // L0 and L4 write multiple sections in one pass. They use this tool instead.
46
+ export const WRITE_MULTIPLE_SECTIONS_TOOL = {
47
+ name: 'write_multiple_uw_sections',
48
+ description: 'Write multiple sections to the .uw.md deal file in a single call. Use when your layer is responsible for more than one section.',
49
+ input_schema: {
50
+ type: 'object',
51
+ properties: {
52
+ sections: {
53
+ type: 'array',
54
+ items: {
55
+ type: 'object',
56
+ properties: {
57
+ section_id: { type: 'string' },
58
+ confidence: { type: 'string', enum: ['high', 'medium', 'low'] },
59
+ human_review_required: { type: 'boolean' },
60
+ flags: { type: 'array', items: { type: 'string' } },
61
+ section_data: { type: 'object' },
62
+ notes: { type: 'string' },
63
+ },
64
+ required: ['section_id', 'confidence', 'human_review_required', 'flags', 'section_data'],
65
+ },
66
+ description: 'One entry per section you are writing.',
67
+ },
68
+ },
69
+ required: ['sections'],
70
+ },
71
+ };
72
+ // Layers that write multiple sections and use the multi-section tool
73
+ export const MULTI_SECTION_LAYERS = new Set(['L0', 'L4']);
74
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/agents/schemas.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,kFAAkF;AAClF,sEAAsE;AAItE,iFAAiF;AACjF,sEAAsE;AACtE,6EAA6E;AAC7E,qFAAqF;AAErF,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,gJAAgJ;IAC7J,YAAY,EAAE;QACZ,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kJAAkJ;aAChK;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;gBAC/B,WAAW,EAAE,yHAAyH;aACvI;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,8GAA8G;aAC5H;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,yLAAyL;aACvM;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oHAAoH;aAClI;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gHAAgH;aAC9H;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC;KACzF;CACF,CAAC;AAEF,iFAAiF;AACjF,6EAA6E;AAE7E,MAAM,CAAC,MAAM,4BAA4B,GAAmB;IAC1D,IAAI,EAAE,4BAA4B;IAClC,WAAW,EAAE,iIAAiI;IAC9I,YAAY,EAAE;QACZ,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;wBAC/D,qBAAqB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;wBACnD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAChC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC1B;oBACD,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC;iBACzF;gBACD,WAAW,EAAE,wCAAwC;aACtD;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,85 @@
1
+ import type { CodecRegistry } from './codec.js';
2
+ import { type UWDocumentEnvelope } from './envelope.js';
3
+ import { type EditContext, type EditOptions } from './editor.js';
4
+ import type { EditOperation } from './protocol.js';
5
+ export declare const UWMD_PUBLIC_ORIGIN: "https://uwmd.org";
6
+ export declare const UWMD_DEAL_RESOURCE_TEMPLATE: "https://uwmd.org/deals/{deal_id}{?representation,view}";
7
+ export type UWHTTPBody = string | Uint8Array;
8
+ export interface UWHTTPResponse {
9
+ status: 200 | 304;
10
+ headers: Record<string, string>;
11
+ body?: UWHTTPBody;
12
+ representation_id: string;
13
+ }
14
+ export interface UWHTTPResponseOptions {
15
+ accept?: string;
16
+ ifNoneMatch?: string;
17
+ minimumFidelity?: 'source' | 'model' | 'view';
18
+ registry?: CodecRegistry;
19
+ }
20
+ export declare class UWBindingError extends Error {
21
+ readonly code: string;
22
+ readonly status: 400 | 406 | 409 | 412 | 415 | 428;
23
+ constructor(code: string, status: UWBindingError['status'], message: string);
24
+ }
25
+ export declare function uwmdDealResourceURI(dealId: string, options?: {
26
+ representation?: string;
27
+ view?: UWCSVView;
28
+ }): string;
29
+ export declare function uwmdETag(envelope: UWDocumentEnvelope): string;
30
+ export declare function createUWHTTPResponse(envelope: UWDocumentEnvelope, options?: UWHTTPResponseOptions): Promise<UWHTTPResponse>;
31
+ export declare function decodeUWHTTPRequest(contentType: string, body: UWHTTPBody, registry?: CodecRegistry): Promise<UWDocumentEnvelope>;
32
+ export declare function assertUWIfMatch(ifMatch: string | undefined, envelope: UWDocumentEnvelope, options?: {
33
+ required?: boolean;
34
+ }): Promise<string>;
35
+ export type UWCSVView = 'deal_summary' | 'rent_roll' | 'operating_statement' | 'debt' | 'valuation' | 'sources_uses';
36
+ export interface UWMCPTextResourceContent {
37
+ uri: string;
38
+ mimeType: string;
39
+ text: string;
40
+ }
41
+ export interface UWMCPBlobResourceContent {
42
+ uri: string;
43
+ mimeType: string;
44
+ blob: string;
45
+ }
46
+ export type UWMCPResourceContent = UWMCPTextResourceContent | UWMCPBlobResourceContent;
47
+ export interface UWMCPResourceLink {
48
+ type: 'resource_link';
49
+ uri: string;
50
+ name: string;
51
+ title?: string;
52
+ description?: string;
53
+ mimeType?: string;
54
+ }
55
+ export interface UWMCPTextContent {
56
+ type: 'text';
57
+ text: string;
58
+ }
59
+ export interface UWMCPToolResult {
60
+ content: Array<UWMCPTextContent | UWMCPResourceLink>;
61
+ structuredContent?: Record<string, unknown>;
62
+ isError?: boolean;
63
+ }
64
+ export interface UWMCPDocumentOptions {
65
+ representation?: string;
66
+ view?: UWCSVView;
67
+ registry?: CodecRegistry;
68
+ }
69
+ export declare function createUWMCPResource(envelope: UWDocumentEnvelope, dealId: string, options?: UWMCPDocumentOptions): Promise<UWMCPResourceContent>;
70
+ export declare function createUWMCPGetDocumentResult(envelope: UWDocumentEnvelope, dealId: string, options?: UWMCPDocumentOptions): Promise<UWMCPToolResult>;
71
+ export declare function createUWMCPValidationResult(envelope: UWDocumentEnvelope, dealId: string): Promise<UWMCPToolResult>;
72
+ export declare function createUWMCPListRepresentationsResult(registry?: CodecRegistry): UWMCPToolResult;
73
+ export interface UWSourceEditResult {
74
+ source: string;
75
+ envelope: UWDocumentEnvelope;
76
+ etag: string;
77
+ newVersion?: number;
78
+ supersededPriorBlock?: boolean;
79
+ }
80
+ export declare function applyUWMDSourceEdit(source: string, operation: EditOperation, context: EditContext, ifMatch: string | undefined, options?: EditOptions): Promise<UWSourceEditResult>;
81
+ export declare function createUWMCPApplyEditResult(source: string, operation: EditOperation, context: EditContext, ifMatch: string | undefined): Promise<{
82
+ edit: UWSourceEditResult;
83
+ result: UWMCPToolResult;
84
+ }>;
85
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}