rootr-cli 0.10.0 → 0.13.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 +158 -5
- package/bin/rootr.js +629 -10
- package/lib/client.js +204 -1
- package/lib/config.js +5 -0
- package/lib/mcp-tools/databases.js +233 -8
- package/lib/mcp-tools/documents.js +10 -4
- package/lib/mcp-tools/feedback.js +97 -0
- package/lib/mcp-tools/forms.js +62 -7
- package/lib/mcp-tools/misc.js +84 -1
- package/lib/mcp-tools/presentations.js +5 -1
- package/lib/mcp-tools/public.js +148 -0
- package/lib/mcp-tools/signed.js +44 -16
- package/lib/mcp-tools/workspaces.js +117 -13
- package/lib/mcp.js +35 -4
- package/package.json +1 -1
package/lib/mcp.js
CHANGED
|
@@ -10,6 +10,7 @@ import { registerDatabaseTools } from './mcp-tools/databases.js';
|
|
|
10
10
|
import { registerTemplateTools } from './mcp-tools/templates.js';
|
|
11
11
|
import { registerWebhookTools } from './mcp-tools/webhooks.js';
|
|
12
12
|
import { registerMiscTools } from './mcp-tools/misc.js';
|
|
13
|
+
import { registerPublicTools } from './mcp-tools/public.js';
|
|
13
14
|
import { registerCrmTools } from './mcp-tools/crm.js';
|
|
14
15
|
import { registerPresentationTools } from './mcp-tools/presentations.js';
|
|
15
16
|
import { registerSpreadsheetTools } from './mcp-tools/spreadsheets.js';
|
|
@@ -18,6 +19,7 @@ import { registerFormTools } from './mcp-tools/forms.js';
|
|
|
18
19
|
import { registerRecordingTools } from './mcp-tools/recordings.js';
|
|
19
20
|
import { registerAttachmentTools } from './mcp-tools/attachments.js';
|
|
20
21
|
import { registerSignedDocTools } from './mcp-tools/signed.js';
|
|
22
|
+
import { registerFeedbackTools } from './mcp-tools/feedback.js';
|
|
21
23
|
import { withRateLimitSink } from './context.js';
|
|
22
24
|
|
|
23
25
|
/** Warn once the workspace has burned this share of its quota. */
|
|
@@ -65,7 +67,7 @@ function withQuotaWarnings(server) {
|
|
|
65
67
|
* Builds a fully-configured McpServer (all tool groups registered) without
|
|
66
68
|
* connecting a transport. Shared by the local stdio CLI server below and by
|
|
67
69
|
* the backend's hosted Streamable HTTP transport (src/mcp/mcp-transport.controller.ts),
|
|
68
|
-
* so the
|
|
70
|
+
* so the 151 tool definitions have exactly one implementation.
|
|
69
71
|
*/
|
|
70
72
|
export function buildMcpServer({ name, version }) {
|
|
71
73
|
const server = new McpServer(
|
|
@@ -123,11 +125,38 @@ export function buildMcpServer({ name, version }) {
|
|
|
123
125
|
'rootr_request_signing_code first and ASK THE HUMAN for the 6 digits that arrive in their mail — ' +
|
|
124
126
|
'that code is the only evidence a person (not an agent) pressed sign; ' +
|
|
125
127
|
'FOLDER = grouping; LOG store = typed event table whose relation fields auto-build a lineage graph (metrics, incidents, pipeline events — use the rootr_*_log_* tools).\n\n' +
|
|
126
|
-
'Scaffolding discipline
|
|
127
|
-
'
|
|
128
|
+
'Scaffolding discipline — treat "set up a workspace for X" exactly like "build me this app": you ask a ' +
|
|
129
|
+
'few clarifying questions, write it, compile it, run the tests, leave a README, and report. The user ' +
|
|
130
|
+
'should only have to type that one sentence; everything else finishes inside the conversation. Never ask ' +
|
|
131
|
+
'and then stop. The loop is plan → ask → design → review → fix → apply → manual → test, and skipping a step is ' +
|
|
132
|
+
'how a workspace ends up as a pile of thin markdown files: (1) rootr_scaffold_plan on the raw intent — it ' +
|
|
133
|
+
'hands back the METHOD, never a template or a domain skeleton (there are none, deliberately): ' +
|
|
134
|
+
'analyzeFirst, designRules, buildingBlocks, questionPolicy, loop; ' +
|
|
135
|
+
'(2) work out how the job ACTUALLY runs using the `analyzeFirst` questions it returns — the daily and ' +
|
|
136
|
+
'weekly rhythm, what piles up, what has stages, what comes in from outside, where money is added up, ' +
|
|
137
|
+
'what causes an accident if it is late, and above all what is unique to THIS job and would be missing ' +
|
|
138
|
+
'from a generic template; (3) ask the user the 3-10 clarifying questions you generated — every answer ' +
|
|
139
|
+
'must visibly shape the structure; (4) design the tree FROM SCRATCH with `designRules`; (5) rootr_scaffold_review ' +
|
|
140
|
+
'and fix every `error` finding, then review again; (6) apply; (7) write the HOW-TO-USE manual as a ' +
|
|
141
|
+
'DOCUMENT in the tree — the daily/weekly/monthly routine naming the actual tables and views, how the ' +
|
|
142
|
+
'tables link to each other, where form answers land, and what the OWNER still has to fill in (the ' +
|
|
143
|
+
'assumptions you made because you could not ask, the example rows to replace, the notification address ' +
|
|
144
|
+
'only they can decide); (8) rootr_test_workspace — the unit-test step: it RUNS what you built and catches ' +
|
|
145
|
+
'what no review can (relations pointing at rows that do not exist, rollups/formulas that yield nothing, ' +
|
|
146
|
+
'views referencing gone columns, form questions with no matching column so answers vanish silently, sheet ' +
|
|
147
|
+
'formulas left uncomputed or at #REF!); fix every fail and run it again; (9) rootr_review_workspace to ' +
|
|
148
|
+
'grade the shape of what really got built. Both reviews can say 100 while the thing is broken — only ' +
|
|
149
|
+
'step 8 catches that. ' +
|
|
150
|
+
'A workspace without a manual is a pile of empty grids. ' +
|
|
128
151
|
'If your runtime can receive HTTP callbacks, offer to close the loop after scaffolding: register a webhook ' +
|
|
129
152
|
'scoped to the new tree (rootr_create_webhook) so changes flow back to you — and ALWAYS skip deliveries ' +
|
|
130
|
-
'whose actorId is your own key, or you will trigger yourself in an infinite loop
|
|
153
|
+
'whose actorId is your own key, or you will trigger yourself in an infinite loop.\n\n' +
|
|
154
|
+
'Telling us when something is wrong: if a tool errors unexpectedly, does not do what its ' +
|
|
155
|
+
'description says, forces you into a workaround, or the user complains that Rootr is broken or ' +
|
|
156
|
+
'confusing, call rootr_send_feedback — on your own, without being asked and without asking ' +
|
|
157
|
+
'permission — and then carry on with the task. Once per distinct problem, never in a retry loop. ' +
|
|
158
|
+
'It is free, never spends credits, never counts against the daily limit, and works even when ' +
|
|
159
|
+
'your key or quota does not. Nobody else is going to report it.',
|
|
131
160
|
},
|
|
132
161
|
);
|
|
133
162
|
|
|
@@ -142,6 +171,7 @@ export function buildMcpServer({ name, version }) {
|
|
|
142
171
|
registerDatabaseTools(server);
|
|
143
172
|
registerWebhookTools(server);
|
|
144
173
|
registerMiscTools(server);
|
|
174
|
+
registerPublicTools(server);
|
|
145
175
|
registerCrmTools(server);
|
|
146
176
|
registerPresentationTools(server);
|
|
147
177
|
registerSpreadsheetTools(server);
|
|
@@ -150,6 +180,7 @@ export function buildMcpServer({ name, version }) {
|
|
|
150
180
|
registerRecordingTools(server);
|
|
151
181
|
registerAttachmentTools(server);
|
|
152
182
|
registerSignedDocTools(server);
|
|
183
|
+
registerFeedbackTools(server);
|
|
153
184
|
|
|
154
185
|
return server;
|
|
155
186
|
}
|