@mcptoolshop/roll 1.0.0 → 2.0.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 (69) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +105 -137
  3. package/dist/analyze/distribution.d.ts.map +1 -1
  4. package/dist/analyze/distribution.js +249 -33
  5. package/dist/analyze/distribution.js.map +1 -1
  6. package/dist/bridge/handler.d.ts +14 -0
  7. package/dist/bridge/handler.d.ts.map +1 -0
  8. package/dist/bridge/handler.js +163 -0
  9. package/dist/bridge/handler.js.map +1 -0
  10. package/dist/bridge/protocol.d.ts +53 -0
  11. package/dist/bridge/protocol.d.ts.map +1 -0
  12. package/dist/bridge/protocol.js +8 -0
  13. package/dist/bridge/protocol.js.map +1 -0
  14. package/dist/bridge/server.d.ts +3 -0
  15. package/dist/bridge/server.d.ts.map +1 -0
  16. package/dist/bridge/server.js +71 -0
  17. package/dist/bridge/server.js.map +1 -0
  18. package/dist/display/format.d.ts.map +1 -1
  19. package/dist/display/format.js +28 -3
  20. package/dist/display/format.js.map +1 -1
  21. package/dist/engine/pipeline.d.ts +27 -0
  22. package/dist/engine/pipeline.d.ts.map +1 -0
  23. package/dist/engine/pipeline.js +304 -0
  24. package/dist/engine/pipeline.js.map +1 -0
  25. package/dist/engine/roller.d.ts +3 -0
  26. package/dist/engine/roller.d.ts.map +1 -1
  27. package/dist/engine/roller.js +82 -125
  28. package/dist/engine/roller.js.map +1 -1
  29. package/dist/index.d.ts +9 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +9 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/mcp/server.d.ts +3 -0
  34. package/dist/mcp/server.d.ts.map +1 -0
  35. package/dist/mcp/server.js +182 -0
  36. package/dist/mcp/server.js.map +1 -0
  37. package/dist/mcp/tools.d.ts +12 -0
  38. package/dist/mcp/tools.d.ts.map +1 -0
  39. package/dist/mcp/tools.js +106 -0
  40. package/dist/mcp/tools.js.map +1 -0
  41. package/dist/parser/ast.d.ts +7 -1
  42. package/dist/parser/ast.d.ts.map +1 -1
  43. package/dist/parser/lexer.d.ts.map +1 -1
  44. package/dist/parser/lexer.js +138 -45
  45. package/dist/parser/lexer.js.map +1 -1
  46. package/dist/parser/parser.d.ts.map +1 -1
  47. package/dist/parser/parser.js +107 -15
  48. package/dist/parser/parser.js.map +1 -1
  49. package/dist/parser/tokens.d.ts +14 -0
  50. package/dist/parser/tokens.d.ts.map +1 -1
  51. package/dist/parser/tokens.js +22 -0
  52. package/dist/parser/tokens.js.map +1 -1
  53. package/dist/tables/conditions.d.ts +7 -0
  54. package/dist/tables/conditions.d.ts.map +1 -0
  55. package/dist/tables/conditions.js +65 -0
  56. package/dist/tables/conditions.js.map +1 -0
  57. package/dist/tables/engine.d.ts +10 -0
  58. package/dist/tables/engine.d.ts.map +1 -0
  59. package/dist/tables/engine.js +147 -0
  60. package/dist/tables/engine.js.map +1 -0
  61. package/dist/tables/schema.d.ts +89 -0
  62. package/dist/tables/schema.d.ts.map +1 -0
  63. package/dist/tables/schema.js +3 -0
  64. package/dist/tables/schema.js.map +1 -0
  65. package/dist/tables/validate.d.ts +4 -0
  66. package/dist/tables/validate.d.ts.map +1 -0
  67. package/dist/tables/validate.js +98 -0
  68. package/dist/tables/validate.js.map +1 -0
  69. package/package.json +12 -2
@@ -4,11 +4,14 @@ export interface DieResult {
4
4
  value: number;
5
5
  kept: boolean;
6
6
  exploded: boolean;
7
+ rerolledFrom?: number;
8
+ critical?: "success" | "failure";
7
9
  }
8
10
  export interface DiceGroupResult {
9
11
  expression: string;
10
12
  dice: DieResult[];
11
13
  total: number;
14
+ resultMode: "sum" | "success_count";
12
15
  }
13
16
  export interface RollResult {
14
17
  expression: string;
@@ -1 +1 @@
1
- {"version":3,"file":"roller.d.ts","sourceRoot":"","sources":["../../src/engine/roller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqC,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAiJD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAE,KAAiB,GAAG,UAAU,CAsCzE"}
1
+ {"version":3,"file":"roller.d.ts","sourceRoot":"","sources":["../../src/engine/roller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAuB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,GAAG,eAAe,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AA6FD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAE,KAAiB,GAAG,UAAU,CAsCzE"}
@@ -1,135 +1,92 @@
1
1
  import { cryptoRng } from "./random.js";
2
- const MAX_EXPLOSIONS = 100;
3
- function resolveSides(sides) {
4
- if (sides === "%")
5
- return 100;
6
- if (sides === "F")
7
- return 3; // internal: we roll 0-2 and map to -1,0,+1
8
- return sides;
2
+ import { runPipeline } from "./pipeline.js";
3
+ function pipelineDieToDieResult(d) {
4
+ const result = {
5
+ value: d.value,
6
+ kept: d.kept,
7
+ exploded: d.exploded,
8
+ };
9
+ if (d.rerolledFrom !== undefined)
10
+ result.rerolledFrom = d.rerolledFrom;
11
+ if (d.critical !== undefined)
12
+ result.critical = d.critical;
13
+ return result;
9
14
  }
10
- function rollSingleDie(sides, rng) {
11
- if (sides === "F") {
12
- return rng(0, 2) - 1; // -1, 0, +1
13
- }
14
- const max = sides === "%" ? 100 : sides;
15
- return rng(1, max);
16
- }
17
- function rollDiceGroup(node, rng) {
18
- const maxSide = resolveSides(node.sides);
19
- const isFate = node.sides === "F";
20
- // Determine explosion settings
21
- const explodeMod = node.modifiers.find((m) => m.kind === "explode");
22
- const explodeThreshold = explodeMod
23
- ? explodeMod.value ?? (isFate ? undefined : maxSide)
24
- : undefined;
25
- // Roll initial dice
26
- const rawRolls = [];
27
- for (let i = 0; i < node.count; i++) {
28
- let roll = rollSingleDie(node.sides, rng);
29
- rawRolls.push(roll);
30
- // Handle exploding
31
- if (explodeThreshold !== undefined && !isFate) {
32
- let explosions = 0;
33
- while (roll >= explodeThreshold && explosions < MAX_EXPLOSIONS) {
34
- roll = rollSingleDie(node.sides, rng);
35
- rawRolls.push(roll);
36
- explosions++;
37
- }
38
- }
39
- }
40
- // Build die results (all kept initially)
41
- const dice = rawRolls.map((value) => ({
42
- value,
43
- kept: true,
44
- exploded: false,
45
- }));
46
- // Mark exploded dice
47
- if (explodeThreshold !== undefined && !isFate) {
48
- let dieIndex = 0;
49
- for (let i = 0; i < node.count; i++) {
50
- // Skip the initial die
51
- dieIndex++;
52
- // Mark subsequent exploded dice
53
- while (dieIndex < dice.length &&
54
- dice[dieIndex - 1].value >= explodeThreshold) {
55
- dice[dieIndex].exploded = true;
56
- dieIndex++;
57
- }
58
- }
59
- }
60
- // Apply keep/drop modifiers
61
- for (const mod of node.modifiers) {
62
- if (mod.kind === "explode")
63
- continue;
64
- applyKeepDrop(dice, mod);
65
- }
66
- const total = dice.filter((d) => d.kept).reduce((sum, d) => sum + d.value, 0);
67
- // Build expression string
15
+ function buildExpression(node) {
68
16
  let expr = `${node.count}d${node.sides === "%" ? "%" : node.sides === "F" ? "F" : node.sides}`;
69
17
  for (const mod of node.modifiers) {
70
- if (mod.kind === "explode") {
71
- expr += "!";
72
- if (mod.value !== undefined)
73
- expr += `>${mod.value}`;
74
- }
75
- else {
76
- expr += mod.kind;
77
- if (mod.value !== undefined)
78
- expr += mod.value;
18
+ switch (mod.kind) {
19
+ case "explode":
20
+ expr += "!";
21
+ if (mod.compare)
22
+ expr += `${mod.compare.operator}${mod.compare.value}`;
23
+ break;
24
+ case "compound":
25
+ expr += "!!";
26
+ if (mod.compare)
27
+ expr += `${mod.compare.operator}${mod.compare.value}`;
28
+ break;
29
+ case "penetrate":
30
+ expr += "!p";
31
+ if (mod.compare)
32
+ expr += `${mod.compare.operator}${mod.compare.value}`;
33
+ break;
34
+ case "reroll":
35
+ expr += "r";
36
+ if (mod.compare)
37
+ expr += `${mod.compare.operator}${mod.compare.value}`;
38
+ break;
39
+ case "reroll_once":
40
+ expr += "ro";
41
+ if (mod.compare)
42
+ expr += `${mod.compare.operator}${mod.compare.value}`;
43
+ break;
44
+ case "cs_count":
45
+ expr += "cs";
46
+ if (mod.compare)
47
+ expr += `${mod.compare.operator}${mod.compare.value}`;
48
+ break;
49
+ case "cf_count":
50
+ expr += "f";
51
+ if (mod.compare)
52
+ expr += `${mod.compare.operator}${mod.compare.value}`;
53
+ break;
54
+ case "cs_mark":
55
+ expr += "cs";
56
+ break;
57
+ case "cf_mark":
58
+ expr += "cf";
59
+ break;
60
+ case "min":
61
+ expr += `min${mod.value}`;
62
+ break;
63
+ case "max":
64
+ expr += `max${mod.value}`;
65
+ break;
66
+ case "sort_asc":
67
+ expr += "sa";
68
+ break;
69
+ case "sort_desc":
70
+ expr += "sd";
71
+ break;
72
+ default:
73
+ // kh, kl, dh, dl
74
+ expr += mod.kind;
75
+ if (mod.value !== undefined)
76
+ expr += mod.value;
79
77
  }
80
78
  }
81
- return { expression: expr, dice, total };
79
+ return expr;
82
80
  }
83
- function applyKeepDrop(dice, mod) {
84
- const n = mod.value ?? 1;
85
- const keptDice = dice.filter((d) => d.kept);
86
- // Sort by value to determine which to keep/drop
87
- const sorted = [...keptDice].sort((a, b) => a.value - b.value);
88
- switch (mod.kind) {
89
- case "kh": {
90
- // Keep highest N — drop everything else
91
- const threshold = sorted.length - n;
92
- let dropped = 0;
93
- for (const d of sorted) {
94
- if (dropped < threshold) {
95
- d.kept = false;
96
- dropped++;
97
- }
98
- }
99
- break;
100
- }
101
- case "kl": {
102
- // Keep lowest N — drop everything else
103
- let kept = 0;
104
- for (const d of sorted) {
105
- if (kept < n) {
106
- kept++;
107
- }
108
- else {
109
- d.kept = false;
110
- }
111
- }
112
- break;
113
- }
114
- case "dh": {
115
- // Drop highest N
116
- let dropped = 0;
117
- for (let i = sorted.length - 1; i >= 0 && dropped < n; i--) {
118
- sorted[i].kept = false;
119
- dropped++;
120
- }
121
- break;
122
- }
123
- case "dl": {
124
- // Drop lowest N
125
- let dropped = 0;
126
- for (let i = 0; i < sorted.length && dropped < n; i++) {
127
- sorted[i].kept = false;
128
- dropped++;
129
- }
130
- break;
131
- }
132
- }
81
+ function rollDiceGroup(node, rng) {
82
+ const resultMode = node.resultMode ?? "sum";
83
+ const pipeline = runPipeline(node.count, node.sides, node.modifiers, rng, resultMode);
84
+ return {
85
+ expression: buildExpression(node),
86
+ dice: pipeline.dice.map(pipelineDieToDieResult),
87
+ total: pipeline.total,
88
+ resultMode: pipeline.resultMode,
89
+ };
133
90
  }
134
91
  export function evaluate(ast, rng = cryptoRng) {
135
92
  const groups = [];
@@ -1 +1 @@
1
- {"version":3,"file":"roller.js","sourceRoot":"","sources":["../../src/engine/roller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roller.js","sourceRoot":"","sources":["../../src/engine/roller.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,14 @@
1
1
  export { parse, ParseError } from "./parser/parser.js";
2
2
  export { tokenize, LexerError } from "./parser/lexer.js";
3
- export type { ASTNode, DiceNode, NumberNode, BinaryOpNode, UnaryMinusNode, DiceModifier, DiceSides } from "./parser/ast.js";
3
+ export type { ASTNode, DiceNode, NumberNode, BinaryOpNode, UnaryMinusNode, DiceModifier, DiceSides, ComparePoint } from "./parser/ast.js";
4
4
  export { TokenType } from "./parser/tokens.js";
5
5
  export type { Token } from "./parser/tokens.js";
6
6
  export { evaluate } from "./engine/roller.js";
7
7
  export type { RollResult, DiceGroupResult, DieResult } from "./engine/roller.js";
8
8
  export { cryptoRng, seededRng } from "./engine/random.js";
9
9
  export type { RngFn } from "./engine/random.js";
10
+ export { runPipeline, matchesCompare } from "./engine/pipeline.js";
11
+ export type { PipelineDie, PipelineResult } from "./engine/pipeline.js";
10
12
  export { computeDistribution } from "./analyze/distribution.js";
11
13
  export type { Distribution } from "./analyze/distribution.js";
12
14
  export { computeStats, probabilityAtLeast } from "./analyze/stats.js";
@@ -14,6 +16,12 @@ export type { DistributionStats } from "./analyze/stats.js";
14
16
  export { monteCarloDistribution } from "./analyze/montecarlo.js";
15
17
  export { rollLootTable, validateLootTables } from "./loot/table.js";
16
18
  export type { LootTable, LootItem, LootDrop, LootTableCollection } from "./loot/table.js";
19
+ export { rollGameTable, rollMultiple, convertLootToGameTable } from "./tables/engine.js";
20
+ export { validateGameTables } from "./tables/validate.js";
21
+ export { evaluateCondition, filterEligibleEntries } from "./tables/conditions.js";
22
+ export type { GameTable, GameTableCollection, TableEntry, TableResult, TableContext, TableCondition, TableKind, CompareCondition, NatCondition, TagCondition, ContextCondition, } from "./tables/schema.js";
23
+ export { BridgeHandler } from "./bridge/handler.js";
24
+ export type { JsonRpcRequest, JsonRpcResponse, JsonRpcError, BridgeMethod, } from "./bridge/protocol.js";
17
25
  import type { RollResult } from "./engine/roller.js";
18
26
  import type { RngFn } from "./engine/random.js";
19
27
  /** Roll a dice expression and return the result. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5H,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAO1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,oDAAoD;AACpD,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAKhE;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM;;;iCAOT,MAAM;EAEtC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1I,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG1F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAClF,YAAY,EACV,SAAS,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,EACvD,YAAY,EAAE,cAAc,EAAE,SAAS,EACvC,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,GAC/D,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,GAC5D,MAAM,sBAAsB,CAAC;AAO9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,oDAAoD;AACpD,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAKhE;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM;;;iCAOT,MAAM;EAEtC"}
package/dist/index.js CHANGED
@@ -5,12 +5,20 @@ export { TokenType } from "./parser/tokens.js";
5
5
  // Engine
6
6
  export { evaluate } from "./engine/roller.js";
7
7
  export { cryptoRng, seededRng } from "./engine/random.js";
8
+ // Pipeline
9
+ export { runPipeline, matchesCompare } from "./engine/pipeline.js";
8
10
  // Analysis
9
11
  export { computeDistribution } from "./analyze/distribution.js";
10
12
  export { computeStats, probabilityAtLeast } from "./analyze/stats.js";
11
13
  export { monteCarloDistribution } from "./analyze/montecarlo.js";
12
- // Loot
14
+ // Loot (V1 — unchanged)
13
15
  export { rollLootTable, validateLootTables } from "./loot/table.js";
16
+ // Game Tables (V2)
17
+ export { rollGameTable, rollMultiple, convertLootToGameTable } from "./tables/engine.js";
18
+ export { validateGameTables } from "./tables/validate.js";
19
+ export { evaluateCondition, filterEligibleEntries } from "./tables/conditions.js";
20
+ // Bridge
21
+ export { BridgeHandler } from "./bridge/handler.js";
14
22
  // Convenience functions
15
23
  import { parse as _parse } from "./parser/parser.js";
16
24
  import { evaluate as _evaluate } from "./engine/roller.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,SAAS;AACT,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG1D,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO;AACP,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvG,oDAAoD;AACpD,MAAM,UAAU,IAAI,CAAC,UAAkB,EAAE,GAAW;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CAAC,UAAkB;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;QACL,YAAY,EAAE,IAAI;QAClB,KAAK;QACL,kBAAkB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;KACnE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,SAAS;AACT,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG1D,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGnE,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,wBAAwB;AACxB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAOlF,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKpD,wBAAwB;AACxB,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvG,oDAAoD;AACpD,MAAM,UAAU,IAAI,CAAC,UAAkB,EAAE,GAAW;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CAAC,UAAkB;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;QACL,YAAY,EAAE,IAAI;QAClB,KAAK;QACL,kBAAkB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;KACnE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":""}
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Roll MCP Server — Model Context Protocol server for the Roll dice engine.
4
+ * Communicates via stdio using JSON-RPC 2.0 (MCP transport).
5
+ */
6
+ import { createInterface } from "node:readline";
7
+ import { TOOLS } from "./tools.js";
8
+ import { parse } from "../parser/parser.js";
9
+ import { evaluate } from "../engine/roller.js";
10
+ import { computeDistribution } from "../analyze/distribution.js";
11
+ import { computeStats, probabilityAtLeast } from "../analyze/stats.js";
12
+ import { seededRng, cryptoRng } from "../engine/random.js";
13
+ import { rollGameTable } from "../tables/engine.js";
14
+ // ─── Server info ─────────────────────────────────────────────────────────────
15
+ const SERVER_INFO = {
16
+ name: "roll",
17
+ version: "2.0.0",
18
+ };
19
+ const CAPABILITIES = {
20
+ tools: {},
21
+ };
22
+ // ─── Tool handlers ───────────────────────────────────────────────────────────
23
+ function handleToolCall(name, args) {
24
+ switch (name) {
25
+ case "roll_dice": {
26
+ const expression = args.expression;
27
+ const times = args.times ?? 1;
28
+ const rng = args.seed !== undefined ? seededRng(args.seed) : cryptoRng;
29
+ const results = [];
30
+ for (let i = 0; i < times; i++) {
31
+ const ast = parse(expression);
32
+ const result = evaluate(ast, rng);
33
+ result.expression = expression;
34
+ results.push(result);
35
+ }
36
+ return times === 1 ? results[0] : results;
37
+ }
38
+ case "analyze_dice": {
39
+ const expression = args.expression;
40
+ const ast = parse(expression);
41
+ const dist = computeDistribution(ast);
42
+ const stats = computeStats(dist);
43
+ const distribution = [...dist.entries()].sort((a, b) => a[0] - b[0]);
44
+ const result = { stats, distribution };
45
+ if (args.at_least !== undefined) {
46
+ result.atLeastProbability = probabilityAtLeast(dist, args.at_least);
47
+ result.atLeastTarget = args.at_least;
48
+ }
49
+ return result;
50
+ }
51
+ case "compare_dice": {
52
+ const exprA = args.expression_a;
53
+ const exprB = args.expression_b;
54
+ const analyze = (expr) => {
55
+ const ast = parse(expr);
56
+ const dist = computeDistribution(ast);
57
+ return { expression: expr, stats: computeStats(dist) };
58
+ };
59
+ return [analyze(exprA), analyze(exprB)];
60
+ }
61
+ case "roll_table": {
62
+ const tableName = args.table_name;
63
+ const collection = args.collection;
64
+ const context = (args.context ?? {});
65
+ const count = args.count ?? 1;
66
+ const results = [];
67
+ for (let i = 0; i < count; i++) {
68
+ results.push(...rollGameTable(collection, tableName, context));
69
+ }
70
+ return results;
71
+ }
72
+ case "query_table": {
73
+ const tableName = args.table_name;
74
+ const collection = args.collection;
75
+ const table = collection.tables.find((t) => t.table === tableName);
76
+ if (!table)
77
+ throw new Error(`Table not found: ${tableName}`);
78
+ return table;
79
+ }
80
+ default:
81
+ throw new Error(`Unknown tool: ${name}`);
82
+ }
83
+ }
84
+ // ─── MCP dispatch ────────────────────────────────────────────────────────────
85
+ function handleRequest(request) {
86
+ const { id, method, params } = request;
87
+ try {
88
+ switch (method) {
89
+ case "initialize":
90
+ return {
91
+ jsonrpc: "2.0",
92
+ id,
93
+ result: {
94
+ protocolVersion: "2024-11-05",
95
+ serverInfo: SERVER_INFO,
96
+ capabilities: CAPABILITIES,
97
+ },
98
+ };
99
+ case "notifications/initialized":
100
+ // Client acknowledgment — no response needed for notifications
101
+ // but since we got an id, respond with empty result
102
+ return { jsonrpc: "2.0", id, result: {} };
103
+ case "tools/list":
104
+ return {
105
+ jsonrpc: "2.0",
106
+ id,
107
+ result: { tools: TOOLS },
108
+ };
109
+ case "tools/call": {
110
+ const toolName = params?.name;
111
+ const toolArgs = (params?.arguments ?? {});
112
+ if (!toolName) {
113
+ return {
114
+ jsonrpc: "2.0",
115
+ id,
116
+ error: { code: -32602, message: "Missing tool name" },
117
+ };
118
+ }
119
+ const toolResult = handleToolCall(toolName, toolArgs);
120
+ return {
121
+ jsonrpc: "2.0",
122
+ id,
123
+ result: {
124
+ content: [
125
+ {
126
+ type: "text",
127
+ text: JSON.stringify(toolResult, null, 2),
128
+ },
129
+ ],
130
+ },
131
+ };
132
+ }
133
+ default:
134
+ return {
135
+ jsonrpc: "2.0",
136
+ id,
137
+ error: { code: -32601, message: `Unknown method: ${method}` },
138
+ };
139
+ }
140
+ }
141
+ catch (e) {
142
+ const message = e instanceof Error ? e.message : String(e);
143
+ return {
144
+ jsonrpc: "2.0",
145
+ id,
146
+ result: {
147
+ content: [{ type: "text", text: `Error: ${message}` }],
148
+ isError: true,
149
+ },
150
+ };
151
+ }
152
+ }
153
+ // ─── Stdio transport ─────────────────────────────────────────────────────────
154
+ function main() {
155
+ const rl = createInterface({ input: process.stdin, terminal: false });
156
+ rl.on("line", (line) => {
157
+ const trimmed = line.trim();
158
+ if (!trimmed)
159
+ return;
160
+ let request;
161
+ try {
162
+ request = JSON.parse(trimmed);
163
+ }
164
+ catch {
165
+ const res = {
166
+ jsonrpc: "2.0",
167
+ id: 0,
168
+ error: { code: -32700, message: "Parse error" },
169
+ };
170
+ process.stdout.write(JSON.stringify(res) + "\n");
171
+ return;
172
+ }
173
+ // Skip notifications (no id)
174
+ if (request.id === undefined || request.id === null)
175
+ return;
176
+ const response = handleRequest(request);
177
+ process.stdout.write(JSON.stringify(response) + "\n");
178
+ });
179
+ rl.on("close", () => process.exit(0));
180
+ }
181
+ main();
182
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** MCP tool definitions for the Roll dice engine. */
2
+ export interface McpToolDefinition {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: Record<string, unknown>;
8
+ required?: string[];
9
+ };
10
+ }
11
+ export declare const TOOLS: McpToolDefinition[];
12
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,KAAK,EAAE,iBAAiB,EA4GpC,CAAC"}