@holoscript/framework 6.0.3

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 (329) hide show
  1. package/ALL-test-results.json +1 -0
  2. package/CHANGELOG.md +8 -0
  3. package/LICENSE +21 -0
  4. package/ROADMAP.md +175 -0
  5. package/dist/AgentManifest-CB4xM-Ma.d.cts +704 -0
  6. package/dist/AgentManifest-CB4xM-Ma.d.ts +704 -0
  7. package/dist/BehaviorTree-BrBFECv5.d.cts +103 -0
  8. package/dist/BehaviorTree-BrBFECv5.d.ts +103 -0
  9. package/dist/InvisibleWallet-BB6tFvRA.d.cts +1732 -0
  10. package/dist/InvisibleWallet-rtRrBOA8.d.ts +1732 -0
  11. package/dist/OrchestratorAgent-BvWgf9uw.d.cts +798 -0
  12. package/dist/OrchestratorAgent-Q_CbVTmO.d.ts +798 -0
  13. package/dist/agents/index.cjs +4790 -0
  14. package/dist/agents/index.d.cts +1788 -0
  15. package/dist/agents/index.d.ts +1788 -0
  16. package/dist/agents/index.js +4695 -0
  17. package/dist/ai/index.cjs +5347 -0
  18. package/dist/ai/index.d.cts +1753 -0
  19. package/dist/ai/index.d.ts +1753 -0
  20. package/dist/ai/index.js +5244 -0
  21. package/dist/behavior.cjs +449 -0
  22. package/dist/behavior.d.cts +130 -0
  23. package/dist/behavior.d.ts +130 -0
  24. package/dist/behavior.js +407 -0
  25. package/dist/economy/index.cjs +3659 -0
  26. package/dist/economy/index.d.cts +747 -0
  27. package/dist/economy/index.d.ts +747 -0
  28. package/dist/economy/index.js +3617 -0
  29. package/dist/implementations-D9T3un9D.d.cts +236 -0
  30. package/dist/implementations-D9T3un9D.d.ts +236 -0
  31. package/dist/index.cjs +24550 -0
  32. package/dist/index.d.cts +1729 -0
  33. package/dist/index.d.ts +1729 -0
  34. package/dist/index.js +24277 -0
  35. package/dist/learning/index.cjs +219 -0
  36. package/dist/learning/index.d.cts +104 -0
  37. package/dist/learning/index.d.ts +104 -0
  38. package/dist/learning/index.js +189 -0
  39. package/dist/negotiation/index.cjs +970 -0
  40. package/dist/negotiation/index.d.cts +610 -0
  41. package/dist/negotiation/index.d.ts +610 -0
  42. package/dist/negotiation/index.js +931 -0
  43. package/dist/skills/index.cjs +1118 -0
  44. package/dist/skills/index.d.cts +289 -0
  45. package/dist/skills/index.d.ts +289 -0
  46. package/dist/skills/index.js +1079 -0
  47. package/dist/swarm/index.cjs +5268 -0
  48. package/dist/swarm/index.d.cts +2433 -0
  49. package/dist/swarm/index.d.ts +2433 -0
  50. package/dist/swarm/index.js +5221 -0
  51. package/dist/training/index.cjs +2745 -0
  52. package/dist/training/index.d.cts +1734 -0
  53. package/dist/training/index.d.ts +1734 -0
  54. package/dist/training/index.js +2687 -0
  55. package/extract-failures.js +10 -0
  56. package/package.json +82 -0
  57. package/src/__tests__/bounty-marketplace.test.ts +374 -0
  58. package/src/__tests__/delegation.test.ts +144 -0
  59. package/src/__tests__/distributed-claimer.test.ts +147 -0
  60. package/src/__tests__/done-log-audit.test.ts +342 -0
  61. package/src/__tests__/framework.test.ts +865 -0
  62. package/src/__tests__/goal-synthesizer.test.ts +236 -0
  63. package/src/__tests__/presence.test.ts +223 -0
  64. package/src/__tests__/protocol-agent.test.ts +254 -0
  65. package/src/__tests__/revenue-splitter.test.ts +114 -0
  66. package/src/__tests__/scenario-driven-todo.test.ts +197 -0
  67. package/src/__tests__/self-improve.test.ts +349 -0
  68. package/src/__tests__/service-lifecycle.test.ts +237 -0
  69. package/src/__tests__/skill-router.test.ts +121 -0
  70. package/src/agents/AgentManifest.ts +493 -0
  71. package/src/agents/AgentRegistry.ts +475 -0
  72. package/src/agents/AgentTypes.ts +585 -0
  73. package/src/agents/AgentWalletRegistry.ts +83 -0
  74. package/src/agents/AuthenticatedCRDT.ts +388 -0
  75. package/src/agents/CapabilityMatcher.ts +453 -0
  76. package/src/agents/CrossRealityHandoff.ts +305 -0
  77. package/src/agents/CulturalMemory.ts +454 -0
  78. package/src/agents/FederatedRegistryAdapter.ts +429 -0
  79. package/src/agents/NormEngine.ts +450 -0
  80. package/src/agents/OrchestratorAgent.ts +414 -0
  81. package/src/agents/SkillWorkflowEngine.ts +472 -0
  82. package/src/agents/TaskDelegationService.ts +551 -0
  83. package/src/agents/__tests__/AgentManifest.prod.test.ts +134 -0
  84. package/src/agents/__tests__/AgentManifest.test.ts +182 -0
  85. package/src/agents/__tests__/AgentModule.test.ts +864 -0
  86. package/src/agents/__tests__/AgentRegistry.prod.test.ts +125 -0
  87. package/src/agents/__tests__/AgentRegistry.test.ts +148 -0
  88. package/src/agents/__tests__/AgentTypes.test.ts +534 -0
  89. package/src/agents/__tests__/AgentWalletRegistry.test.ts +152 -0
  90. package/src/agents/__tests__/AuthenticatedCRDT.test.ts +558 -0
  91. package/src/agents/__tests__/CapabilityMatcher.prod.test.ts +117 -0
  92. package/src/agents/__tests__/CapabilityMatcher.test.ts +178 -0
  93. package/src/agents/__tests__/CrossRealityHandoff.test.ts +402 -0
  94. package/src/agents/__tests__/CulturalMemory.test.ts +200 -0
  95. package/src/agents/__tests__/FederatedRegistryAdapter.test.ts +409 -0
  96. package/src/agents/__tests__/NormEngine.test.ts +276 -0
  97. package/src/agents/__tests__/OrchestratorAgent.test.ts +182 -0
  98. package/src/agents/__tests__/SkillWorkflowEngine.test.ts +357 -0
  99. package/src/agents/__tests__/TaskDelegationService.test.ts +446 -0
  100. package/src/agents/index.ts +107 -0
  101. package/src/agents/spatial-comms/Layer1RealTime.ts +621 -0
  102. package/src/agents/spatial-comms/Layer2A2A.ts +661 -0
  103. package/src/agents/spatial-comms/Layer3MCP.ts +651 -0
  104. package/src/agents/spatial-comms/ProtocolTypes.ts +543 -0
  105. package/src/agents/spatial-comms/SpatialCommClient.ts +483 -0
  106. package/src/agents/spatial-comms/__tests__/performance-benchmark.test.ts +465 -0
  107. package/src/agents/spatial-comms/examples/multi-agent-world-creation.ts +409 -0
  108. package/src/agents/spatial-comms/index.ts +66 -0
  109. package/src/ai/AIAdapter.ts +313 -0
  110. package/src/ai/AICopilot.ts +331 -0
  111. package/src/ai/AIOutputValidator.ts +203 -0
  112. package/src/ai/BTNodes.ts +239 -0
  113. package/src/ai/BehaviorSelector.ts +135 -0
  114. package/src/ai/BehaviorTree.ts +153 -0
  115. package/src/ai/Blackboard.ts +165 -0
  116. package/src/ai/GenerationAnalytics.ts +461 -0
  117. package/src/ai/GenerationCache.ts +265 -0
  118. package/src/ai/GoalPlanner.ts +165 -0
  119. package/src/ai/HoloScriptGenerator.ts +580 -0
  120. package/src/ai/InfluenceMap.ts +180 -0
  121. package/src/ai/NavMesh.ts +168 -0
  122. package/src/ai/PerceptionSystem.ts +178 -0
  123. package/src/ai/PromptTemplates.ts +453 -0
  124. package/src/ai/SemanticSearchService.ts +80 -0
  125. package/src/ai/StateMachine.ts +196 -0
  126. package/src/ai/SteeringBehavior.ts +150 -0
  127. package/src/ai/SteeringBehaviors.ts +244 -0
  128. package/src/ai/TrainingDataGenerator.ts +1082 -0
  129. package/src/ai/UtilityAI.ts +145 -0
  130. package/src/ai/__tests__/AIAdapter.prod.test.ts +259 -0
  131. package/src/ai/__tests__/AIAdapter.test.ts +109 -0
  132. package/src/ai/__tests__/AICopilot.prod.test.ts +341 -0
  133. package/src/ai/__tests__/AICopilot.test.ts +178 -0
  134. package/src/ai/__tests__/AIOutputValidator.prod.test.ts +226 -0
  135. package/src/ai/__tests__/AIOutputValidator.test.ts +138 -0
  136. package/src/ai/__tests__/BTNodes.prod.test.ts +391 -0
  137. package/src/ai/__tests__/BTNodes.test.ts +263 -0
  138. package/src/ai/__tests__/BehaviorSelector.prod.test.ts +129 -0
  139. package/src/ai/__tests__/BehaviorSelector.test.ts +132 -0
  140. package/src/ai/__tests__/BehaviorTree.prod.test.ts +266 -0
  141. package/src/ai/__tests__/BehaviorTree.test.ts +216 -0
  142. package/src/ai/__tests__/Blackboard.prod.test.ts +339 -0
  143. package/src/ai/__tests__/Blackboard.test.ts +183 -0
  144. package/src/ai/__tests__/GenerationAnalytics.prod.test.ts +141 -0
  145. package/src/ai/__tests__/GenerationAnalytics.test.ts +165 -0
  146. package/src/ai/__tests__/GenerationCache.prod.test.ts +144 -0
  147. package/src/ai/__tests__/GenerationCache.test.ts +171 -0
  148. package/src/ai/__tests__/GoalPlanner.prod.test.ts +189 -0
  149. package/src/ai/__tests__/GoalPlanner.test.ts +137 -0
  150. package/src/ai/__tests__/GoalPlannerDepth.prod.test.ts +217 -0
  151. package/src/ai/__tests__/HoloScriptGenerator.test.ts +125 -0
  152. package/src/ai/__tests__/InfluenceMap.prod.test.ts +146 -0
  153. package/src/ai/__tests__/InfluenceMap.test.ts +149 -0
  154. package/src/ai/__tests__/NavMesh.prod.test.ts +141 -0
  155. package/src/ai/__tests__/NavMesh.test.ts +159 -0
  156. package/src/ai/__tests__/PerceptionSystem.prod.test.ts +135 -0
  157. package/src/ai/__tests__/PerceptionSystem.test.ts +250 -0
  158. package/src/ai/__tests__/PromptTemplates.prod.test.ts +313 -0
  159. package/src/ai/__tests__/PromptTemplates.test.ts +146 -0
  160. package/src/ai/__tests__/SemanticSearch.test.ts +37 -0
  161. package/src/ai/__tests__/StateMachine.prod.test.ts +162 -0
  162. package/src/ai/__tests__/StateMachine.test.ts +163 -0
  163. package/src/ai/__tests__/SteeringBehavior.prod.test.ts +251 -0
  164. package/src/ai/__tests__/SteeringBehavior.test.ts +135 -0
  165. package/src/ai/__tests__/SteeringBehaviors.prod.test.ts +133 -0
  166. package/src/ai/__tests__/SteeringBehaviors.test.ts +151 -0
  167. package/src/ai/__tests__/TrainingDataGenerator.prod.test.ts +286 -0
  168. package/src/ai/__tests__/TrainingDataGenerator.test.ts +286 -0
  169. package/src/ai/__tests__/UtilityAI.prod.test.ts +207 -0
  170. package/src/ai/__tests__/UtilityAI.test.ts +155 -0
  171. package/src/ai/__tests__/adapters.prod.test.ts +263 -0
  172. package/src/ai/__tests__/adapters.test.ts +320 -0
  173. package/src/ai/adapters.ts +1585 -0
  174. package/src/ai/index.ts +130 -0
  175. package/src/behavior/BehaviorPresets.ts +140 -0
  176. package/src/behavior/BehaviorTree.ts +236 -0
  177. package/src/behavior/StateMachine.ts +176 -0
  178. package/src/behavior/StateTrait.ts +67 -0
  179. package/src/behavior/index.ts +8 -0
  180. package/src/behavior.ts +8 -0
  181. package/src/board/audit.ts +284 -0
  182. package/src/board/board-ops.ts +336 -0
  183. package/src/board/board-types.ts +302 -0
  184. package/src/board/index.ts +69 -0
  185. package/src/define-agent.ts +46 -0
  186. package/src/define-team.ts +33 -0
  187. package/src/delegation.ts +265 -0
  188. package/src/distributed-claimer.ts +228 -0
  189. package/src/economy/AgentBudgetEnforcer.ts +464 -0
  190. package/src/economy/BountyManager.ts +185 -0
  191. package/src/economy/CreatorRevenueAggregator.ts +460 -0
  192. package/src/economy/InvisibleWallet.ts +82 -0
  193. package/src/economy/KnowledgeMarketplace.ts +193 -0
  194. package/src/economy/PaymentWebhookService.ts +512 -0
  195. package/src/economy/RevenueSplitter.ts +156 -0
  196. package/src/economy/SubscriptionManager.ts +546 -0
  197. package/src/economy/UnifiedBudgetOptimizer.ts +635 -0
  198. package/src/economy/UsageMeter.ts +440 -0
  199. package/src/economy/_core-stubs.ts +219 -0
  200. package/src/economy/index.ts +100 -0
  201. package/src/economy/x402-facilitator.ts +1978 -0
  202. package/src/index.ts +348 -0
  203. package/src/knowledge/__tests__/knowledge-consolidator.test.ts +444 -0
  204. package/src/knowledge/__tests__/knowledge-store-vector.test.ts +291 -0
  205. package/src/knowledge/brain.ts +167 -0
  206. package/src/knowledge/consolidation.ts +581 -0
  207. package/src/knowledge/knowledge-consolidator.ts +510 -0
  208. package/src/knowledge/knowledge-store.ts +616 -0
  209. package/src/learning/MemoryConsolidator.ts +102 -0
  210. package/src/learning/MemoryScorer.ts +69 -0
  211. package/src/learning/ProceduralCompiler.ts +45 -0
  212. package/src/learning/SemanticClusterer.ts +66 -0
  213. package/src/learning/index.ts +8 -0
  214. package/src/llm/llm-adapter.ts +159 -0
  215. package/src/mesh/index.ts +309 -0
  216. package/src/negotiation/NegotiationProtocol.ts +694 -0
  217. package/src/negotiation/NegotiationTypes.ts +473 -0
  218. package/src/negotiation/VotingMechanisms.ts +691 -0
  219. package/src/negotiation/index.ts +49 -0
  220. package/src/protocol/goal-synthesizer.ts +317 -0
  221. package/src/protocol/implementations.ts +474 -0
  222. package/src/protocol/micro-phase-decomposer.ts +299 -0
  223. package/src/protocol/micro-step-decomposer.test.ts +306 -0
  224. package/src/protocol-agent.test.ts +353 -0
  225. package/src/protocol-agent.ts +670 -0
  226. package/src/self-improve/absorb-scanner.ts +252 -0
  227. package/src/self-improve/evolution-engine.ts +149 -0
  228. package/src/self-improve/framework-absorber.ts +214 -0
  229. package/src/self-improve/index.ts +50 -0
  230. package/src/self-improve/prompt-optimizer.ts +212 -0
  231. package/src/self-improve/test-generator.ts +175 -0
  232. package/src/skill-router.ts +186 -0
  233. package/src/skills/index.ts +5 -0
  234. package/src/skills/skill-md-bridge.ts +1699 -0
  235. package/src/swarm/ACOEngine.ts +261 -0
  236. package/src/swarm/CollectiveIntelligence.ts +383 -0
  237. package/src/swarm/ContributionSynthesizer.ts +481 -0
  238. package/src/swarm/LeaderElection.ts +393 -0
  239. package/src/swarm/PSOEngine.ts +206 -0
  240. package/src/swarm/QuorumPolicy.ts +173 -0
  241. package/src/swarm/SwarmCoordinator.ts +335 -0
  242. package/src/swarm/SwarmManager.ts +442 -0
  243. package/src/swarm/SwarmMembership.ts +456 -0
  244. package/src/swarm/VotingRound.ts +255 -0
  245. package/src/swarm/__tests__/ACOEngine.prod.test.ts +164 -0
  246. package/src/swarm/__tests__/ACOEngine.test.ts +117 -0
  247. package/src/swarm/__tests__/CollectiveIntelligence.prod.test.ts +296 -0
  248. package/src/swarm/__tests__/CollectiveIntelligence.test.ts +457 -0
  249. package/src/swarm/__tests__/ContributionSynthesizer.prod.test.ts +269 -0
  250. package/src/swarm/__tests__/ContributionSynthesizer.test.ts +254 -0
  251. package/src/swarm/__tests__/LeaderElection.prod.test.ts +196 -0
  252. package/src/swarm/__tests__/LeaderElection.test.ts +151 -0
  253. package/src/swarm/__tests__/PSOEngine.prod.test.ts +162 -0
  254. package/src/swarm/__tests__/PSOEngine.test.ts +106 -0
  255. package/src/swarm/__tests__/QuorumPolicy.prod.test.ts +216 -0
  256. package/src/swarm/__tests__/QuorumPolicy.test.ts +177 -0
  257. package/src/swarm/__tests__/SwarmCoordinator.prod.test.ts +186 -0
  258. package/src/swarm/__tests__/SwarmCoordinator.test.ts +167 -0
  259. package/src/swarm/__tests__/SwarmManager.prod.test.ts +308 -0
  260. package/src/swarm/__tests__/SwarmManager.test.ts +373 -0
  261. package/src/swarm/__tests__/SwarmMembership.prod.test.ts +273 -0
  262. package/src/swarm/__tests__/SwarmMembership.test.ts +264 -0
  263. package/src/swarm/__tests__/VotingRound.prod.test.ts +233 -0
  264. package/src/swarm/__tests__/VotingRound.test.ts +174 -0
  265. package/src/swarm/analytics/SwarmInspector.ts +476 -0
  266. package/src/swarm/analytics/SwarmMetrics.ts +449 -0
  267. package/src/swarm/analytics/__tests__/SwarmInspector.prod.test.ts +366 -0
  268. package/src/swarm/analytics/__tests__/SwarmInspector.test.ts +454 -0
  269. package/src/swarm/analytics/__tests__/SwarmMetrics.prod.test.ts +254 -0
  270. package/src/swarm/analytics/__tests__/SwarmMetrics.test.ts +370 -0
  271. package/src/swarm/analytics/index.ts +7 -0
  272. package/src/swarm/index.ts +69 -0
  273. package/src/swarm/messaging/BroadcastChannel.ts +509 -0
  274. package/src/swarm/messaging/GossipProtocol.ts +565 -0
  275. package/src/swarm/messaging/SwarmEventBus.ts +443 -0
  276. package/src/swarm/messaging/__tests__/BroadcastChannel.prod.test.ts +331 -0
  277. package/src/swarm/messaging/__tests__/BroadcastChannel.test.ts +333 -0
  278. package/src/swarm/messaging/__tests__/GossipProtocol.prod.test.ts +356 -0
  279. package/src/swarm/messaging/__tests__/GossipProtocol.test.ts +437 -0
  280. package/src/swarm/messaging/__tests__/SwarmEventBus.prod.test.ts +191 -0
  281. package/src/swarm/messaging/__tests__/SwarmEventBus.test.ts +247 -0
  282. package/src/swarm/messaging/index.ts +8 -0
  283. package/src/swarm/spatial/FlockingBehavior.ts +462 -0
  284. package/src/swarm/spatial/FormationController.ts +500 -0
  285. package/src/swarm/spatial/Vector3.ts +170 -0
  286. package/src/swarm/spatial/ZoneClaiming.ts +509 -0
  287. package/src/swarm/spatial/__tests__/FlockingBehavior.prod.test.ts +239 -0
  288. package/src/swarm/spatial/__tests__/FlockingBehavior.test.ts +298 -0
  289. package/src/swarm/spatial/__tests__/FormationController.prod.test.ts +240 -0
  290. package/src/swarm/spatial/__tests__/FormationController.test.ts +297 -0
  291. package/src/swarm/spatial/__tests__/Vector3.prod.test.ts +283 -0
  292. package/src/swarm/spatial/__tests__/Vector3.test.ts +224 -0
  293. package/src/swarm/spatial/__tests__/ZoneClaiming.prod.test.ts +246 -0
  294. package/src/swarm/spatial/__tests__/ZoneClaiming.test.ts +374 -0
  295. package/src/swarm/spatial/index.ts +28 -0
  296. package/src/team.ts +1245 -0
  297. package/src/training/LRScheduler.ts +377 -0
  298. package/src/training/QualityScoringPipeline.ts +139 -0
  299. package/src/training/SoftDedup.ts +461 -0
  300. package/src/training/SparsityMonitor.ts +685 -0
  301. package/src/training/SparsityMonitorTypes.ts +209 -0
  302. package/src/training/SpatialTrainingDataGenerator.ts +1526 -0
  303. package/src/training/SpatialTrainingDataTypes.ts +216 -0
  304. package/src/training/TrainingPipelineConfig.ts +215 -0
  305. package/src/training/constants.ts +94 -0
  306. package/src/training/index.ts +138 -0
  307. package/src/training/schema.ts +147 -0
  308. package/src/training/scripts/generate-novel-use-cases-dataset.ts +272 -0
  309. package/src/training/scripts/generate-spatial-dataset.ts +521 -0
  310. package/src/training/training/data/novel-use-cases.jsonl +153 -0
  311. package/src/training/training/data/spatial-reasoning-10k.jsonl +9354 -0
  312. package/src/training/trainingmonkey/TrainingMonkeyIntegration.ts +477 -0
  313. package/src/training/trainingmonkey/TrainingMonkeyTypes.ts +230 -0
  314. package/src/training/trainingmonkey/index.ts +26 -0
  315. package/src/training/trait-mappings.ts +157 -0
  316. package/src/types/core-stubs.d.ts +113 -0
  317. package/src/types.ts +304 -0
  318. package/test-output.txt +0 -0
  319. package/test-result.json +1 -0
  320. package/tsc-errors.txt +4 -0
  321. package/tsc_output.txt +0 -0
  322. package/tsconfig.json +14 -0
  323. package/tsup-learning-esm.config.ts +12 -0
  324. package/tsup.config.ts +21 -0
  325. package/typescript-errors-2.txt +0 -0
  326. package/typescript-errors.txt +22 -0
  327. package/vitest-log-utf8.txt +268 -0
  328. package/vitest-log.txt +0 -0
  329. package/vitest.config.ts +8 -0
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Board Types — Canonical home for all team board data structures.
3
+ *
4
+ * Absorbed from mcp-server/src/holomesh/http-routes.ts.
5
+ * The mcp-server should import these instead of defining inline.
6
+ */
7
+
8
+ // ── Task Board ──
9
+
10
+ export type TaskStatus = 'open' | 'claimed' | 'done' | 'blocked';
11
+ export type SlotRole = 'coder' | 'tester' | 'researcher' | 'reviewer' | 'flex';
12
+
13
+ export interface TaskAction {
14
+ /** What to do when this task completes */
15
+ type: 'commit' | 'push' | 'deploy' | 'notify' | 'chain' | 'review';
16
+ /** For 'chain': task ID to unblock. For 'notify': agent name. For 'deploy': service name. */
17
+ target?: string;
18
+ /** Human-readable label shown in UI */
19
+ label?: string;
20
+ }
21
+
22
+ export interface TeamTask {
23
+ id: string;
24
+ title: string;
25
+ description: string;
26
+ status: TaskStatus;
27
+ claimedBy?: string;
28
+ claimedByName?: string;
29
+ completedBy?: string;
30
+ commitHash?: string;
31
+ source?: string;
32
+ priority: number;
33
+ role?: SlotRole;
34
+ createdAt: string;
35
+ completedAt?: string;
36
+
37
+ // ── Chaining & Metadata ──
38
+
39
+ /** Task IDs that must complete before this task can be claimed */
40
+ dependsOn?: string[];
41
+ /** Task IDs that this task unblocks when completed */
42
+ unblocks?: string[];
43
+ /** Actions to execute when this task is marked done */
44
+ onComplete?: TaskAction[];
45
+ /** Tags for filtering and categorization */
46
+ tags?: string[];
47
+ /** Arbitrary metadata (estimatedHours, repo, branch, etc.) */
48
+ metadata?: Record<string, unknown>;
49
+ }
50
+
51
+ export interface DoneLogEntry {
52
+ taskId: string;
53
+ title: string;
54
+ completedBy: string;
55
+ commitHash?: string;
56
+ timestamp: string;
57
+ summary: string;
58
+ }
59
+
60
+ // ── Suggestions ──
61
+
62
+ export type SuggestionCategory = 'process' | 'tooling' | 'architecture' | 'testing' | 'docs' | 'performance' | 'other';
63
+
64
+ export interface SuggestionVote {
65
+ agentId: string;
66
+ agentName: string;
67
+ value: 1 | -1;
68
+ reason?: string;
69
+ votedAt: string;
70
+ }
71
+
72
+ export interface TeamSuggestion {
73
+ id: string;
74
+ title: string;
75
+ description: string;
76
+ category: SuggestionCategory;
77
+ proposedBy: string;
78
+ proposedByName: string;
79
+ votes: SuggestionVote[];
80
+ score: number;
81
+ status: 'open' | 'promoted' | 'dismissed';
82
+ promotedTaskId?: string;
83
+ evidence?: string;
84
+ createdAt: string;
85
+ resolvedAt?: string;
86
+ }
87
+
88
+ // ── Room Presets ──
89
+
90
+ export interface RoomPreset {
91
+ objective: string;
92
+ taskSources: string[];
93
+ rules: string[];
94
+ }
95
+
96
+ export const ROOM_PRESETS: Record<string, RoomPreset> = {
97
+ audit: {
98
+ objective: 'Fix audit issues — split oversized components, add error handling, close security gaps, add tests',
99
+ taskSources: ['STUDIO_AUDIT.md'],
100
+ rules: ['Screenshot before and after visual changes', 'Run tsc --noEmit before committing', 'One task at a time'],
101
+ },
102
+ research: {
103
+ objective: 'Compound knowledge — read research files, synthesize findings, contribute wisdom/patterns/gotchas',
104
+ taskSources: ['research/*.md', 'ROADMAP.md'],
105
+ rules: ['Query knowledge store before writing', 'Contribute findings to team workspace', 'Cite sources'],
106
+ },
107
+ build: {
108
+ objective: 'Ship features — implement roadmap items, write code, add tests, deploy',
109
+ taskSources: ['ROADMAP.md', 'TODO.md'],
110
+ rules: ['Run tests before committing', 'Sectioned commits by scope', 'Update docs if adding public API'],
111
+ },
112
+ review: {
113
+ objective: 'Quality gate — review recent changes, check for regressions, verify test coverage',
114
+ taskSources: ['git log --oneline -20'],
115
+ rules: ['Read the diff before commenting', 'Check test coverage', 'Verify no new console.log in production code'],
116
+ },
117
+ };
118
+
119
+ // ── Team Agent Profiles (absorbed from team-agents.ts) ──
120
+
121
+ export type AgentRole = 'architect' | 'coder' | 'researcher' | 'reviewer';
122
+ export type AIProvider = 'anthropic' | 'openai' | 'xai';
123
+
124
+ export interface ClaimFilter {
125
+ roles: SlotRole[];
126
+ maxPriority: number;
127
+ }
128
+
129
+ export interface TeamAgentProfile {
130
+ id: string;
131
+ name: string;
132
+ role: AgentRole;
133
+ capabilities: string[];
134
+ model: string;
135
+ provider: AIProvider;
136
+ claimFilter: ClaimFilter;
137
+ systemPrompt: string;
138
+ knowledgeDomains: string[];
139
+ }
140
+
141
+ export const BRITTNEY_AGENT: TeamAgentProfile = {
142
+ id: 'agent_brittney',
143
+ name: 'Brittney',
144
+ role: 'architect',
145
+ capabilities: ['scene-design', 'trait-composition', 'ux-critique', 'code-review', 'knowledge-synthesis'],
146
+ model: 'claude-opus-4',
147
+ provider: 'anthropic',
148
+ claimFilter: { roles: ['coder', 'reviewer'], maxPriority: 5 },
149
+ systemPrompt: 'You are Brittney, the orchestrating AI for HoloScript team rooms. HoloScript is a knowledge compiler — users describe any system and it compiles to 37 targets. You scaffold projects, dispatch agents, compose traits, and select compilation targets. Simulation-first: digital twin before physical twin.',
150
+ knowledgeDomains: ['rendering', 'compilation', 'agents', 'domain-modeling', 'semantic-platform', 'orchestration'],
151
+ };
152
+
153
+ export const DAEMON_AGENT: TeamAgentProfile = {
154
+ id: 'agent_daemon',
155
+ name: 'Daemon',
156
+ role: 'coder',
157
+ capabilities: ['type-fixes', 'test-coverage', 'console-cleanup', 'todo-resolution', 'refactoring'],
158
+ model: 'claude-sonnet-4',
159
+ provider: 'anthropic',
160
+ claimFilter: { roles: ['coder', 'tester'], maxPriority: 8 },
161
+ systemPrompt: 'You are Daemon, the code improvement agent. Fix TypeScript type errors, increase test coverage, remove stale console.log, resolve TODO/FIXME. Strict TypeScript: no `any` — use `unknown`. Run tests before marking done.',
162
+ knowledgeDomains: ['compilation', 'agents'],
163
+ };
164
+
165
+ export const ABSORB_AGENT: TeamAgentProfile = {
166
+ id: 'agent_absorb',
167
+ name: 'Absorb',
168
+ role: 'researcher',
169
+ capabilities: ['codebase-analysis', 'gap-detection', 'knowledge-extraction', 'pattern-mining', 'dependency-audit'],
170
+ model: 'claude-sonnet-4',
171
+ provider: 'anthropic',
172
+ claimFilter: { roles: ['researcher'], maxPriority: 10 },
173
+ systemPrompt: 'You are Absorb, the knowledge extraction agent. Scan codebases, detect gaps, extract W/P/G entries. Use absorb_query and absorb_run_absorb. Deduplicate against existing knowledge. Focus on actionable insights.',
174
+ knowledgeDomains: ['compilation', 'security', 'rendering', 'agents', 'general'],
175
+ };
176
+
177
+ export const ORACLE_AGENT: TeamAgentProfile = {
178
+ id: 'agent_oracle',
179
+ name: 'Oracle',
180
+ role: 'reviewer',
181
+ capabilities: ['architectural-review', 'consistency-checking', 'knowledge-cross-reference', 'regression-detection', 'standard-enforcement'],
182
+ model: 'claude-opus-4',
183
+ provider: 'anthropic',
184
+ claimFilter: { roles: ['reviewer'], maxPriority: 5 },
185
+ systemPrompt: 'You are Oracle, the quality reviewer. Cross-reference knowledge store for related W/P/G. Check architectural consistency, test coverage, no hardcoded domain vocabulary in core, proper trait composition. Flag regressions.',
186
+ knowledgeDomains: ['security', 'compilation', 'agents'],
187
+ };
188
+
189
+ export const TEAM_AGENT_PROFILES: ReadonlyMap<string, TeamAgentProfile> = new Map([
190
+ [BRITTNEY_AGENT.id, BRITTNEY_AGENT],
191
+ [DAEMON_AGENT.id, DAEMON_AGENT],
192
+ [ABSORB_AGENT.id, ABSORB_AGENT],
193
+ [ORACLE_AGENT.id, ORACLE_AGENT],
194
+ ]);
195
+
196
+ export function getAllProfiles(): TeamAgentProfile[] {
197
+ return Array.from(TEAM_AGENT_PROFILES.values());
198
+ }
199
+
200
+ export function getProfileById(id: string): TeamAgentProfile | undefined {
201
+ return TEAM_AGENT_PROFILES.get(id);
202
+ }
203
+
204
+ export function getProfilesByClaimRole(role: SlotRole): TeamAgentProfile[] {
205
+ return getAllProfiles().filter((p) => p.claimFilter.roles.includes(role));
206
+ }
207
+
208
+ export function getProfilesByDomain(domain: string): TeamAgentProfile[] {
209
+ return getAllProfiles().filter((p) => p.knowledgeDomains.includes(domain));
210
+ }
211
+
212
+ // ── Board Utilities ──
213
+
214
+ /** Normalize a title for dedup comparison. */
215
+ export function normalizeTitle(s: string): string {
216
+ return s.toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim().slice(0, 60);
217
+ }
218
+
219
+ /** Generate a unique task ID. */
220
+ export function generateTaskId(): string {
221
+ return `task_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
222
+ }
223
+
224
+ /** Generate a unique suggestion ID. */
225
+ export function generateSuggestionId(): string {
226
+ return `sug_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
227
+ }
228
+
229
+ /** Infer priority from TODO/FIXME kind and text. */
230
+ export function inferFixPriority(kind: string, text: string): number {
231
+ const upper = `${kind} ${text}`.toUpperCase();
232
+ if (/SECURITY|VULN|INJECTION|AUTH|CRITICAL/.test(upper)) return 1;
233
+ if (/FIXME|BUG|BROKEN|FAIL|ERROR|REGRESSION/.test(upper)) return 2;
234
+ if (/TODO|HACK|TECH\s*DEBT|CLEANUP|REFACTOR/.test(upper)) return 3;
235
+ return 4;
236
+ }
237
+
238
+ /** Parse a derive source (markdown, grep output) into task candidates. */
239
+ export function parseDeriveContent(content: string, source: string): Array<Omit<TeamTask, 'id' | 'status' | 'createdAt'>> {
240
+ const lines = content.split('\n');
241
+ const tasks: Array<Omit<TeamTask, 'id' | 'status' | 'createdAt'>> = [];
242
+ const seen = new Set<string>();
243
+ let priority = 5;
244
+
245
+ for (const line of lines) {
246
+ const trimmed = line.trim();
247
+
248
+ // Priority markers from section headers
249
+ if (trimmed.match(/^#+\s*(CRITICAL|SEC-)/i)) priority = 1;
250
+ else if (trimmed.match(/^#+\s*(HIGH|PERF-|MEM-|TYPE-|ERR-|TEST-)/i)) priority = 2;
251
+ else if (trimmed.match(/^#+\s*(MEDIUM|LOG-|TODO-|STORE-|UNUSED-)/i)) priority = 3;
252
+
253
+ // Markdown checkboxes
254
+ if (trimmed.match(/^\-\s*\[\s*\]\s+.+/)) {
255
+ const title = trimmed.replace(/^\-\s*\[\s*\]\s+/, '').slice(0, 200);
256
+ const norm = normalizeTitle(title);
257
+ if (title && !seen.has(norm)) {
258
+ seen.add(norm);
259
+ tasks.push({ title, description: '', priority, source });
260
+ }
261
+ continue;
262
+ }
263
+
264
+ // Section headers as tasks
265
+ if (trimmed.match(/^###\s+\w+-\d+:.+/)) {
266
+ const title = trimmed.replace(/^###\s+/, '').slice(0, 200);
267
+ const norm = normalizeTitle(title);
268
+ if (title && !seen.has(norm)) {
269
+ seen.add(norm);
270
+ tasks.push({ title, description: '', priority, source });
271
+ }
272
+ continue;
273
+ }
274
+
275
+ // grep-style: path:line: // TODO: message
276
+ const grepMatch = trimmed.match(/^(.+?):(\d+):\s*(?:\/\/\s*)?(TODO|FIXME|HACK|XXX)\s*:?\s*(.+)$/i);
277
+ if (grepMatch) {
278
+ const [, file, lineNo, kind, detail] = grepMatch;
279
+ const title = `${kind.toUpperCase()}: ${detail.trim().slice(0, 180)}`;
280
+ const norm = normalizeTitle(title);
281
+ if (!seen.has(norm)) {
282
+ seen.add(norm);
283
+ tasks.push({ title, description: `${file}:${lineNo}`, priority: inferFixPriority(kind, detail), source });
284
+ }
285
+ continue;
286
+ }
287
+
288
+ // Plain TODO/FIXME lines
289
+ const inlineMatch = trimmed.match(/^(?:[-*]\s*)?(TODO|FIXME|HACK|XXX)\s*:?\s*(.+)$/i);
290
+ if (inlineMatch) {
291
+ const [, kind, detail] = inlineMatch;
292
+ const title = `${kind.toUpperCase()}: ${detail.trim().slice(0, 180)}`;
293
+ const norm = normalizeTitle(title);
294
+ if (!seen.has(norm)) {
295
+ seen.add(norm);
296
+ tasks.push({ title, description: '', priority: inferFixPriority(kind, detail), source });
297
+ }
298
+ }
299
+ }
300
+
301
+ return tasks;
302
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Board module — canonical home for team board types, logic, and utilities.
3
+ */
4
+ export {
5
+ // Types
6
+ type TaskStatus,
7
+ type SlotRole,
8
+ type TaskAction,
9
+ type TeamTask,
10
+ type DoneLogEntry,
11
+ type SuggestionCategory,
12
+ type SuggestionVote,
13
+ type TeamSuggestion,
14
+ type RoomPreset,
15
+ type AgentRole,
16
+ type AIProvider,
17
+ type ClaimFilter,
18
+ type TeamAgentProfile,
19
+
20
+ // Constants
21
+ ROOM_PRESETS,
22
+ BRITTNEY_AGENT,
23
+ DAEMON_AGENT,
24
+ ABSORB_AGENT,
25
+ ORACLE_AGENT,
26
+ TEAM_AGENT_PROFILES,
27
+
28
+ // Functions
29
+ getAllProfiles,
30
+ getProfileById,
31
+ getProfilesByClaimRole,
32
+ getProfilesByDomain,
33
+ normalizeTitle,
34
+ generateTaskId,
35
+ generateSuggestionId,
36
+ inferFixPriority,
37
+ parseDeriveContent,
38
+ } from './board-types';
39
+
40
+ export {
41
+ type AuditResult,
42
+ type AuditViolation,
43
+ type AgentStats,
44
+ type SourceStats,
45
+ type CompletionBucket,
46
+ type DoneLogStats,
47
+ type FullAuditResult,
48
+ isLikelyReportEntry,
49
+ isCommitProof,
50
+ auditDoneLog,
51
+ DoneLogAuditor,
52
+ } from './audit';
53
+
54
+ export {
55
+ type ClaimResult,
56
+ type DoneResult,
57
+ type TaskActionResult,
58
+ type SuggestionActionResult,
59
+ claimTask,
60
+ completeTask,
61
+ blockTask,
62
+ reopenTask,
63
+ delegateTask,
64
+ addTasksToBoard,
65
+ createSuggestion,
66
+ voteSuggestion,
67
+ promoteSuggestion,
68
+ dismissSuggestion,
69
+ } from './board-ops';
@@ -0,0 +1,46 @@
1
+ /**
2
+ * defineAgent() — Builder for creating agent configurations.
3
+ *
4
+ * Returns a validated AgentConfig that can be passed to defineTeam().
5
+ */
6
+
7
+ import type { AgentConfig, AgentRole, SlotRole } from './types';
8
+
9
+ const VALID_ROLES: AgentRole[] = ['architect', 'coder', 'researcher', 'reviewer'];
10
+ const VALID_SLOT_ROLES: SlotRole[] = ['coder', 'tester', 'researcher', 'reviewer', 'flex'];
11
+
12
+ export function defineAgent(config: AgentConfig): AgentConfig {
13
+ if (!config.name || config.name.length < 1) {
14
+ throw new Error('Agent name is required');
15
+ }
16
+ if (!VALID_ROLES.includes(config.role)) {
17
+ throw new Error(`Invalid role "${config.role}". Valid: ${VALID_ROLES.join(', ')}`);
18
+ }
19
+ if (!config.model?.provider || !config.model?.model) {
20
+ throw new Error('Agent model must specify provider and model');
21
+ }
22
+ if (!config.capabilities || config.capabilities.length === 0) {
23
+ throw new Error('Agent must have at least one capability');
24
+ }
25
+
26
+ // Validate claim filter
27
+ const filter = config.claimFilter;
28
+ if (!filter?.roles?.length) {
29
+ throw new Error('Agent claimFilter must specify at least one role');
30
+ }
31
+ for (const r of filter.roles) {
32
+ if (!VALID_SLOT_ROLES.includes(r)) {
33
+ throw new Error(`Invalid claim role "${r}". Valid: ${VALID_SLOT_ROLES.join(', ')}`);
34
+ }
35
+ }
36
+
37
+ // Defaults
38
+ return {
39
+ ...config,
40
+ knowledgeDomains: config.knowledgeDomains ?? ['general'],
41
+ claimFilter: {
42
+ ...filter,
43
+ maxPriority: filter.maxPriority ?? 10,
44
+ },
45
+ };
46
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * defineTeam() — Builder for creating a Team instance.
3
+ *
4
+ * Validates configuration and returns a ready-to-use Team.
5
+ */
6
+
7
+ import type { TeamConfig } from './types';
8
+ import { Team } from './team';
9
+
10
+ export function defineTeam(config: TeamConfig): Team {
11
+ if (!config.name || config.name.length < 1) {
12
+ throw new Error('Team name is required');
13
+ }
14
+ if (!config.agents || config.agents.length === 0) {
15
+ throw new Error('Team must have at least one agent');
16
+ }
17
+
18
+ const maxSlots = config.maxSlots ?? 5;
19
+ if (config.agents.length > maxSlots) {
20
+ throw new Error(`Team has ${config.agents.length} agents but only ${maxSlots} slots`);
21
+ }
22
+
23
+ // Check for duplicate agent names
24
+ const names = new Set<string>();
25
+ for (const agent of config.agents) {
26
+ if (names.has(agent.name)) {
27
+ throw new Error(`Duplicate agent name: "${agent.name}"`);
28
+ }
29
+ names.add(agent.name);
30
+ }
31
+
32
+ return new Team(config);
33
+ }