magi-ai 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 (300) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +377 -0
  3. package/README.md +377 -0
  4. package/dist/bin/magi-benchmark.d.ts +14 -0
  5. package/dist/bin/magi-benchmark.js +93 -0
  6. package/dist/bin/magi-mcp.d.ts +8 -0
  7. package/dist/bin/magi-mcp.js +28 -0
  8. package/dist/bin/magi.d.ts +2 -0
  9. package/dist/bin/magi.js +634 -0
  10. package/dist/src/adapters/base.d.ts +34 -0
  11. package/dist/src/adapters/base.js +149 -0
  12. package/dist/src/adapters/claude.d.ts +29 -0
  13. package/dist/src/adapters/claude.js +65 -0
  14. package/dist/src/adapters/codex.d.ts +21 -0
  15. package/dist/src/adapters/codex.js +41 -0
  16. package/dist/src/adapters/gemini.d.ts +18 -0
  17. package/dist/src/adapters/gemini.js +31 -0
  18. package/dist/src/adapters/registry.d.ts +19 -0
  19. package/dist/src/adapters/registry.js +59 -0
  20. package/dist/src/audit/hash-chain.d.ts +21 -0
  21. package/dist/src/audit/hash-chain.js +70 -0
  22. package/dist/src/audit/types.d.ts +25 -0
  23. package/dist/src/audit/types.js +1 -0
  24. package/dist/src/audit/writer.d.ts +18 -0
  25. package/dist/src/audit/writer.js +100 -0
  26. package/dist/src/benchmark/golden-tasks.d.ts +9 -0
  27. package/dist/src/benchmark/golden-tasks.js +476 -0
  28. package/dist/src/benchmark/reporter.d.ts +5 -0
  29. package/dist/src/benchmark/reporter.js +107 -0
  30. package/dist/src/benchmark/runner.d.ts +30 -0
  31. package/dist/src/benchmark/runner.js +224 -0
  32. package/dist/src/benchmark/scorer.d.ts +12 -0
  33. package/dist/src/benchmark/scorer.js +124 -0
  34. package/dist/src/benchmark/types.d.ts +54 -0
  35. package/dist/src/benchmark/types.js +1 -0
  36. package/dist/src/cache/deliberation-cache.d.ts +49 -0
  37. package/dist/src/cache/deliberation-cache.js +127 -0
  38. package/dist/src/cli/commands/config-cmd.d.ts +11 -0
  39. package/dist/src/cli/commands/config-cmd.js +190 -0
  40. package/dist/src/cli/commands/demo.d.ts +12 -0
  41. package/dist/src/cli/commands/demo.js +66 -0
  42. package/dist/src/cli/commands/setup.d.ts +7 -0
  43. package/dist/src/cli/commands/setup.js +182 -0
  44. package/dist/src/cli/i18n.d.ts +89 -0
  45. package/dist/src/cli/i18n.js +176 -0
  46. package/dist/src/cli/interactive-select.d.ts +27 -0
  47. package/dist/src/cli/interactive-select.js +130 -0
  48. package/dist/src/cli/tui-setup.d.ts +24 -0
  49. package/dist/src/cli/tui-setup.js +42 -0
  50. package/dist/src/config/cli-detector.d.ts +37 -0
  51. package/dist/src/config/cli-detector.js +99 -0
  52. package/dist/src/config/user-config.d.ts +81 -0
  53. package/dist/src/config/user-config.js +134 -0
  54. package/dist/src/context/auto-collector.d.ts +43 -0
  55. package/dist/src/context/auto-collector.js +337 -0
  56. package/dist/src/context/manager.d.ts +35 -0
  57. package/dist/src/context/manager.js +162 -0
  58. package/dist/src/context/serializer.d.ts +20 -0
  59. package/dist/src/context/serializer.js +52 -0
  60. package/dist/src/demo/recorded-deliberation.d.ts +13 -0
  61. package/dist/src/demo/recorded-deliberation.js +277 -0
  62. package/dist/src/engine/angel-detector.d.ts +83 -0
  63. package/dist/src/engine/angel-detector.js +334 -0
  64. package/dist/src/engine/at-field.d.ts +40 -0
  65. package/dist/src/engine/at-field.js +195 -0
  66. package/dist/src/engine/berserk-orchestrator.d.ts +66 -0
  67. package/dist/src/engine/berserk-orchestrator.js +378 -0
  68. package/dist/src/engine/change-metrics.d.ts +56 -0
  69. package/dist/src/engine/change-metrics.js +214 -0
  70. package/dist/src/engine/consensus.d.ts +20 -0
  71. package/dist/src/engine/consensus.js +146 -0
  72. package/dist/src/engine/dead-sea-scrolls.d.ts +132 -0
  73. package/dist/src/engine/dead-sea-scrolls.js +610 -0
  74. package/dist/src/engine/drift-detector.d.ts +39 -0
  75. package/dist/src/engine/drift-detector.js +225 -0
  76. package/dist/src/engine/dummy-plug.d.ts +44 -0
  77. package/dist/src/engine/dummy-plug.js +190 -0
  78. package/dist/src/engine/engram-manager.d.ts +55 -0
  79. package/dist/src/engine/engram-manager.js +306 -0
  80. package/dist/src/engine/events.d.ts +130 -0
  81. package/dist/src/engine/events.js +44 -0
  82. package/dist/src/engine/gospel.d.ts +30 -0
  83. package/dist/src/engine/gospel.js +129 -0
  84. package/dist/src/engine/hallucination-detector.d.ts +33 -0
  85. package/dist/src/engine/hallucination-detector.js +215 -0
  86. package/dist/src/engine/human-resolver.d.ts +19 -0
  87. package/dist/src/engine/human-resolver.js +89 -0
  88. package/dist/src/engine/instrumentality.d.ts +64 -0
  89. package/dist/src/engine/instrumentality.js +297 -0
  90. package/dist/src/engine/iruel-battle.d.ts +79 -0
  91. package/dist/src/engine/iruel-battle.js +319 -0
  92. package/dist/src/engine/kernel/deliberation-kernel.d.ts +12 -0
  93. package/dist/src/engine/kernel/deliberation-kernel.js +303 -0
  94. package/dist/src/engine/kernel/index.d.ts +8 -0
  95. package/dist/src/engine/kernel/index.js +7 -0
  96. package/dist/src/engine/kernel/phase-runner.d.ts +10 -0
  97. package/dist/src/engine/kernel/phase-runner.js +155 -0
  98. package/dist/src/engine/kernel/post-processor.d.ts +17 -0
  99. package/dist/src/engine/kernel/post-processor.js +131 -0
  100. package/dist/src/engine/kernel/types.d.ts +107 -0
  101. package/dist/src/engine/kernel/types.js +1 -0
  102. package/dist/src/engine/kernel/unit-executor.d.ts +6 -0
  103. package/dist/src/engine/kernel/unit-executor.js +132 -0
  104. package/dist/src/engine/lcl-manager.d.ts +44 -0
  105. package/dist/src/engine/lcl-manager.js +143 -0
  106. package/dist/src/engine/middleware/cache.d.ts +7 -0
  107. package/dist/src/engine/middleware/cache.js +29 -0
  108. package/dist/src/engine/middleware/chain.d.ts +18 -0
  109. package/dist/src/engine/middleware/chain.js +45 -0
  110. package/dist/src/engine/middleware/firewall.d.ts +8 -0
  111. package/dist/src/engine/middleware/firewall.js +24 -0
  112. package/dist/src/engine/middleware/index.d.ts +4 -0
  113. package/dist/src/engine/middleware/index.js +3 -0
  114. package/dist/src/engine/middleware/types.d.ts +43 -0
  115. package/dist/src/engine/middleware/types.js +1 -0
  116. package/dist/src/engine/nebuchadnezzar-key.d.ts +61 -0
  117. package/dist/src/engine/nebuchadnezzar-key.js +203 -0
  118. package/dist/src/engine/neon-genesis.d.ts +52 -0
  119. package/dist/src/engine/neon-genesis.js +203 -0
  120. package/dist/src/engine/objective-judge.d.ts +53 -0
  121. package/dist/src/engine/objective-judge.js +214 -0
  122. package/dist/src/engine/offline-mode.d.ts +18 -0
  123. package/dist/src/engine/offline-mode.js +46 -0
  124. package/dist/src/engine/orchestrator.d.ts +79 -0
  125. package/dist/src/engine/orchestrator.js +58 -0
  126. package/dist/src/engine/secret-cipher.d.ts +26 -0
  127. package/dist/src/engine/secret-cipher.js +114 -0
  128. package/dist/src/engine/seele-council.d.ts +90 -0
  129. package/dist/src/engine/seele-council.js +482 -0
  130. package/dist/src/engine/self-destruct.d.ts +61 -0
  131. package/dist/src/engine/self-destruct.js +231 -0
  132. package/dist/src/engine/self-evolution.d.ts +64 -0
  133. package/dist/src/engine/self-evolution.js +368 -0
  134. package/dist/src/engine/sync-rate.d.ts +45 -0
  135. package/dist/src/engine/sync-rate.js +151 -0
  136. package/dist/src/engine/type666-firewall.d.ts +76 -0
  137. package/dist/src/engine/type666-firewall.js +343 -0
  138. package/dist/src/engine/umbilical-cable.d.ts +41 -0
  139. package/dist/src/engine/umbilical-cable.js +192 -0
  140. package/dist/src/index.d.ts +106 -0
  141. package/dist/src/index.js +426 -0
  142. package/dist/src/mcp/server.d.ts +38 -0
  143. package/dist/src/mcp/server.js +196 -0
  144. package/dist/src/metrics/token-tracker.d.ts +38 -0
  145. package/dist/src/metrics/token-tracker.js +112 -0
  146. package/dist/src/parsers/json-extractor.d.ts +9 -0
  147. package/dist/src/parsers/json-extractor.js +239 -0
  148. package/dist/src/parsers/opinion-schema.d.ts +81 -0
  149. package/dist/src/parsers/opinion-schema.js +147 -0
  150. package/dist/src/parsers/unstructured-parser.d.ts +20 -0
  151. package/dist/src/parsers/unstructured-parser.js +122 -0
  152. package/dist/src/pipelines/architecture.d.ts +10 -0
  153. package/dist/src/pipelines/architecture.js +9 -0
  154. package/dist/src/pipelines/bug-analysis.d.ts +9 -0
  155. package/dist/src/pipelines/bug-analysis.js +8 -0
  156. package/dist/src/pipelines/code-review.d.ts +10 -0
  157. package/dist/src/pipelines/code-review.js +30 -0
  158. package/dist/src/pipelines/custom.d.ts +14 -0
  159. package/dist/src/pipelines/custom.js +29 -0
  160. package/dist/src/pipelines/registry.d.ts +9 -0
  161. package/dist/src/pipelines/registry.js +20 -0
  162. package/dist/src/prompts/personas.d.ts +6 -0
  163. package/dist/src/prompts/personas.js +44 -0
  164. package/dist/src/prompts/schemas.d.ts +4 -0
  165. package/dist/src/prompts/schemas.js +24 -0
  166. package/dist/src/prompts/templates.d.ts +6 -0
  167. package/dist/src/prompts/templates.js +91 -0
  168. package/dist/src/repl/accessibility.d.ts +23 -0
  169. package/dist/src/repl/accessibility.js +46 -0
  170. package/dist/src/repl/banner.d.ts +4 -0
  171. package/dist/src/repl/banner.js +28 -0
  172. package/dist/src/repl/boot-animation.d.ts +13 -0
  173. package/dist/src/repl/boot-animation.js +143 -0
  174. package/dist/src/repl/completer.d.ts +21 -0
  175. package/dist/src/repl/completer.js +168 -0
  176. package/dist/src/repl/context.d.ts +24 -0
  177. package/dist/src/repl/context.js +42 -0
  178. package/dist/src/repl/display-utils.d.ts +13 -0
  179. package/dist/src/repl/display-utils.js +65 -0
  180. package/dist/src/repl/event-listener.d.ts +18 -0
  181. package/dist/src/repl/event-listener.js +112 -0
  182. package/dist/src/repl/export-formatter.d.ts +8 -0
  183. package/dist/src/repl/export-formatter.js +73 -0
  184. package/dist/src/repl/ghost-text.d.ts +31 -0
  185. package/dist/src/repl/ghost-text.js +119 -0
  186. package/dist/src/repl/handoff-animation.d.ts +15 -0
  187. package/dist/src/repl/handoff-animation.js +65 -0
  188. package/dist/src/repl/history.d.ts +16 -0
  189. package/dist/src/repl/history.js +130 -0
  190. package/dist/src/repl/job-registry.d.ts +26 -0
  191. package/dist/src/repl/job-registry.js +80 -0
  192. package/dist/src/repl/magi-repl.d.ts +72 -0
  193. package/dist/src/repl/magi-repl.js +1008 -0
  194. package/dist/src/repl/multiline-input.d.ts +45 -0
  195. package/dist/src/repl/multiline-input.js +78 -0
  196. package/dist/src/repl/prompt-builder.d.ts +19 -0
  197. package/dist/src/repl/prompt-builder.js +36 -0
  198. package/dist/src/repl/repl-state.d.ts +5 -0
  199. package/dist/src/repl/repl-state.js +19 -0
  200. package/dist/src/repl/result-display.d.ts +8 -0
  201. package/dist/src/repl/result-display.js +195 -0
  202. package/dist/src/repl/session-stats.d.ts +26 -0
  203. package/dist/src/repl/session-stats.js +119 -0
  204. package/dist/src/repl/slash-commands.d.ts +60 -0
  205. package/dist/src/repl/slash-commands.js +725 -0
  206. package/dist/src/repl/terminal-sanitize.d.ts +14 -0
  207. package/dist/src/repl/terminal-sanitize.js +19 -0
  208. package/dist/src/reporters/console.d.ts +7 -0
  209. package/dist/src/reporters/console.js +78 -0
  210. package/dist/src/reporters/json.d.ts +2 -0
  211. package/dist/src/reporters/json.js +3 -0
  212. package/dist/src/reporters/markdown.d.ts +2 -0
  213. package/dist/src/reporters/markdown.js +65 -0
  214. package/dist/src/reporters/streaming.d.ts +20 -0
  215. package/dist/src/reporters/streaming.js +178 -0
  216. package/dist/src/tui/activity-log.d.ts +23 -0
  217. package/dist/src/tui/activity-log.js +67 -0
  218. package/dist/src/tui/animations.d.ts +39 -0
  219. package/dist/src/tui/animations.js +167 -0
  220. package/dist/src/tui/ansi.d.ts +28 -0
  221. package/dist/src/tui/ansi.js +51 -0
  222. package/dist/src/tui/boot-sequence.d.ts +11 -0
  223. package/dist/src/tui/boot-sequence.js +98 -0
  224. package/dist/src/tui/colors.d.ts +101 -0
  225. package/dist/src/tui/colors.js +71 -0
  226. package/dist/src/tui/header.d.ts +24 -0
  227. package/dist/src/tui/header.js +122 -0
  228. package/dist/src/tui/index.d.ts +3 -0
  229. package/dist/src/tui/index.js +3 -0
  230. package/dist/src/tui/keypress.d.ts +25 -0
  231. package/dist/src/tui/keypress.js +95 -0
  232. package/dist/src/tui/layout.d.ts +74 -0
  233. package/dist/src/tui/layout.js +171 -0
  234. package/dist/src/tui/magi-tui.d.ts +101 -0
  235. package/dist/src/tui/magi-tui.js +754 -0
  236. package/dist/src/tui/panel.d.ts +45 -0
  237. package/dist/src/tui/panel.js +292 -0
  238. package/dist/src/tui/screen-buffer.d.ts +54 -0
  239. package/dist/src/tui/screen-buffer.js +262 -0
  240. package/dist/src/tui/status-bar.d.ts +25 -0
  241. package/dist/src/tui/status-bar.js +124 -0
  242. package/dist/src/tui/terminal-detect.d.ts +26 -0
  243. package/dist/src/tui/terminal-detect.js +44 -0
  244. package/dist/src/tui/tui-helpers.d.ts +12 -0
  245. package/dist/src/tui/tui-helpers.js +37 -0
  246. package/dist/src/types/adapter.d.ts +75 -0
  247. package/dist/src/types/adapter.js +36 -0
  248. package/dist/src/types/config.d.ts +108 -0
  249. package/dist/src/types/config.js +85 -0
  250. package/dist/src/types/consensus.d.ts +55 -0
  251. package/dist/src/types/consensus.js +17 -0
  252. package/dist/src/types/core.d.ts +178 -0
  253. package/dist/src/types/core.js +85 -0
  254. package/dist/src/types/magi-api.d.ts +62 -0
  255. package/dist/src/types/magi-api.js +7 -0
  256. package/dist/src/types/phase-h.d.ts +142 -0
  257. package/dist/src/types/phase-h.js +7 -0
  258. package/dist/src/types/phase-i.d.ts +186 -0
  259. package/dist/src/types/phase-i.js +6 -0
  260. package/dist/src/types/phase-k.d.ts +259 -0
  261. package/dist/src/types/phase-k.js +6 -0
  262. package/dist/src/types/phase-l.d.ts +199 -0
  263. package/dist/src/types/phase-l.js +6 -0
  264. package/dist/src/types/pipeline.d.ts +37 -0
  265. package/dist/src/types/pipeline.js +2 -0
  266. package/dist/src/utils/abstain-factory.d.ts +2 -0
  267. package/dist/src/utils/abstain-factory.js +18 -0
  268. package/dist/src/utils/errors.d.ts +34 -0
  269. package/dist/src/utils/errors.js +59 -0
  270. package/dist/src/utils/file-validator.d.ts +50 -0
  271. package/dist/src/utils/file-validator.js +124 -0
  272. package/dist/src/utils/fire-and-forget.d.ts +5 -0
  273. package/dist/src/utils/fire-and-forget.js +10 -0
  274. package/dist/src/utils/flag-validator.d.ts +21 -0
  275. package/dist/src/utils/flag-validator.js +79 -0
  276. package/dist/src/utils/freeze.d.ts +8 -0
  277. package/dist/src/utils/freeze.js +16 -0
  278. package/dist/src/utils/language-detector.d.ts +16 -0
  279. package/dist/src/utils/language-detector.js +159 -0
  280. package/dist/src/utils/latency-tracker.d.ts +45 -0
  281. package/dist/src/utils/latency-tracker.js +100 -0
  282. package/dist/src/utils/logger.d.ts +33 -0
  283. package/dist/src/utils/logger.js +112 -0
  284. package/dist/src/utils/process.d.ts +40 -0
  285. package/dist/src/utils/process.js +253 -0
  286. package/dist/src/utils/retry.d.ts +12 -0
  287. package/dist/src/utils/retry.js +30 -0
  288. package/dist/src/utils/safe-fs.d.ts +38 -0
  289. package/dist/src/utils/safe-fs.js +56 -0
  290. package/dist/src/utils/safe-json-parse.d.ts +15 -0
  291. package/dist/src/utils/safe-json-parse.js +49 -0
  292. package/dist/src/utils/sanitize.d.ts +14 -0
  293. package/dist/src/utils/sanitize.js +186 -0
  294. package/dist/src/utils/semaphore.d.ts +22 -0
  295. package/dist/src/utils/semaphore.js +57 -0
  296. package/dist/src/utils/shutdown.d.ts +6 -0
  297. package/dist/src/utils/shutdown.js +51 -0
  298. package/dist/src/utils/tty.d.ts +5 -0
  299. package/dist/src/utils/tty.js +7 -0
  300. package/package.json +82 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * B-09 アンビリカルケーブル (UmbilicalCable)
3
+ *
4
+ * ユニットの接続状態を監視する。スライディングウィンドウ(直近5回)で
5
+ * 3回以上失敗するとdisconnected判定。活動限界タイマー付き。
6
+ */
7
+ /** Window size for failure tracking */
8
+ const WINDOW_SIZE = 5;
9
+ /** Failure threshold within window to trigger disconnect */
10
+ const FAILURE_THRESHOLD = 3;
11
+ /** Degraded threshold (2 failures in window) */
12
+ const DEGRADED_THRESHOLD = 2;
13
+ /** Default battery limit: 5 minutes */
14
+ const DEFAULT_BATTERY_LIMIT_MS = 300_000;
15
+ /** Time in ms before OPEN circuit transitions to HALF_OPEN for probing */
16
+ const CIRCUIT_RECOVERY_MS = 30_000;
17
+ export class UmbilicalCable {
18
+ states = new Map();
19
+ circuitStates = new Map();
20
+ halfOpenProbeInFlight = new Set();
21
+ constructor(units, batteryLimitMs) {
22
+ for (const unit of units) {
23
+ this.states.set(unit, {
24
+ unit,
25
+ status: 'connected',
26
+ recentResults: [],
27
+ batteryLimitMs: batteryLimitMs ?? DEFAULT_BATTERY_LIMIT_MS,
28
+ });
29
+ }
30
+ }
31
+ /**
32
+ * Record a unit's execution result.
33
+ * Updates the sliding window and recalculates status.
34
+ */
35
+ recordResult(unit, result, eventBus) {
36
+ const state = this.getOrCreateState(unit);
37
+ const previousStatus = state.status;
38
+ // Add to sliding window
39
+ state.recentResults.push(result);
40
+ if (state.recentResults.length > WINDOW_SIZE) {
41
+ state.recentResults.shift();
42
+ }
43
+ // Count failures in window
44
+ const failures = state.recentResults.filter(r => r !== 'SUCCESS').length;
45
+ // Determine new status
46
+ let newStatus;
47
+ if (failures >= FAILURE_THRESHOLD) {
48
+ newStatus = 'disconnected';
49
+ if (previousStatus !== 'disconnected') {
50
+ state.disconnectedAt = Date.now();
51
+ }
52
+ }
53
+ else if (failures >= DEGRADED_THRESHOLD) {
54
+ newStatus = 'degraded';
55
+ state.disconnectedAt = undefined;
56
+ }
57
+ else {
58
+ newStatus = 'connected';
59
+ state.disconnectedAt = undefined;
60
+ }
61
+ state.status = newStatus;
62
+ // Circuit breaker state transitions
63
+ const currentCircuit = this.circuitStates.get(unit) ?? 'CLOSED';
64
+ if (result === 'SUCCESS' && (currentCircuit === 'HALF_OPEN' || currentCircuit === 'OPEN')) {
65
+ this.circuitStates.set(unit, 'CLOSED');
66
+ this.halfOpenProbeInFlight.delete(unit);
67
+ }
68
+ else if (newStatus === 'disconnected') {
69
+ // Reset disconnectedAt when transitioning from HALF_OPEN back to OPEN
70
+ // so the recovery timer restarts (prevents immediate re-probe)
71
+ if (currentCircuit === 'HALF_OPEN') {
72
+ state.disconnectedAt = Date.now();
73
+ }
74
+ this.circuitStates.set(unit, 'OPEN');
75
+ this.halfOpenProbeInFlight.delete(unit);
76
+ }
77
+ // Emit event if status changed
78
+ if (previousStatus !== newStatus && eventBus) {
79
+ eventBus.emit('umbilical:status_changed', {
80
+ unit,
81
+ previousStatus,
82
+ newStatus,
83
+ emittedAt: new Date(),
84
+ });
85
+ }
86
+ return newStatus;
87
+ }
88
+ /** Check if a request should be allowed through the circuit breaker */
89
+ shouldAllow(unit) {
90
+ const circuit = this.circuitStates.get(unit) ?? 'CLOSED';
91
+ if (circuit === 'CLOSED')
92
+ return true;
93
+ if (circuit === 'OPEN') {
94
+ // Check if enough time has passed for a probe
95
+ const state = this.states.get(unit);
96
+ if (state?.disconnectedAt && Date.now() - state.disconnectedAt >= CIRCUIT_RECOVERY_MS) {
97
+ this.circuitStates.set(unit, 'HALF_OPEN');
98
+ this.halfOpenProbeInFlight.add(unit);
99
+ return true; // Allow one probe request
100
+ }
101
+ return false; // Fail fast
102
+ }
103
+ // HALF_OPEN: only allow if no probe is already in flight
104
+ if (this.halfOpenProbeInFlight.has(unit)) {
105
+ return false;
106
+ }
107
+ this.halfOpenProbeInFlight.add(unit);
108
+ return true;
109
+ }
110
+ /** Get the circuit state for a unit */
111
+ getCircuitState(unit) {
112
+ return this.circuitStates.get(unit) ?? 'CLOSED';
113
+ }
114
+ /** Check if a unit's battery is depleted (past activity limit) */
115
+ isBatteryDepleted(unit) {
116
+ const state = this.states.get(unit);
117
+ if (!state || state.status !== 'disconnected' || !state.disconnectedAt) {
118
+ return false;
119
+ }
120
+ return Date.now() - state.disconnectedAt >= state.batteryLimitMs;
121
+ }
122
+ /** Get the current status of a unit */
123
+ getStatus(unit) {
124
+ return this.states.get(unit)?.status ?? 'connected';
125
+ }
126
+ /** Get full state for a unit */
127
+ getState(unit) {
128
+ return this.states.get(unit);
129
+ }
130
+ /** Get all unit statuses */
131
+ getAllStatuses() {
132
+ const result = new Map();
133
+ for (const [unit, state] of this.states) {
134
+ result.set(unit, state.status);
135
+ }
136
+ return result;
137
+ }
138
+ /**
139
+ * Format countdown timer for a disconnected unit.
140
+ * Returns null if unit is connected or not tracked.
141
+ */
142
+ formatCountdown(unit) {
143
+ const state = this.states.get(unit);
144
+ if (!state || state.status !== 'disconnected' || !state.disconnectedAt) {
145
+ return null;
146
+ }
147
+ const elapsed = Date.now() - state.disconnectedAt;
148
+ const remaining = Math.max(0, state.batteryLimitMs - elapsed);
149
+ const minutes = Math.floor(remaining / 60_000);
150
+ const seconds = Math.floor((remaining % 60_000) / 1_000);
151
+ const mm = String(minutes).padStart(2, '0');
152
+ const ss = String(seconds).padStart(2, '0');
153
+ const totalBlocks = 16;
154
+ const ratio = remaining / state.batteryLimitMs;
155
+ const filled = Math.round(ratio * totalBlocks);
156
+ const bar = '█'.repeat(filled) + '░'.repeat(totalBlocks - filled);
157
+ return `[TIMER] ${bar} 活動限界まで ${mm}:${ss}`;
158
+ }
159
+ /** Reset a unit's status (e.g., when it comes back online) */
160
+ reconnect(unit, eventBus) {
161
+ const state = this.states.get(unit);
162
+ if (!state)
163
+ return;
164
+ const previousStatus = state.status;
165
+ state.status = 'connected';
166
+ state.recentResults = [];
167
+ state.disconnectedAt = undefined;
168
+ this.circuitStates.set(unit, 'CLOSED');
169
+ this.halfOpenProbeInFlight.delete(unit);
170
+ if (previousStatus !== 'connected' && eventBus) {
171
+ eventBus.emit('umbilical:status_changed', {
172
+ unit,
173
+ previousStatus,
174
+ newStatus: 'connected',
175
+ emittedAt: new Date(),
176
+ });
177
+ }
178
+ }
179
+ getOrCreateState(unit) {
180
+ let state = this.states.get(unit);
181
+ if (!state) {
182
+ state = {
183
+ unit,
184
+ status: 'connected',
185
+ recentResults: [],
186
+ batteryLimitMs: DEFAULT_BATTERY_LIMIT_MS,
187
+ };
188
+ this.states.set(unit, state);
189
+ }
190
+ return state;
191
+ }
192
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * MAGI System - Public API
3
+ *
4
+ * Usage:
5
+ * import { Magi } from 'magi-ai';
6
+ * const magi = new Magi();
7
+ * const result = await magi.deliberate({ type: 'code-review', ... });
8
+ */
9
+ import type { MagiTask, MagiDeliberation } from './types/core.js';
10
+ import type { MagiConfig } from './types/config.js';
11
+ import type { MagiRuntime, MagiDiagnostics, MagiAdmin } from './types/magi-api.js';
12
+ import { MagiEventBus } from './engine/events.js';
13
+ import { EngramManager } from './engine/engram-manager.js';
14
+ import type { MagiEventMap, MagiEventName } from './engine/events.js';
15
+ import type { DeliberationTokenSummary } from './metrics/token-tracker.js';
16
+ export interface MagiSystemStatus {
17
+ units: Array<{
18
+ unit: string;
19
+ health: string | Error;
20
+ cableStatus: string;
21
+ syncRate: number;
22
+ }>;
23
+ atFieldStreak: number;
24
+ }
25
+ export declare class Magi {
26
+ private orchestrator;
27
+ private berserkOrchestrator;
28
+ private adapters;
29
+ private pipelines;
30
+ private contextManager;
31
+ private config;
32
+ private eventBus;
33
+ private tokenTracker;
34
+ private engramManager;
35
+ private syncRateTracker;
36
+ private umbilicalCable;
37
+ private atField;
38
+ private initPromise;
39
+ private initialized;
40
+ private gospel;
41
+ private driftDetector;
42
+ private lclManager;
43
+ private type666Firewall;
44
+ private nebuchadnezzarKey;
45
+ private secretCipher;
46
+ private objectiveJudge;
47
+ private dummyPlug;
48
+ private offlineMode;
49
+ private iruelBattle;
50
+ private _angelDetector?;
51
+ private _deadSeaScrolls?;
52
+ private _selfEvolution?;
53
+ private _seeleCouncil?;
54
+ private _selfDestruct?;
55
+ private _neonGenesis?;
56
+ private _runtime?;
57
+ private _diagnostics?;
58
+ private _admin?;
59
+ constructor(config?: Partial<MagiConfig>);
60
+ private ensureInitialized;
61
+ private get angelDetector();
62
+ private get deadSeaScrolls();
63
+ private get selfEvolution();
64
+ private get seeleCouncil();
65
+ private get selfDestructSequence();
66
+ private get neonGenesis();
67
+ get runtime(): Readonly<MagiRuntime>;
68
+ get diagnostics(): Readonly<MagiDiagnostics>;
69
+ get admin(): Readonly<MagiAdmin>;
70
+ deliberate(task: MagiTask, options?: {
71
+ signal?: AbortSignal;
72
+ }): Promise<MagiDeliberation>;
73
+ deliberateBerserk(task: MagiTask, options?: {
74
+ signal?: AbortSignal;
75
+ }): Promise<MagiDeliberation>;
76
+ on<K extends MagiEventName>(event: K, listener: (payload: MagiEventMap[K]) => void): this;
77
+ once<K extends MagiEventName>(event: K, listener: (payload: MagiEventMap[K]) => void): this;
78
+ off<K extends MagiEventName>(event: K, listener: (payload: MagiEventMap[K]) => void): this;
79
+ getTokenSummary(deliberationId?: string): DeliberationTokenSummary;
80
+ loadAllTokens(): Promise<DeliberationTokenSummary[]>;
81
+ getEventBus(): MagiEventBus;
82
+ getEngramManager(): EngramManager;
83
+ getSystemStatus(): Promise<MagiSystemStatus>;
84
+ healthCheck(): Promise<Map<string, string | Error>>;
85
+ }
86
+ export type { MagiTask, MagiDeliberation, MagiConfig };
87
+ export type { MagiOpinion, MagiUnit, Vote, TaskType } from './types/core.js';
88
+ export type { MagiRuntime, MagiDiagnostics, MagiAdmin, WatchHandle } from './types/magi-api.js';
89
+ export type { ConsensusResult, ConsensusDecision, DecisionProperties } from './types/consensus.js';
90
+ export { getDecisionProps, isApproval, isRejection, isUnanimous, isMajority, isDeadlock, getMajorityVote, } from './types/consensus.js';
91
+ export type { MagiEventMap, MagiEventName } from './engine/events.js';
92
+ export { MagiEventBus } from './engine/events.js';
93
+ export { StreamingProgressReporter } from './reporters/streaming.js';
94
+ export type { DeliberationTokenSummary } from './metrics/token-tracker.js';
95
+ export { MagiTui, type MagiTuiOptions } from './tui/index.js';
96
+ export { AngelDetector } from './engine/angel-detector.js';
97
+ export { DeadSeaScrolls } from './engine/dead-sea-scrolls.js';
98
+ export { NebuchadnezzarKey } from './engine/nebuchadnezzar-key.js';
99
+ export { SelfDestructSequence } from './engine/self-destruct.js';
100
+ export { Type666Firewall } from './engine/type666-firewall.js';
101
+ export type { AngelDetection, AngelType, Prophecy, ProphecyLevel } from './types/phase-k.js';
102
+ export { NeonGenesis } from './engine/neon-genesis.js';
103
+ export { IruelBattleSystem } from './engine/iruel-battle.js';
104
+ export { SelfEvolutionEngine } from './engine/self-evolution.js';
105
+ export { SeeleCouncil } from './engine/seele-council.js';
106
+ export type { GenesisLog, CorruptionLevel, ConsistencyCheck, IruelBattlePhase, DiagnosticStats, EvolutionGeneration, EvolutionLineage, MagiNodeId, SeeleSession, } from './types/phase-l.js';