@mastra/factory 0.13.0-alpha.12 → 0.13.0-alpha.14

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 (156) hide show
  1. package/README.md +93 -10
  2. package/dist/boards/define-board.d.ts +36 -2
  3. package/dist/boards/define-board.d.ts.map +1 -1
  4. package/dist/boards/define-board.js +51 -1
  5. package/dist/boards/define-board.js.map +1 -1
  6. package/dist/boards/index.d.ts +3 -1
  7. package/dist/boards/index.d.ts.map +1 -1
  8. package/dist/boards/index.js +2 -1
  9. package/dist/boards/index.js.map +1 -1
  10. package/dist/boards/review.d.ts.map +1 -1
  11. package/dist/boards/review.js +17 -4
  12. package/dist/boards/review.js.map +1 -1
  13. package/dist/boards/semantics.d.ts +28 -0
  14. package/dist/boards/semantics.d.ts.map +1 -0
  15. package/dist/boards/semantics.js +41 -0
  16. package/dist/boards/semantics.js.map +1 -0
  17. package/dist/boards/work-tool-rules.d.ts +8 -0
  18. package/dist/boards/work-tool-rules.d.ts.map +1 -0
  19. package/dist/boards/work-tool-rules.js +20 -0
  20. package/dist/boards/work-tool-rules.js.map +1 -0
  21. package/dist/boards/work.d.ts.map +1 -1
  22. package/dist/boards/work.js +14 -1
  23. package/dist/boards/work.js.map +1 -1
  24. package/dist/factory.d.ts +5 -6
  25. package/dist/factory.d.ts.map +1 -1
  26. package/dist/factory.js +19 -11
  27. package/dist/factory.js.map +1 -1
  28. package/dist/integrations/base.d.ts +7 -4
  29. package/dist/integrations/base.d.ts.map +1 -1
  30. package/dist/integrations/github/issue-reconciler.d.ts.map +1 -1
  31. package/dist/integrations/github/issue-reconciler.js +4 -3
  32. package/dist/integrations/github/issue-reconciler.js.map +1 -1
  33. package/dist/integrations/github/rules.d.ts +3 -2
  34. package/dist/integrations/github/rules.d.ts.map +1 -1
  35. package/dist/integrations/github/rules.js +11 -10
  36. package/dist/integrations/github/rules.js.map +1 -1
  37. package/dist/integrations/github/sandbox.d.ts +6 -3
  38. package/dist/integrations/github/sandbox.d.ts.map +1 -1
  39. package/dist/integrations/github/sandbox.js +21 -2
  40. package/dist/integrations/github/sandbox.js.map +1 -1
  41. package/dist/integrations/issue-reconciler.d.ts +2 -0
  42. package/dist/integrations/issue-reconciler.d.ts.map +1 -1
  43. package/dist/integrations/issue-reconciler.js +1 -3
  44. package/dist/integrations/issue-reconciler.js.map +1 -1
  45. package/dist/integrations/linear/issue-reconciler.d.ts.map +1 -1
  46. package/dist/integrations/linear/issue-reconciler.js +8 -4
  47. package/dist/integrations/linear/issue-reconciler.js.map +1 -1
  48. package/dist/integrations/linear/rules.d.ts +1 -2
  49. package/dist/integrations/linear/rules.d.ts.map +1 -1
  50. package/dist/integrations/linear/rules.js +5 -5
  51. package/dist/integrations/linear/rules.js.map +1 -1
  52. package/dist/integrations/platform/api-client.d.ts.map +1 -1
  53. package/dist/integrations/platform/api-client.js +25 -4
  54. package/dist/integrations/platform/api-client.js.map +1 -1
  55. package/dist/integrations/platform/linear/integration.js +1 -1
  56. package/dist/integrations/platform/linear/integration.js.map +1 -1
  57. package/dist/integrations/slack/emoji-shortcodes.generated.d.ts +8 -0
  58. package/dist/integrations/slack/emoji-shortcodes.generated.d.ts.map +1 -0
  59. package/dist/integrations/slack/emoji-shortcodes.generated.js +1985 -0
  60. package/dist/integrations/slack/emoji-shortcodes.generated.js.map +1 -0
  61. package/dist/integrations/slack/emoji.d.ts +3 -0
  62. package/dist/integrations/slack/emoji.d.ts.map +1 -0
  63. package/dist/integrations/slack/emoji.js +12 -0
  64. package/dist/integrations/slack/emoji.js.map +1 -0
  65. package/dist/integrations/slack/integration.js +1 -1
  66. package/dist/integrations/slack/integration.js.map +1 -1
  67. package/dist/integrations/slack/slack.d.ts.map +1 -1
  68. package/dist/integrations/slack/slack.js +16 -2
  69. package/dist/integrations/slack/slack.js.map +1 -1
  70. package/dist/routes/attention.d.ts.map +1 -1
  71. package/dist/routes/attention.js +31 -82
  72. package/dist/routes/attention.js.map +1 -1
  73. package/dist/routes/contracts.d.ts +601 -0
  74. package/dist/routes/contracts.d.ts.map +1 -0
  75. package/dist/routes/contracts.js +450 -0
  76. package/dist/routes/contracts.js.map +1 -0
  77. package/dist/routes/projects.d.ts.map +1 -1
  78. package/dist/routes/projects.js +26 -76
  79. package/dist/routes/projects.js.map +1 -1
  80. package/dist/routes/supervisor.d.ts +2 -0
  81. package/dist/routes/supervisor.d.ts.map +1 -1
  82. package/dist/routes/supervisor.js +7 -6
  83. package/dist/routes/supervisor.js.map +1 -1
  84. package/dist/routes/surface.d.ts +4 -4
  85. package/dist/routes/surface.d.ts.map +1 -1
  86. package/dist/routes/surface.js +14 -9
  87. package/dist/routes/surface.js.map +1 -1
  88. package/dist/routes/work-items.d.ts +1 -1
  89. package/dist/routes/work-items.d.ts.map +1 -1
  90. package/dist/routes/work-items.js +103 -244
  91. package/dist/routes/work-items.js.map +1 -1
  92. package/dist/rules/dispatcher.d.ts +3 -0
  93. package/dist/rules/dispatcher.d.ts.map +1 -1
  94. package/dist/rules/dispatcher.js +37 -6
  95. package/dist/rules/dispatcher.js.map +1 -1
  96. package/dist/rules/index.d.ts +4 -5
  97. package/dist/rules/index.d.ts.map +1 -1
  98. package/dist/rules/index.js +3 -4
  99. package/dist/rules/processor.d.ts +3 -3
  100. package/dist/rules/processor.d.ts.map +1 -1
  101. package/dist/rules/processor.js +10 -12
  102. package/dist/rules/processor.js.map +1 -1
  103. package/dist/rules/resolve.d.ts +1 -3
  104. package/dist/rules/resolve.d.ts.map +1 -1
  105. package/dist/rules/resolve.js +1 -4
  106. package/dist/rules/resolve.js.map +1 -1
  107. package/dist/rules/start-coordinator.d.ts.map +1 -1
  108. package/dist/rules/start-coordinator.js +3 -1
  109. package/dist/rules/start-coordinator.js.map +1 -1
  110. package/dist/rules/tools.d.ts.map +1 -1
  111. package/dist/rules/tools.js +3 -4
  112. package/dist/rules/tools.js.map +1 -1
  113. package/dist/rules/transition-service.d.ts +7 -7
  114. package/dist/rules/transition-service.d.ts.map +1 -1
  115. package/dist/rules/transition-service.js +20 -25
  116. package/dist/rules/transition-service.js.map +1 -1
  117. package/dist/rules/types.d.ts +1 -11
  118. package/dist/rules/types.d.ts.map +1 -1
  119. package/dist/rules/types.js.map +1 -1
  120. package/dist/rules/validation.d.ts +7 -2
  121. package/dist/rules/validation.d.ts.map +1 -1
  122. package/dist/rules/validation.js +9 -15
  123. package/dist/rules/validation.js.map +1 -1
  124. package/dist/storage/domains/work-items/base.d.ts +9 -3
  125. package/dist/storage/domains/work-items/base.d.ts.map +1 -1
  126. package/dist/storage/domains/work-items/base.js +13 -17
  127. package/dist/storage/domains/work-items/base.js.map +1 -1
  128. package/dist/supervisor/health-worker.d.ts +2 -0
  129. package/dist/supervisor/health-worker.d.ts.map +1 -1
  130. package/dist/supervisor/health-worker.js +3 -1
  131. package/dist/supervisor/health-worker.js.map +1 -1
  132. package/dist/supervisor/health.d.ts +10 -12
  133. package/dist/supervisor/health.d.ts.map +1 -1
  134. package/dist/supervisor/health.js +11 -40
  135. package/dist/supervisor/health.js.map +1 -1
  136. package/dist/supervisor/instructions.d.ts +1 -1
  137. package/dist/supervisor/instructions.d.ts.map +1 -1
  138. package/dist/supervisor/instructions.js +10 -8
  139. package/dist/supervisor/instructions.js.map +1 -1
  140. package/dist/supervisor/read-tools.d.ts +2 -0
  141. package/dist/supervisor/read-tools.d.ts.map +1 -1
  142. package/dist/supervisor/read-tools.js +2 -2
  143. package/dist/supervisor/read-tools.js.map +1 -1
  144. package/dist/work-item-branch.d.ts +2 -0
  145. package/dist/work-item-branch.d.ts.map +1 -1
  146. package/dist/work-item-branch.js +6 -1
  147. package/dist/work-item-branch.js.map +1 -1
  148. package/dist/workspace.d.ts.map +1 -1
  149. package/dist/workspace.js +3 -1
  150. package/dist/workspace.js.map +1 -1
  151. package/factory-skills/configure-factory-rules/SKILL.md +18 -10
  152. package/package.json +9 -8
  153. package/dist/rules/defaults.d.ts +0 -9
  154. package/dist/rules/defaults.d.ts.map +0 -1
  155. package/dist/rules/defaults.js +0 -50
  156. package/dist/rules/defaults.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/factory",
3
- "version": "0.13.0-alpha.12",
3
+ "version": "0.13.0-alpha.14",
4
4
  "description": "Mastra Software Factory module: the server core behind the Mastra Software Factory — storage domains, integrations, and surfaces for agent-powered software delivery",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -56,11 +56,11 @@
56
56
  "@octokit/rest": "^22.0.1",
57
57
  "hono": "^4.12.8",
58
58
  "zod": "^4.3.6",
59
- "@mastra/auth-workos": "1.6.5",
60
59
  "@mastra/auth-studio": "1.3.5",
61
- "@mastra/code-sdk": "1.7.0-alpha.9",
62
- "@mastra/core": "1.65.0-alpha.8",
63
- "@mastra/slack": "1.6.3"
60
+ "@mastra/auth-workos": "1.6.5",
61
+ "@mastra/code-sdk": "1.7.0-alpha.11",
62
+ "@mastra/slack": "1.6.3",
63
+ "@mastra/core": "1.65.0-alpha.10"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@types/node": "22.20.1",
@@ -69,17 +69,18 @@
69
69
  "typescript": "^6.0.3",
70
70
  "typescript-eslint": "^8.57.0",
71
71
  "vitest": "4.1.10",
72
+ "@internal/lint": "0.0.130",
72
73
  "@mastra/libsql": "1.22.4-alpha.0",
73
- "@internal/types-builder": "0.0.105",
74
- "@mastra/pg": "1.23.0-alpha.3",
74
+ "@mastra/pg": "1.23.0-alpha.4",
75
75
  "@internal/workspace": "0.0.2",
76
- "@internal/lint": "0.0.130"
76
+ "@internal/types-builder": "0.0.105"
77
77
  },
78
78
  "engines": {
79
79
  "node": ">=22.19.0"
80
80
  },
81
81
  "scripts": {
82
82
  "build:lib": "tsdown --silent --config tsdown.config.ts",
83
+ "generate:api-cli-route-metadata": "tsx scripts/generate-api-cli-route-metadata.ts",
83
84
  "smoke:dist": "node --input-type=module -e \"import('./dist/index.js').then(() => console.log('dist import ok')).catch(e => { console.error(e.message); process.exit(1); })\"",
84
85
  "check": "tsc --noEmit",
85
86
  "test": "vitest run",
@@ -1,9 +0,0 @@
1
- import type { FactoryRules, FactoryRulesOverrides } from './types.js';
2
- export declare const DEFAULT_FACTORY_RULE_VERSION = "factory-default-v1";
3
- export declare function mergeFactoryRuleOverrides(base: FactoryRulesOverrides, overrides?: FactoryRulesOverrides): Omit<FactoryRules, 'version'>;
4
- export declare function defaultFactoryRules(input: {
5
- version: string;
6
- overrides?: FactoryRulesOverrides;
7
- }): FactoryRules;
8
- export declare function builtInFactoryRules(): FactoryRules;
9
- //# sourceMappingURL=defaults.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/rules/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAmDjE,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,qBAAqB,EAC3B,SAAS,GAAE,qBAA0B,GACpC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAI/B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,qBAAqB,CAAA;CAAE,GAAG,YAAY,CAW/G;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAElD"}
@@ -1,50 +0,0 @@
1
- import { FactoryRuleValidationError, assertFactoryRules } from "./validation.js";
2
- //#region src/rules/defaults.ts
3
- const DEFAULT_FACTORY_RULE_VERSION = "factory-default-v1";
4
- function resultContent(value) {
5
- if (typeof value === "string") return value;
6
- if (!value || typeof value !== "object" || Array.isArray(value)) return;
7
- const content = value.content;
8
- return typeof content === "string" ? content : void 0;
9
- }
10
- function advanceApprovedPlan(context) {
11
- if (context.result.status !== "success" || context.board !== "work" || context.item.stages.length !== 1 || context.item.stages[0] !== "planning" || context.actor.type !== "agent" || context.actor.role !== "plan" || !resultContent(context.result.value)?.startsWith("Plan approved.")) return;
12
- return {
13
- type: "transition",
14
- idempotencyKey: `${context.ingress.id}:approved-plan`,
15
- board: "work",
16
- stage: "execute"
17
- };
18
- }
19
- const BUILT_IN_DEFAULTS = { tools: { submit_plan: { onResult: advanceApprovedPlan } } };
20
- function mergeToolRules(base, overrides) {
21
- const result = {};
22
- for (const name of /* @__PURE__ */ new Set([...Object.keys(base ?? {}), ...Object.keys(overrides ?? {})])) {
23
- const baseLeaf = base?.[name];
24
- const overrideLeaf = overrides?.[name];
25
- result[name] = {
26
- ...baseLeaf && "onResult" in baseLeaf ? { onResult: baseLeaf.onResult } : {},
27
- ...overrideLeaf && "onResult" in overrideLeaf ? { onResult: overrideLeaf.onResult } : {}
28
- };
29
- }
30
- return result;
31
- }
32
- function mergeFactoryRuleOverrides(base, overrides = {}) {
33
- return { tools: mergeToolRules(base.tools, overrides.tools) };
34
- }
35
- function defaultFactoryRules(input) {
36
- if (typeof input?.version !== "string" || input.version.trim().length === 0) throw new FactoryRuleValidationError("Factory rule version is required.");
37
- const rules = {
38
- version: input.version.trim(),
39
- ...mergeFactoryRuleOverrides(BUILT_IN_DEFAULTS, input.overrides)
40
- };
41
- assertFactoryRules(rules);
42
- return rules;
43
- }
44
- function builtInFactoryRules() {
45
- return defaultFactoryRules({ version: DEFAULT_FACTORY_RULE_VERSION });
46
- }
47
- //#endregion
48
- export { DEFAULT_FACTORY_RULE_VERSION, builtInFactoryRules, defaultFactoryRules, mergeFactoryRuleOverrides };
49
-
50
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.js","names":[],"sources":["../../src/rules/defaults.ts"],"sourcesContent":["import type {\n FactoryRules,\n FactoryRulesOverrides,\n FactoryToolResultRuleContext,\n FactoryToolRuleLeaf,\n} from './types.js';\nimport { assertFactoryRules, FactoryRuleValidationError } from './validation.js';\n\nexport const DEFAULT_FACTORY_RULE_VERSION = 'factory-default-v1';\n\nfunction resultContent(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (!value || typeof value !== 'object' || Array.isArray(value)) return;\n const content = (value as { content?: unknown }).content;\n return typeof content === 'string' ? content : undefined;\n}\n\n// Interactive-session path only: factory-plan never calls submit_plan — it\n// advances planning → execute via factory_transition_work_item directly.\nfunction advanceApprovedPlan(context: FactoryToolResultRuleContext) {\n if (\n context.result.status !== 'success' ||\n context.board !== 'work' ||\n context.item.stages.length !== 1 ||\n context.item.stages[0] !== 'planning' ||\n context.actor.type !== 'agent' ||\n context.actor.role !== 'plan' ||\n !resultContent(context.result.value)?.startsWith('Plan approved.')\n ) {\n return;\n }\n return {\n type: 'transition',\n idempotencyKey: `${context.ingress.id}:approved-plan`,\n board: 'work',\n stage: 'execute',\n } as const;\n}\n\nconst BUILT_IN_DEFAULTS: FactoryRulesOverrides = {\n tools: { submit_plan: { onResult: advanceApprovedPlan } },\n};\n\nfunction mergeToolRules(\n base: Record<string, FactoryToolRuleLeaf> | undefined,\n overrides: Record<string, FactoryToolRuleLeaf> | undefined,\n): Record<string, FactoryToolRuleLeaf> {\n const result: Record<string, FactoryToolRuleLeaf> = {};\n for (const name of new Set([...Object.keys(base ?? {}), ...Object.keys(overrides ?? {})])) {\n const baseLeaf = base?.[name];\n const overrideLeaf = overrides?.[name];\n result[name] = {\n ...(baseLeaf && 'onResult' in baseLeaf ? { onResult: baseLeaf.onResult } : {}),\n ...(overrideLeaf && 'onResult' in overrideLeaf ? { onResult: overrideLeaf.onResult } : {}),\n };\n }\n return result;\n}\n\nexport function mergeFactoryRuleOverrides(\n base: FactoryRulesOverrides,\n overrides: FactoryRulesOverrides = {},\n): Omit<FactoryRules, 'version'> {\n return {\n tools: mergeToolRules(base.tools, overrides.tools),\n };\n}\n\nexport function defaultFactoryRules(input: { version: string; overrides?: FactoryRulesOverrides }): FactoryRules {\n if (typeof input?.version !== 'string' || input.version.trim().length === 0) {\n throw new FactoryRuleValidationError('Factory rule version is required.');\n }\n\n const rules: FactoryRules = {\n version: input.version.trim(),\n ...mergeFactoryRuleOverrides(BUILT_IN_DEFAULTS, input.overrides),\n };\n assertFactoryRules(rules);\n return rules;\n}\n\nexport function builtInFactoryRules(): FactoryRules {\n return defaultFactoryRules({ version: DEFAULT_FACTORY_RULE_VERSION });\n}\n"],"mappings":";;AAQA,MAAa,+BAA+B;AAE5C,SAAS,cAAc,OAAoC;CACzD,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;CACjE,MAAM,UAAW,MAAgC;CACjD,OAAO,OAAO,YAAY,WAAW,UAAU,KAAA;AACjD;AAIA,SAAS,oBAAoB,SAAuC;CAClE,IACE,QAAQ,OAAO,WAAW,aAC1B,QAAQ,UAAU,UAClB,QAAQ,KAAK,OAAO,WAAW,KAC/B,QAAQ,KAAK,OAAO,OAAO,cAC3B,QAAQ,MAAM,SAAS,WACvB,QAAQ,MAAM,SAAS,UACvB,CAAC,cAAc,QAAQ,OAAO,KAAK,CAAC,EAAE,WAAW,gBAAgB,GAEjE;CAEF,OAAO;EACL,MAAM;EACN,gBAAgB,GAAG,QAAQ,QAAQ,GAAG;EACtC,OAAO;EACP,OAAO;CACT;AACF;AAEA,MAAM,oBAA2C,EAC/C,OAAO,EAAE,aAAa,EAAE,UAAU,oBAAoB,EAAE,EAC1D;AAEA,SAAS,eACP,MACA,WACqC;CACrC,MAAM,SAA8C,CAAC;CACrD,KAAK,MAAM,wBAAQ,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,GAAG,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;EACzF,MAAM,WAAW,OAAO;EACxB,MAAM,eAAe,YAAY;EACjC,OAAO,QAAQ;GACb,GAAI,YAAY,cAAc,WAAW,EAAE,UAAU,SAAS,SAAS,IAAI,CAAC;GAC5E,GAAI,gBAAgB,cAAc,eAAe,EAAE,UAAU,aAAa,SAAS,IAAI,CAAC;EAC1F;CACF;CACA,OAAO;AACT;AAEA,SAAgB,0BACd,MACA,YAAmC,CAAC,GACL;CAC/B,OAAO,EACL,OAAO,eAAe,KAAK,OAAO,UAAU,KAAK,EACnD;AACF;AAEA,SAAgB,oBAAoB,OAA6E;CAC/G,IAAI,OAAO,OAAO,YAAY,YAAY,MAAM,QAAQ,KAAK,CAAC,CAAC,WAAW,GACxE,MAAM,IAAI,2BAA2B,mCAAmC;CAG1E,MAAM,QAAsB;EAC1B,SAAS,MAAM,QAAQ,KAAK;EAC5B,GAAG,0BAA0B,mBAAmB,MAAM,SAAS;CACjE;CACA,mBAAmB,KAAK;CACxB,OAAO;AACT;AAEA,SAAgB,sBAAoC;CAClD,OAAO,oBAAoB,EAAE,SAAS,6BAA6B,CAAC;AACtE"}