rig-constellation 0.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 (66) hide show
  1. package/LICENSE +201 -0
  2. package/LICENSE-CODEGRAPH.txt +27 -0
  3. package/NOTICE +15 -0
  4. package/README.md +121 -0
  5. package/dist/chunk-8sqjbsgt.js +42 -0
  6. package/dist/chunk-9754b9t6.js +70 -0
  7. package/dist/chunk-arpj39jd.js +10 -0
  8. package/dist/chunk-bnz0drs2.js +10 -0
  9. package/dist/chunk-hk4h7yej.js +71 -0
  10. package/dist/rig.js +11708 -0
  11. package/generated/.manifest +57 -0
  12. package/generated/core/anchors-registry.ts +70 -0
  13. package/generated/core/migrations.ts +79 -0
  14. package/generated/core/schema.sql +241 -0
  15. package/generated/installer/claude.instructions.md +345 -0
  16. package/generated/installer/claude.permissions.json +44 -0
  17. package/generated/installer/codex.instructions.md +345 -0
  18. package/generated/installer/codex.permissions.json +44 -0
  19. package/generated/installer/cursor.instructions.md +345 -0
  20. package/generated/installer/cursor.permissions.json +44 -0
  21. package/generated/installer/opencode.instructions.md +345 -0
  22. package/generated/installer/opencode.permissions.json +44 -0
  23. package/generated/installer/openrouter.instructions.md +345 -0
  24. package/generated/installer/openrouter.permissions.json +44 -0
  25. package/generated/mcp/handlers/rig_add_alias.handler.ts +34 -0
  26. package/generated/mcp/handlers/rig_add_node.handler.ts +34 -0
  27. package/generated/mcp/handlers/rig_aliases.handler.ts +25 -0
  28. package/generated/mcp/handlers/rig_annotate.handler.ts +34 -0
  29. package/generated/mcp/handlers/rig_callees.handler.ts +25 -0
  30. package/generated/mcp/handlers/rig_callers.handler.ts +25 -0
  31. package/generated/mcp/handlers/rig_chain.handler.ts +25 -0
  32. package/generated/mcp/handlers/rig_cluster.handler.ts +34 -0
  33. package/generated/mcp/handlers/rig_cold.handler.ts +25 -0
  34. package/generated/mcp/handlers/rig_context.handler.ts +29 -0
  35. package/generated/mcp/handlers/rig_critical_path.handler.ts +25 -0
  36. package/generated/mcp/handlers/rig_dep_conflicts.handler.ts +25 -0
  37. package/generated/mcp/handlers/rig_deps.handler.ts +25 -0
  38. package/generated/mcp/handlers/rig_drill.handler.ts +25 -0
  39. package/generated/mcp/handlers/rig_drop_waypoint.handler.ts +34 -0
  40. package/generated/mcp/handlers/rig_explore.handler.ts +29 -0
  41. package/generated/mcp/handlers/rig_files.handler.ts +25 -0
  42. package/generated/mcp/handlers/rig_focus.handler.ts +29 -0
  43. package/generated/mcp/handlers/rig_hotspots.handler.ts +25 -0
  44. package/generated/mcp/handlers/rig_hub_of.handler.ts +25 -0
  45. package/generated/mcp/handlers/rig_hubs.handler.ts +25 -0
  46. package/generated/mcp/handlers/rig_impact.handler.ts +25 -0
  47. package/generated/mcp/handlers/rig_neighbors.handler.ts +25 -0
  48. package/generated/mcp/handlers/rig_node.handler.ts +25 -0
  49. package/generated/mcp/handlers/rig_phantom_imports.handler.ts +25 -0
  50. package/generated/mcp/handlers/rig_promote.handler.ts +34 -0
  51. package/generated/mcp/handlers/rig_propose_edge.handler.ts +34 -0
  52. package/generated/mcp/handlers/rig_pull.handler.ts +25 -0
  53. package/generated/mcp/handlers/rig_relevant_skills.handler.ts +25 -0
  54. package/generated/mcp/handlers/rig_search.handler.ts +25 -0
  55. package/generated/mcp/handlers/rig_session_token.handler.ts +25 -0
  56. package/generated/mcp/handlers/rig_status.handler.ts +25 -0
  57. package/generated/mcp/handlers/rig_subscribe.handler.ts +25 -0
  58. package/generated/mcp/handlers/rig_undo.handler.ts +29 -0
  59. package/generated/mcp/handlers/rig_unused_deps.handler.ts +25 -0
  60. package/generated/mcp/handlers/rig_waypoints.handler.ts +25 -0
  61. package/generated/mcp/handlers-index.ts +40 -0
  62. package/generated/mcp/tools-manifest.json +2958 -0
  63. package/generated/web/ws-events.ts +237 -0
  64. package/package.json +77 -0
  65. package/packages/web/dist/assets/index-VRO-sxc2.js +54 -0
  66. package/packages/web/dist/index.html +35 -0
@@ -0,0 +1,29 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_context.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_context.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_context.ts';
9
+
10
+ export const rigContextHandler: ToolHandler = {
11
+ name: 'rig_context',
12
+ tier: 'heavy',
13
+ mainSessionForbidden: true,
14
+ run: async (args, ctx) => {
15
+ if (ctx.isMainSession) {
16
+ throw new ToolError('MAIN_SESSION_FORBIDDEN', 'rig_context cannot run in the main session');
17
+ }
18
+ const parsedIn = contract.input.safeParse(args);
19
+ if (!parsedIn.success) {
20
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
21
+ }
22
+ const out = await impl(parsedIn.data, ctx);
23
+ const parsedOut = contract.output.safeParse(out);
24
+ if (!parsedOut.success) {
25
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
26
+ }
27
+ return parsedOut.data;
28
+ },
29
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_critical_path.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_critical_path.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_critical_path.ts';
9
+
10
+ export const rigCriticalPathHandler: ToolHandler = {
11
+ name: 'rig_critical_path',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_dep_conflicts.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_dep_conflicts.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_dep_conflicts.ts';
9
+
10
+ export const rigDepConflictsHandler: ToolHandler = {
11
+ name: 'rig_dep_conflicts',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_deps.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_deps.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_deps.ts';
9
+
10
+ export const rigDepsHandler: ToolHandler = {
11
+ name: 'rig_deps',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_drill.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_drill.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_drill.ts';
9
+
10
+ export const rigDrillHandler: ToolHandler = {
11
+ name: 'rig_drill',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,34 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_drop_waypoint.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_drop_waypoint.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_drop_waypoint.ts';
9
+
10
+ export const rigDropWaypointHandler: ToolHandler = {
11
+ name: 'rig_drop_waypoint',
12
+ tier: 'write',
13
+ provenanceRequired: true,
14
+ requiresRationale: true,
15
+ run: async (args, ctx) => {
16
+ if (!ctx.provenance) {
17
+ throw new ToolError('PROVENANCE_REQUIRED', 'rig_drop_waypoint requires provenance');
18
+ }
19
+ const parsedIn = contract.input.safeParse(args);
20
+ if (!parsedIn.success) {
21
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
22
+ }
23
+ const rationale = (parsedIn.data as { rationale?: unknown }).rationale;
24
+ if (typeof rationale !== 'string' || rationale.trim().length === 0) {
25
+ throw new ToolError('RATIONALE_REQUIRED', 'rig_drop_waypoint requires a non-empty rationale');
26
+ }
27
+ const out = await impl(parsedIn.data, ctx);
28
+ const parsedOut = contract.output.safeParse(out);
29
+ if (!parsedOut.success) {
30
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
31
+ }
32
+ return parsedOut.data;
33
+ },
34
+ };
@@ -0,0 +1,29 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_explore.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_explore.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_explore.ts';
9
+
10
+ export const rigExploreHandler: ToolHandler = {
11
+ name: 'rig_explore',
12
+ tier: 'heavy',
13
+ mainSessionForbidden: true,
14
+ run: async (args, ctx) => {
15
+ if (ctx.isMainSession) {
16
+ throw new ToolError('MAIN_SESSION_FORBIDDEN', 'rig_explore cannot run in the main session');
17
+ }
18
+ const parsedIn = contract.input.safeParse(args);
19
+ if (!parsedIn.success) {
20
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
21
+ }
22
+ const out = await impl(parsedIn.data, ctx);
23
+ const parsedOut = contract.output.safeParse(out);
24
+ if (!parsedOut.success) {
25
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
26
+ }
27
+ return parsedOut.data;
28
+ },
29
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_files.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_files.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_files.ts';
9
+
10
+ export const rigFilesHandler: ToolHandler = {
11
+ name: 'rig_files',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,29 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_focus.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_focus.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_focus.ts';
9
+
10
+ export const rigFocusHandler: ToolHandler = {
11
+ name: 'rig_focus',
12
+ tier: 'write',
13
+ provenanceRequired: true,
14
+ run: async (args, ctx) => {
15
+ if (!ctx.provenance) {
16
+ throw new ToolError('PROVENANCE_REQUIRED', 'rig_focus requires provenance');
17
+ }
18
+ const parsedIn = contract.input.safeParse(args);
19
+ if (!parsedIn.success) {
20
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
21
+ }
22
+ const out = await impl(parsedIn.data, ctx);
23
+ const parsedOut = contract.output.safeParse(out);
24
+ if (!parsedOut.success) {
25
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
26
+ }
27
+ return parsedOut.data;
28
+ },
29
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_hotspots.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_hotspots.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_hotspots.ts';
9
+
10
+ export const rigHotspotsHandler: ToolHandler = {
11
+ name: 'rig_hotspots',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_hub_of.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_hub_of.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_hub_of.ts';
9
+
10
+ export const rigHubOfHandler: ToolHandler = {
11
+ name: 'rig_hub_of',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_hubs.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_hubs.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_hubs.ts';
9
+
10
+ export const rigHubsHandler: ToolHandler = {
11
+ name: 'rig_hubs',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_impact.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_impact.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_impact.ts';
9
+
10
+ export const rigImpactHandler: ToolHandler = {
11
+ name: 'rig_impact',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_neighbors.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_neighbors.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_neighbors.ts';
9
+
10
+ export const rigNeighborsHandler: ToolHandler = {
11
+ name: 'rig_neighbors',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_node.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_node.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_node.ts';
9
+
10
+ export const rigNodeHandler: ToolHandler = {
11
+ name: 'rig_node',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_phantom_imports.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_phantom_imports.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_phantom_imports.ts';
9
+
10
+ export const rigPhantomImportsHandler: ToolHandler = {
11
+ name: 'rig_phantom_imports',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,34 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_promote.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_promote.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_promote.ts';
9
+
10
+ export const rigPromoteHandler: ToolHandler = {
11
+ name: 'rig_promote',
12
+ tier: 'write',
13
+ provenanceRequired: true,
14
+ requiresRationale: true,
15
+ run: async (args, ctx) => {
16
+ if (!ctx.provenance) {
17
+ throw new ToolError('PROVENANCE_REQUIRED', 'rig_promote requires provenance');
18
+ }
19
+ const parsedIn = contract.input.safeParse(args);
20
+ if (!parsedIn.success) {
21
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
22
+ }
23
+ const rationale = (parsedIn.data as { rationale?: unknown }).rationale;
24
+ if (typeof rationale !== 'string' || rationale.trim().length === 0) {
25
+ throw new ToolError('RATIONALE_REQUIRED', 'rig_promote requires a non-empty rationale');
26
+ }
27
+ const out = await impl(parsedIn.data, ctx);
28
+ const parsedOut = contract.output.safeParse(out);
29
+ if (!parsedOut.success) {
30
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
31
+ }
32
+ return parsedOut.data;
33
+ },
34
+ };
@@ -0,0 +1,34 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_propose_edge.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_propose_edge.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_propose_edge.ts';
9
+
10
+ export const rigProposeEdgeHandler: ToolHandler = {
11
+ name: 'rig_propose_edge',
12
+ tier: 'write',
13
+ provenanceRequired: true,
14
+ requiresRationale: true,
15
+ run: async (args, ctx) => {
16
+ if (!ctx.provenance) {
17
+ throw new ToolError('PROVENANCE_REQUIRED', 'rig_propose_edge requires provenance');
18
+ }
19
+ const parsedIn = contract.input.safeParse(args);
20
+ if (!parsedIn.success) {
21
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
22
+ }
23
+ const rationale = (parsedIn.data as { rationale?: unknown }).rationale;
24
+ if (typeof rationale !== 'string' || rationale.trim().length === 0) {
25
+ throw new ToolError('RATIONALE_REQUIRED', 'rig_propose_edge requires a non-empty rationale');
26
+ }
27
+ const out = await impl(parsedIn.data, ctx);
28
+ const parsedOut = contract.output.safeParse(out);
29
+ if (!parsedOut.success) {
30
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
31
+ }
32
+ return parsedOut.data;
33
+ },
34
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_pull.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_pull.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_pull.ts';
9
+
10
+ export const rigPullHandler: ToolHandler = {
11
+ name: 'rig_pull',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_relevant_skills.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_relevant_skills.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_relevant_skills.ts';
9
+
10
+ export const rigRelevantSkillsHandler: ToolHandler = {
11
+ name: 'rig_relevant_skills',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_search.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_search.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_search.ts';
9
+
10
+ export const rigSearchHandler: ToolHandler = {
11
+ name: 'rig_search',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_session_token.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_session_token.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_session_token.ts';
9
+
10
+ export const rigSessionTokenHandler: ToolHandler = {
11
+ name: 'rig_session_token',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };
@@ -0,0 +1,25 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Source: .contracts/tools/rig_status.contract.ts
3
+ // Edit the .contract.ts file(s), then run `bun run gen`.
4
+
5
+ import type { ToolHandler } from '@rig/mcp/dispatch.ts';
6
+ import { ToolError } from '@rig/mcp/dispatch.ts';
7
+ import contract from '../../../.contracts/tools/rig_status.contract.ts';
8
+ import { run as impl } from '@rig/mcp/tool-impls/rig_status.ts';
9
+
10
+ export const rigStatusHandler: ToolHandler = {
11
+ name: 'rig_status',
12
+ tier: 'light',
13
+ run: async (args, ctx) => {
14
+ const parsedIn = contract.input.safeParse(args);
15
+ if (!parsedIn.success) {
16
+ throw new ToolError('INPUT_INVALID', parsedIn.error.message);
17
+ }
18
+ const out = await impl(parsedIn.data, ctx);
19
+ const parsedOut = contract.output.safeParse(out);
20
+ if (!parsedOut.success) {
21
+ throw new ToolError('OUTPUT_INVALID', parsedOut.error.message);
22
+ }
23
+ return parsedOut.data;
24
+ },
25
+ };