@dain-os/mcp-server 0.2.1 → 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-content.d.ts","sourceRoot":"","sources":["../../src/tools/proposal-content.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6JjD,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAShD,CAAC"}
@@ -0,0 +1,136 @@
1
+ import { z } from 'zod';
2
+ import { buildBlockCatalogue } from './proposal-content-catalogue.js';
3
+ /**
4
+ * Proposal content tools (8). Granular ops let the LLM ship only the bytes
5
+ * it is changing rather than re-sending the whole content_json blob.
6
+ *
7
+ * Content shape (v2): `{ version: 2, sections: [{ id, key, title, visible?,
8
+ * blocks: ContentBlock[] }] }`.
9
+ *
10
+ * Block types (8): text, cards, diagram, chart, table, image, gantt, iframe.
11
+ * For the full schema of each block call `describe_proposal_block_types`.
12
+ *
13
+ * All mutations are validated server-side. An ops batch is rejected as
14
+ * INVALID_FINAL_STATE if the resulting content doesn't pass the API's
15
+ * `proposalContentV2Schema` (e.g. iframe block on a non-allowlisted host).
16
+ */
17
+ // Section / block payloads. These are intentionally permissive at the JSON
18
+ // Schema layer -- the API enforces the strict shape. The LLM uses the
19
+ // description fields + describe_proposal_block_types for guidance.
20
+ const blockSchema = z.record(z.unknown()).describe('A content block. Required fields: `id` (string), `type` (one of: text, cards, diagram, chart, table, image, gantt, iframe). Per-type extra fields are documented by the describe_proposal_block_types tool.');
21
+ const sectionSchema = z.record(z.unknown()).describe('A section. Required fields: `id` (string), `key` (slug), `title` (string), `blocks` (array of block objects). Optional: `visible` (boolean, defaults true).');
22
+ const getProposalContent = {
23
+ name: 'get_proposal_content',
24
+ description: 'Get the structured content (sections + blocks) for a proposal. Returns `{ version: 2, sections: [...] }`. Lighter than get_proposal -- use this when you only need the section/block structure (e.g. before editing). Empty / legacy-version content_json returns an empty v2 envelope; mutations against legacy content require starting with a `replaceAll` op.',
25
+ inputSchema: z.object({
26
+ proposalId: z.string().uuid(),
27
+ }),
28
+ handler: async (client, input) => client.get(`/proposals/${input.proposalId}/content`),
29
+ };
30
+ const describeProposalBlockTypes = {
31
+ name: 'describe_proposal_block_types',
32
+ description: 'Return the catalogue of available proposal content block types: their schemas, minimal + rich examples, when to use each, default section keys, and any gotchas (e.g. the iframe host allowlist). Call this first when drafting new content -- it is the canonical reference for what you can put inside a proposal section.',
33
+ inputSchema: z.object({}),
34
+ handler: async () => buildBlockCatalogue(),
35
+ };
36
+ const upsertProposalSection = {
37
+ name: 'upsert_proposal_section',
38
+ description: 'Add a new section or replace an existing one (matched by `key`). The section is a full object including its blocks array, so the API can validate cohesively. To edit a single block inside an existing section without re-sending the whole section, use upsert_proposal_block instead.',
39
+ inputSchema: z.object({
40
+ proposalId: z.string().uuid(),
41
+ section: sectionSchema,
42
+ }),
43
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/content`, {
44
+ ops: [{ kind: 'upsertSection', section: input.section }],
45
+ }),
46
+ };
47
+ const deleteProposalSection = {
48
+ name: 'delete_proposal_section',
49
+ description: 'Delete a section from the proposal content by `key`. Returns SECTION_NOT_FOUND if the key does not match any section. All blocks in that section are removed with it.',
50
+ inputSchema: z.object({
51
+ proposalId: z.string().uuid(),
52
+ key: z.string().min(1).max(120).describe('The section key, e.g. "executive_summary".'),
53
+ }),
54
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/content`, {
55
+ ops: [{ kind: 'deleteSection', key: input.key }],
56
+ }),
57
+ };
58
+ const upsertProposalBlock = {
59
+ name: 'upsert_proposal_block',
60
+ description: 'Add a new block to a section or replace an existing block by id within that section. The block must conform to the schema for its `type` -- see describe_proposal_block_types for per-type fields. This is the right tool for fine-grained content edits because you only send one block, not the whole section.',
61
+ inputSchema: z.object({
62
+ proposalId: z.string().uuid(),
63
+ sectionKey: z.string().min(1).max(120).describe('The key of the parent section.'),
64
+ block: blockSchema,
65
+ }),
66
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/content`, {
67
+ ops: [
68
+ {
69
+ kind: 'upsertBlock',
70
+ sectionKey: input.sectionKey,
71
+ block: input.block,
72
+ },
73
+ ],
74
+ }),
75
+ };
76
+ const deleteProposalBlock = {
77
+ name: 'delete_proposal_block',
78
+ description: 'Delete a block from a section by id. Returns BLOCK_NOT_FOUND if the id does not match any block in that section.',
79
+ inputSchema: z.object({
80
+ proposalId: z.string().uuid(),
81
+ sectionKey: z.string().min(1).max(120),
82
+ blockId: z.string().min(1).max(120),
83
+ }),
84
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/content`, {
85
+ ops: [
86
+ {
87
+ kind: 'deleteBlock',
88
+ sectionKey: input.sectionKey,
89
+ blockId: input.blockId,
90
+ },
91
+ ],
92
+ }),
93
+ };
94
+ const reorderProposalBlocks = {
95
+ name: 'reorder_proposal_blocks',
96
+ description: 'Reorder the blocks within a single section. `blockIds` must be a permutation of every current block id in that section -- the API returns REORDER_MISMATCH if any id is missing or duplicated.',
97
+ inputSchema: z.object({
98
+ proposalId: z.string().uuid(),
99
+ sectionKey: z.string().min(1).max(120),
100
+ blockIds: z
101
+ .array(z.string().min(1).max(120))
102
+ .min(1)
103
+ .describe('Every block id currently in the section, in the new desired order.'),
104
+ }),
105
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/content`, {
106
+ ops: [
107
+ {
108
+ kind: 'reorderBlocks',
109
+ sectionKey: input.sectionKey,
110
+ blockIds: input.blockIds,
111
+ },
112
+ ],
113
+ }),
114
+ };
115
+ const replaceProposalContent = {
116
+ name: 'replace_proposal_content',
117
+ description: 'Replace ALL sections of the proposal with a new sections array. Use this sparingly: only for full regeneration, wholesale rewrites, or migrating a legacy (non-v2) content_json to v2. For fine-grained edits prefer upsert_proposal_section / upsert_proposal_block etc. -- they are token-cheap and easier to reason about.',
118
+ inputSchema: z.object({
119
+ proposalId: z.string().uuid(),
120
+ sections: z.array(sectionSchema),
121
+ }),
122
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/content`, {
123
+ ops: [{ kind: 'replaceAll', sections: input.sections }],
124
+ }),
125
+ };
126
+ export const proposalContentTools = [
127
+ getProposalContent,
128
+ describeProposalBlockTypes,
129
+ upsertProposalSection,
130
+ deleteProposalSection,
131
+ upsertProposalBlock,
132
+ deleteProposalBlock,
133
+ reorderProposalBlocks,
134
+ replaceProposalContent,
135
+ ];
136
+ //# sourceMappingURL=proposal-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-content.js","sourceRoot":"","sources":["../../src/tools/proposal-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from './types.js';
2
+ export declare const proposalOptionTools: ToolDefinition[];
3
+ //# sourceMappingURL=proposal-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-options.d.ts","sourceRoot":"","sources":["../../src/tools/proposal-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6IjD,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAM/C,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Proposal-options tools. Five operations: list, create, update, delete,
4
+ * set_recommended.
5
+ *
6
+ * Pricing model semantics (mirrors the API's `applyPricingModelRefinement`):
7
+ * - retainer -> monthlyAmount required
8
+ * - fixed_fee -> oneTimeAmount required
9
+ * - ad_hoc -> dayRate required
10
+ * - blended -> oneTimeAmount AND dayRate required
11
+ *
12
+ * Only one option per proposal may be marked `recommended`. The API enforces
13
+ * this atomically (partial UNIQUE index + sibling-clear inside one
14
+ * transaction), so calling `set_recommended_option` will safely swap the
15
+ * recommended flag from any previously-recommended option onto the target.
16
+ */
17
+ const pricingModelEnum = z.enum(['retainer', 'fixed_fee', 'ad_hoc', 'blended']);
18
+ const baseOptionFields = z.object({
19
+ title: z.string().min(1).max(255).describe('Display title for this option (e.g. "Retainer", "Fixed-fee build").'),
20
+ description: z.string().max(10_000).nullable().optional(),
21
+ pricingModel: pricingModelEnum,
22
+ currencyId: z.string().uuid().nullable().optional(),
23
+ monthlyAmount: z
24
+ .number()
25
+ .nonnegative()
26
+ .nullable()
27
+ .optional()
28
+ .describe('Required when pricingModel is "retainer".'),
29
+ oneTimeAmount: z
30
+ .number()
31
+ .nonnegative()
32
+ .nullable()
33
+ .optional()
34
+ .describe('Required when pricingModel is "fixed_fee" or "blended".'),
35
+ dayRate: z
36
+ .number()
37
+ .nonnegative()
38
+ .nullable()
39
+ .optional()
40
+ .describe('Required when pricingModel is "ad_hoc" or "blended".'),
41
+ discountPercentage: z.coerce.number().min(0).max(100).nullable().optional(),
42
+ discountAmount: z.coerce.number().nonnegative().nullable().optional(),
43
+ taxRate: z.coerce.number().min(0).max(100).nullable().optional(),
44
+ taxAmount: z.coerce.number().nonnegative().nullable().optional(),
45
+ termMonths: z.coerce.number().int().nonnegative().nullable().optional(),
46
+ noticePeriodWeeks: z.coerce.number().int().nonnegative().nullable().optional(),
47
+ recommended: z
48
+ .boolean()
49
+ .optional()
50
+ .describe('Mark this option as the recommended one. At most one option per proposal can be recommended; the API atomically clears the previous recommendation when set.'),
51
+ clauseSetKey: z
52
+ .string()
53
+ .min(1)
54
+ .max(255)
55
+ .describe('Identifier for the contract clause set this option will compose against on accept.'),
56
+ servicesSchedule: z.string().nullable().optional(),
57
+ });
58
+ const listProposalOptions = {
59
+ name: 'list_proposal_options',
60
+ description: 'List the pricing options for a proposal, in display order. Each option carries its pricing-model-specific amounts, term, notice period, and a `recommended` flag (at most one option per proposal is recommended at a time).',
61
+ inputSchema: z.object({
62
+ proposalId: z.string().uuid(),
63
+ }),
64
+ handler: async (client, input) => client.get(`/proposals/${input.proposalId}/options`),
65
+ };
66
+ const createProposalOption = {
67
+ name: 'create_proposal_option',
68
+ description: 'Create a new pricing option on a proposal. The new option is appended to the end of the existing options (display_order = max + 1). Pricing-model-specific amount fields are required: retainer needs monthlyAmount; fixed_fee needs oneTimeAmount; ad_hoc needs dayRate; blended needs both oneTimeAmount and dayRate. Setting `recommended: true` here will atomically clear the recommended flag on any other option of this proposal.',
69
+ inputSchema: baseOptionFields.extend({
70
+ proposalId: z.string().uuid(),
71
+ }),
72
+ handler: async (client, input) => {
73
+ const { proposalId, ...body } = input;
74
+ return client.post(`/proposals/${proposalId}/options`, body);
75
+ },
76
+ };
77
+ const updateProposalOption = {
78
+ name: 'update_proposal_option',
79
+ description: 'Update a proposal option. Pass any subset of fields; omitted fields are left unchanged. Pricing-model refinement still applies when `pricingModel` is sent (e.g. switching to retainer requires monthlyAmount). To mark this option as recommended, prefer `set_recommended_option` for clarity, though passing `recommended: true` here works too.',
80
+ inputSchema: z.object({
81
+ proposalId: z.string().uuid(),
82
+ optionId: z.string().uuid(),
83
+ title: z.string().min(1).max(255).optional(),
84
+ description: z.string().max(10_000).nullable().optional(),
85
+ pricingModel: pricingModelEnum.optional(),
86
+ currencyId: z.string().uuid().nullable().optional(),
87
+ monthlyAmount: z.coerce.number().nonnegative().nullable().optional(),
88
+ oneTimeAmount: z.coerce.number().nonnegative().nullable().optional(),
89
+ dayRate: z.coerce.number().nonnegative().nullable().optional(),
90
+ discountPercentage: z.coerce.number().min(0).max(100).nullable().optional(),
91
+ discountAmount: z.coerce.number().nonnegative().nullable().optional(),
92
+ taxRate: z.coerce.number().min(0).max(100).nullable().optional(),
93
+ taxAmount: z.coerce.number().nonnegative().nullable().optional(),
94
+ termMonths: z.coerce.number().int().nonnegative().nullable().optional(),
95
+ noticePeriodWeeks: z.coerce.number().int().nonnegative().nullable().optional(),
96
+ recommended: z.boolean().optional(),
97
+ clauseSetKey: z.string().min(1).max(255).optional(),
98
+ servicesSchedule: z.string().nullable().optional(),
99
+ }),
100
+ handler: async (client, input) => {
101
+ const { proposalId, optionId, ...body } = input;
102
+ return client.patch(`/proposals/${proposalId}/options/${optionId}`, body);
103
+ },
104
+ };
105
+ const setRecommendedOption = {
106
+ name: 'set_recommended_option',
107
+ description: 'Mark one option as the recommended option on its proposal. Atomically clears the recommended flag from any other option of the same proposal. Use this in preference to `update_proposal_option` when the only change is the recommendation, to make the intent explicit.',
108
+ inputSchema: z.object({
109
+ proposalId: z.string().uuid(),
110
+ optionId: z.string().uuid(),
111
+ }),
112
+ handler: async (client, input) => client.patch(`/proposals/${input.proposalId}/options/${input.optionId}`, {
113
+ recommended: true,
114
+ }),
115
+ };
116
+ const deleteProposalOption = {
117
+ name: 'delete_proposal_option',
118
+ description: 'Delete a proposal option. Cascades to any line items scoped to that option. Display order on remaining options is left as-is; the API treats display_order as a sort key, not a contiguous sequence.',
119
+ inputSchema: z.object({
120
+ proposalId: z.string().uuid(),
121
+ optionId: z.string().uuid(),
122
+ }),
123
+ handler: async (client, input) => client.delete(`/proposals/${input.proposalId}/options/${input.optionId}`),
124
+ };
125
+ export const proposalOptionTools = [
126
+ listProposalOptions,
127
+ createProposalOption,
128
+ updateProposalOption,
129
+ setRecommendedOption,
130
+ deleteProposalOption,
131
+ ];
132
+ //# sourceMappingURL=proposal-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-options.js","sourceRoot":"","sources":["../../src/tools/proposal-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ToolDefinition } from './types.js';
2
+ /**
3
+ * Coerce a proposal payload from the API into a shape that includes a
4
+ * computed `shareUrl`. The API already returns `shareToken` -- we layer the
5
+ * fully-qualified URL on top so the LLM never has to construct it from
6
+ * fragments.
7
+ */
8
+ declare function addShareUrl<T extends Record<string, unknown>>(proposal: T): T & {
9
+ shareUrl: string | null;
10
+ };
11
+ export declare const proposalTools: ToolDefinition[];
12
+ /**
13
+ * Exported for tests so they can assert on the computed shareUrl rule
14
+ * without spinning up the full handler stack.
15
+ */
16
+ export declare const __testables: {
17
+ addShareUrl: typeof addShareUrl;
18
+ SHARE_URL_BASE: string;
19
+ SHAREABLE_STATUSES: Set<string>;
20
+ };
21
+ export {};
22
+ //# sourceMappingURL=proposals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposals.d.ts","sourceRoot":"","sources":["../../src/tools/proposals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4CjD;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAMpG;AA+HD,eAAO,MAAM,aAAa,EAAE,cAAc,EAOzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;CAAsD,CAAC"}
@@ -0,0 +1,179 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Proposal tools. Six operations: list, get, create, update, delete, set_status.
4
+ *
5
+ * The DainOS proposal model has a structured "content" body (sections + blocks)
6
+ * which is edited via the *content* tools in `proposal-content.ts` -- callers
7
+ * should not POST the whole content blob via `update_proposal` for routine
8
+ * edits. Use `update_proposal` for proposal-level fields (title, dates,
9
+ * line items, links to deal/company/contact). Use the content tools for
10
+ * sections + blocks.
11
+ *
12
+ * `get_proposal` includes a computed `shareUrl` when the proposal has been
13
+ * sent (status one of: `sent`, `viewed`, `accepted`). For draft proposals
14
+ * the field is `null` because the share link is not yet meaningful.
15
+ */
16
+ const PROPOSAL_STATUSES = [
17
+ 'draft',
18
+ 'sent',
19
+ 'viewed',
20
+ 'signed',
21
+ 'accepted',
22
+ 'rejected',
23
+ 'expired',
24
+ ];
25
+ const SHAREABLE_STATUSES = new Set(['sent', 'viewed', 'signed', 'accepted']);
26
+ const SHARE_URL_BASE = 'https://dainos.app/proposals/view';
27
+ const proposalStatusEnum = z.enum(PROPOSAL_STATUSES);
28
+ const lineItemSchema = z.object({
29
+ name: z.string().min(1).max(255),
30
+ description: z.string().nullable().optional(),
31
+ quantity: z.coerce.number().positive(),
32
+ unitType: z.string().min(1).max(50).optional().describe('e.g. "hour", "day", "unit". Defaults to "unit".'),
33
+ unitPrice: z.coerce.number().nonnegative(),
34
+ discountPercentage: z.coerce.number().min(0).max(100).nullable().optional(),
35
+ isOptional: z.boolean().optional().describe('Optional line items do not contribute to the subtotal.'),
36
+ sortOrder: z.coerce.number().int().optional(),
37
+ });
38
+ /**
39
+ * Coerce a proposal payload from the API into a shape that includes a
40
+ * computed `shareUrl`. The API already returns `shareToken` -- we layer the
41
+ * fully-qualified URL on top so the LLM never has to construct it from
42
+ * fragments.
43
+ */
44
+ function addShareUrl(proposal) {
45
+ const status = proposal.status;
46
+ const token = proposal.shareToken;
47
+ const shareUrl = token && status && SHAREABLE_STATUSES.has(status) ? `${SHARE_URL_BASE}/${token}` : null;
48
+ return { ...proposal, shareUrl };
49
+ }
50
+ function unwrap(response) {
51
+ if (response && typeof response === 'object' && 'data' in response) {
52
+ return response.data;
53
+ }
54
+ return response;
55
+ }
56
+ const listProposals = {
57
+ name: 'list_proposals',
58
+ description: 'List proposals in the current workspace. Returns id, title, status, totals, dates, and counterparty for each. Use this to discover proposal ids before calling get_proposal / get_proposal_content / update_proposal.',
59
+ inputSchema: z.object({
60
+ search: z.string().max(200).optional().describe('Free-text match against title.'),
61
+ status: proposalStatusEnum.optional(),
62
+ companyId: z.string().uuid().optional().describe('Filter by counterparty company.'),
63
+ dealId: z.string().uuid().optional().describe('Filter by deal the proposal is attached to.'),
64
+ }),
65
+ handler: async (client, input) => {
66
+ const params = new URLSearchParams();
67
+ if (input.search)
68
+ params.set('search', input.search);
69
+ if (input.status)
70
+ params.set('status', input.status);
71
+ if (input.companyId)
72
+ params.set('companyId', input.companyId);
73
+ if (input.dealId)
74
+ params.set('dealId', input.dealId);
75
+ const query = params.toString() ? `?${params.toString()}` : '';
76
+ return client.get(`/proposals${query}`);
77
+ },
78
+ };
79
+ const getProposal = {
80
+ name: 'get_proposal',
81
+ description: 'Get one proposal by id. Returns full proposal details including line items, options, counterparty, and a computed `shareUrl` (the public client viewing link) when the proposal has been sent. Draft proposals always return shareUrl=null.',
82
+ inputSchema: z.object({
83
+ id: z.string().uuid(),
84
+ }),
85
+ handler: async (client, input) => {
86
+ const response = await client.get(`/proposals/${input.id}`);
87
+ const data = unwrap(response);
88
+ if (data && typeof data === 'object') {
89
+ return addShareUrl(data);
90
+ }
91
+ return data;
92
+ },
93
+ };
94
+ const createProposal = {
95
+ name: 'create_proposal',
96
+ description: 'Create a new proposal. Only `title` is required. The new proposal is created with status=draft. Build the proposal content separately via the content tools (upsert_proposal_section + upsert_proposal_block) -- this endpoint accepts proposal-level fields only. Returns the created proposal with its id.',
97
+ inputSchema: z.object({
98
+ title: z.string().min(1).max(255),
99
+ dealId: z.string().uuid().nullable().optional().describe('Link to a deal in the CRM pipeline.'),
100
+ companyId: z.string().uuid().nullable().optional().describe('Counterparty company.'),
101
+ contactId: z.string().uuid().nullable().optional().describe('Primary contact at the company.'),
102
+ coverLetter: z.string().max(10000).nullable().optional(),
103
+ termsAndConditions: z.string().max(10000).nullable().optional(),
104
+ validFrom: z
105
+ .string()
106
+ .nullable()
107
+ .optional()
108
+ .describe('ISO 8601 date or datetime.'),
109
+ validUntil: z
110
+ .string()
111
+ .nullable()
112
+ .optional()
113
+ .describe('ISO 8601 date or datetime.'),
114
+ currencyId: z.string().uuid().nullable().optional(),
115
+ lineItems: z.array(lineItemSchema).optional(),
116
+ }),
117
+ handler: async (client, input) => client.post('/proposals', input),
118
+ };
119
+ const updateProposal = {
120
+ name: 'update_proposal',
121
+ description: 'Update an existing proposal. Pass any subset of proposal-level fields; omitted fields are left unchanged. Do NOT use this for content (sections + blocks) edits -- use upsert_proposal_section / upsert_proposal_block / etc. so you only send the bytes you are changing.',
122
+ inputSchema: z.object({
123
+ id: z.string().uuid(),
124
+ title: z.string().min(1).max(255).optional(),
125
+ dealId: z.string().uuid().nullable().optional(),
126
+ companyId: z.string().uuid().nullable().optional(),
127
+ contactId: z.string().uuid().nullable().optional(),
128
+ coverLetter: z.string().max(10000).nullable().optional(),
129
+ termsAndConditions: z.string().max(10000).nullable().optional(),
130
+ validFrom: z.string().nullable().optional(),
131
+ validUntil: z.string().nullable().optional(),
132
+ currencyId: z.string().uuid().nullable().optional(),
133
+ lineItems: z.array(lineItemSchema).optional(),
134
+ }),
135
+ handler: async (client, input) => {
136
+ const { id, ...rest } = input;
137
+ return client.put(`/proposals/${id}`, rest);
138
+ },
139
+ };
140
+ const setProposalStatus = {
141
+ name: 'set_proposal_status',
142
+ description: 'Update a proposal status. Transitioning to `sent` is what activates the client viewing link (shareUrl on get_proposal). `rejected` requires a `rejectionReason`.',
143
+ inputSchema: z.object({
144
+ id: z.string().uuid(),
145
+ status: proposalStatusEnum,
146
+ rejectionReason: z
147
+ .string()
148
+ .max(2000)
149
+ .nullable()
150
+ .optional()
151
+ .describe('Required when status is `rejected`.'),
152
+ }),
153
+ handler: async (client, input) => {
154
+ const { id, ...body } = input;
155
+ return client.patch(`/proposals/${id}/status`, body);
156
+ },
157
+ };
158
+ const deleteProposal = {
159
+ name: 'delete_proposal',
160
+ description: 'Delete a proposal permanently. Returns 204 on success. Use cautiously -- there is no undelete. Prefer set_proposal_status to `expired` for proposals you want to retire while keeping the record.',
161
+ inputSchema: z.object({
162
+ id: z.string().uuid(),
163
+ }),
164
+ handler: async (client, input) => client.delete(`/proposals/${input.id}`),
165
+ };
166
+ export const proposalTools = [
167
+ listProposals,
168
+ getProposal,
169
+ createProposal,
170
+ updateProposal,
171
+ setProposalStatus,
172
+ deleteProposal,
173
+ ];
174
+ /**
175
+ * Exported for tests so they can assert on the computed shareUrl rule
176
+ * without spinning up the full handler stack.
177
+ */
178
+ export const __testables = { addShareUrl, SHARE_URL_BASE, SHAREABLE_STATUSES };
179
+ //# sourceMappingURL=proposals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../src/tools/proposals.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ const listTasks = {
23
23
  projectId: z.string().uuid().optional().describe('Filter by project.'),
24
24
  assigneeId: z.string().uuid().optional().describe('Filter by assignee user id.'),
25
25
  status: taskStatusEnum.optional(),
26
- limit: z.number().int().min(1).max(100).optional().describe('Default 25, max 100.'),
26
+ limit: z.coerce.number().int().min(1).max(100).optional().describe('Default 25, max 100.'),
27
27
  }),
28
28
  handler: async (client, input) => {
29
29
  const params = new URLSearchParams();
@@ -60,8 +60,8 @@ const createTask = {
60
60
  reporterId: z.string().uuid().optional(),
61
61
  status: taskStatusEnum.optional().describe('Defaults to backlog.'),
62
62
  priorityMoscow: priorityMoscowEnum.optional(),
63
- storyPoints: z.number().int().min(0).max(100).optional(),
64
- estimatedHours: z.number().min(0).optional(),
63
+ storyPoints: z.coerce.number().int().min(0).max(100).optional(),
64
+ estimatedHours: z.coerce.number().min(0).optional(),
65
65
  dueDate: z.string().optional().describe('ISO 8601.'),
66
66
  startDate: z.string().optional().describe('ISO 8601.'),
67
67
  tags: z.array(z.string()).optional(),
@@ -85,8 +85,8 @@ const updateTask = {
85
85
  status: taskStatusEnum.optional(),
86
86
  assigneeId: z.string().uuid().optional(),
87
87
  priorityMoscow: priorityMoscowEnum.optional(),
88
- storyPoints: z.number().int().min(0).max(100).optional(),
89
- estimatedHours: z.number().min(0).optional(),
88
+ storyPoints: z.coerce.number().int().min(0).max(100).optional(),
89
+ estimatedHours: z.coerce.number().min(0).optional(),
90
90
  dueDate: z.string().optional(),
91
91
  startDate: z.string().optional(),
92
92
  tags: z.array(z.string()).optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,33 @@ function zodToJsonSchema(schema) {
76
76
  const value = schema._def.value;
77
77
  return withDescription(schema, { type: typeof value, enum: [value] });
78
78
  }
79
+ if (schema instanceof z.ZodDiscriminatedUnion) {
80
+ const options = [...schema._def.options];
81
+ return withDescription(schema, {
82
+ oneOf: options.map((opt) => zodToJsonSchema(opt)),
83
+ });
84
+ }
85
+ if (schema instanceof z.ZodUnion) {
86
+ const options = schema._def.options;
87
+ return withDescription(schema, {
88
+ anyOf: options.map((opt) => zodToJsonSchema(opt)),
89
+ });
90
+ }
91
+ if (schema instanceof z.ZodEffects) {
92
+ return zodToJsonSchema(schema._def.schema);
93
+ }
94
+ if (schema instanceof z.ZodRecord) {
95
+ return withDescription(schema, {
96
+ type: 'object',
97
+ additionalProperties: true,
98
+ });
99
+ }
100
+ if (schema instanceof z.ZodUnknown || schema instanceof z.ZodAny) {
101
+ return withDescription(schema, {});
102
+ }
103
+ if (schema instanceof z.ZodNull) {
104
+ return withDescription(schema, { type: 'null' });
105
+ }
79
106
  // Fallback: permissive object. Should never hit in practice with our schemas.
80
107
  return withDescription(schema, { type: 'object' });
81
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}