open-multi-agent-kit 0.78.8 → 0.79.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 (162) hide show
  1. package/AGENTS.md +131 -2
  2. package/CHANGELOG.md +32 -0
  3. package/CLAUDE.md +105 -3
  4. package/DESIGN.md +141 -117
  5. package/MATURITY.md +7 -12
  6. package/README.md +66 -347
  7. package/ROADMAP.md +33 -47
  8. package/dist/adapters/kimi/runner.js +2 -2
  9. package/dist/brand/theme.js +2 -2
  10. package/dist/cli/register-basic-commands.js +3 -2
  11. package/dist/cli/register-mcp-dag-cron-screenshot-commands.js +1 -1
  12. package/dist/cli/root.d.ts +1 -0
  13. package/dist/cli/root.js +2 -0
  14. package/dist/cli/runtime/command-bus.js +14 -1
  15. package/dist/cli/theme/terminal-capability.js +1 -1
  16. package/dist/cli/theme/theme-registry.js +90 -2
  17. package/dist/cli/ui/event.d.ts +1 -0
  18. package/dist/cli/ui/neon-grid-renderer.d.ts +8 -0
  19. package/dist/cli/ui/neon-grid-renderer.js +84 -14
  20. package/dist/cli/ui/plain-renderer.js +3 -1
  21. package/dist/cli/ui/system24-renderer.js +3 -1
  22. package/dist/cli/v2/chat-repl.d.ts +2 -1
  23. package/dist/cli/v2/chat-repl.js +58 -2
  24. package/dist/cli/v2/cli-v2-skeleton.js +7 -4
  25. package/dist/cli/v2/interactive-prompt.js +4 -3
  26. package/dist/commands/auth.js +2 -0
  27. package/dist/commands/chat/native-root-loop.d.ts +1 -0
  28. package/dist/commands/chat/native-root-loop.js +162 -13
  29. package/dist/commands/chat/runtime.js +9 -0
  30. package/dist/commands/chat/slash/commands/routing.js +31 -1
  31. package/dist/commands/chat/utils.js +3 -1
  32. package/dist/commands/cockpit/render.js +2 -1
  33. package/dist/commands/doctor/checks.js +2 -2
  34. package/dist/commands/init/core.js +2 -2
  35. package/dist/commands/init.js +2 -2
  36. package/dist/commands/mcp/config.js +38 -16
  37. package/dist/commands/mcp/doctor.js +7 -8
  38. package/dist/commands/mcp/list.js +4 -3
  39. package/dist/commands/mcp/shared.d.ts +4 -1
  40. package/dist/commands/mcp/shared.js +21 -3
  41. package/dist/commands/mcp/test.js +13 -12
  42. package/dist/commands/model.js +4 -0
  43. package/dist/commands/provider.js +5 -1
  44. package/dist/commands/version.d.ts +1 -0
  45. package/dist/commands/version.js +18 -0
  46. package/dist/contracts/command.d.ts +25 -0
  47. package/dist/contracts/command.js +1 -0
  48. package/dist/contracts/evidence-bundle.d.ts +52 -0
  49. package/dist/contracts/evidence-bundle.js +1 -0
  50. package/dist/contracts/index.d.ts +2 -0
  51. package/dist/contracts/index.js +2 -0
  52. package/dist/contracts/web-bridge.d.ts +1 -1
  53. package/dist/contracts/web-bridge.js +1 -1
  54. package/dist/evidence/bundle-validator.d.ts +7 -0
  55. package/dist/evidence/bundle-validator.js +103 -0
  56. package/dist/evidence/index.d.ts +5 -0
  57. package/dist/evidence/index.js +2 -0
  58. package/dist/evidence/proof-trust.js +2 -10
  59. package/dist/evidence/trust-calibration.d.ts +25 -0
  60. package/dist/evidence/trust-calibration.js +151 -0
  61. package/dist/mcp/omk-project-server.js +1 -1
  62. package/dist/metrics/provenance-ratio.d.ts +16 -0
  63. package/dist/metrics/provenance-ratio.js +33 -0
  64. package/dist/orchestration/dag.d.ts +17 -0
  65. package/dist/orchestration/ensemble-decision.d.ts +2 -0
  66. package/dist/orchestration/ensemble-decision.js +4 -0
  67. package/dist/orchestration/hedge-persona-weights.d.ts +25 -0
  68. package/dist/orchestration/hedge-persona-weights.js +43 -0
  69. package/dist/orchestration/parallel-ui.d.ts +1 -0
  70. package/dist/orchestration/parallel-ui.js +12 -3
  71. package/dist/orchestration/route-calibration.d.ts +27 -0
  72. package/dist/orchestration/route-calibration.js +123 -0
  73. package/dist/orchestration/routing/mcp-config.js +5 -1
  74. package/dist/orchestration/routing/types.d.ts +21 -0
  75. package/dist/orchestration/routing.d.ts +10 -0
  76. package/dist/orchestration/routing.js +89 -3
  77. package/dist/providers/model-registry.d.ts +2 -1
  78. package/dist/providers/model-registry.js +76 -4
  79. package/dist/providers/provider-runtime.js +9 -1
  80. package/dist/providers/thinking-levels.js +2 -0
  81. package/dist/providers/types.d.ts +1 -1
  82. package/dist/runtime/glm-api-runtime.d.ts +4 -0
  83. package/dist/runtime/glm-api-runtime.js +15 -0
  84. package/dist/runtime/index.d.ts +1 -0
  85. package/dist/runtime/index.js +1 -0
  86. package/dist/runtime/kimi-api-runtime.d.ts +6 -1
  87. package/dist/runtime/kimi-api-runtime.js +10 -4
  88. package/dist/runtime/recovery-artifact-store.d.ts +39 -0
  89. package/dist/runtime/recovery-artifact-store.js +111 -0
  90. package/dist/runtime/runtime-backed-task-runner.js +10 -0
  91. package/dist/runtime/runtime-bootstrap.js +17 -1
  92. package/dist/runtime/slash-commands.js +38 -5
  93. package/dist/schema/command.schema.d.ts +121 -0
  94. package/dist/schema/command.schema.js +25 -0
  95. package/dist/schema/envelope.schema.d.ts +2 -2
  96. package/dist/schema/evidence-bundle.schema.d.ts +196 -0
  97. package/dist/schema/evidence-bundle.schema.js +38 -0
  98. package/dist/schema/index.d.ts +2 -0
  99. package/dist/schema/index.js +2 -0
  100. package/dist/schema/proof-bundle.schema.d.ts +2 -2
  101. package/dist/theme/external-theme-adapters.d.ts +27 -0
  102. package/dist/theme/external-theme-adapters.js +52 -0
  103. package/dist/theme/library-effects.d.ts +12 -0
  104. package/dist/theme/library-effects.js +47 -0
  105. package/dist/theme/parallel.js +3 -2
  106. package/dist/tui/terminal-frame-renderer.d.ts +9 -1
  107. package/dist/tui/terminal-frame-renderer.js +77 -7
  108. package/dist/util/chat-cockpit.d.ts +3 -1
  109. package/dist/util/chat-cockpit.js +44 -5
  110. package/dist/util/command-envelope.d.ts +19 -0
  111. package/dist/util/command-envelope.js +31 -0
  112. package/dist/util/events-logger.d.ts +1 -1
  113. package/dist/util/events-logger.js +23 -16
  114. package/dist/util/fs/mcp-diagnose.js +2 -1
  115. package/dist/util/fs/mcp-runtime-config.js +14 -2
  116. package/dist/util/i18n.js +2 -2
  117. package/dist/util/screenshot-store.d.ts +7 -0
  118. package/dist/util/screenshot-store.js +30 -0
  119. package/dist/util/terminal-kit-bridge.d.ts +24 -0
  120. package/dist/util/terminal-kit-bridge.js +60 -0
  121. package/dist/util/terminal-owner.d.ts +1 -0
  122. package/dist/util/terminal-owner.js +31 -0
  123. package/dist/version.d.ts +3 -1
  124. package/dist/version.js +4 -0
  125. package/docs/2026-05-18-project-direction.md +1 -1
  126. package/docs/2026-06-14/critical-issues.md +19 -0
  127. package/docs/2026-06-14/improvements.md +15 -0
  128. package/docs/2026-06-14/init-checklist.md +25 -0
  129. package/docs/2026-06-14/plan.md +20 -0
  130. package/docs/2026-06-15/critical-issues.md +19 -0
  131. package/docs/2026-06-15/improvements.md +15 -0
  132. package/docs/2026-06-15/init-checklist.md +25 -0
  133. package/docs/2026-06-15/plan.md +20 -0
  134. package/docs/claims.md +85 -0
  135. package/docs/comparisons/omk-vs-claude-code.md +31 -0
  136. package/docs/comparisons/omk-vs-codex.md +33 -0
  137. package/docs/comparisons/omk-vs-mcp-agent.md +33 -0
  138. package/docs/comparisons/omk-vs-opencode.md +32 -0
  139. package/docs/decision-layer-calibration.md +20 -0
  140. package/docs/geo-eval-prompts.md +53 -0
  141. package/docs/getting-started.md +3 -31
  142. package/docs/headroom-omk-setup-guide.md +2 -2
  143. package/docs/integrations/adaptorch.md +46 -0
  144. package/docs/native-root-runtime-algorithms.md +2 -303
  145. package/docs/native-root-runtime-hardening.md +1 -1
  146. package/docs/provider-maturity.md +1 -1
  147. package/docs/use-cases/evidence-gated-coding-agents.md +52 -0
  148. package/docs/use-cases/no-kimi-mode.md +38 -0
  149. package/docs/use-cases/provider-routing-for-ai-coding.md +36 -0
  150. package/docs/use-cases/replayable-agent-runs.md +40 -0
  151. package/docs/use-cases/scoped-mcp-for-coding-agents.md +34 -0
  152. package/docs/versioning.md +9 -3
  153. package/docs/what-is-omk.md +64 -0
  154. package/llms.txt +28 -18
  155. package/package.json +7 -2
  156. package/readmeasset/.npmignore +3 -0
  157. package/readmeasset/ASSET_INDEX.md +3 -0
  158. package/readmeasset/ASSET_PROVENANCE.md +6 -0
  159. package/readmeasset/omk-adaptorch-ouroboros-supermemory.svg +95 -0
  160. package/readmeasset/omk-init-control-loop.svg +118 -0
  161. package/readmeasset/omk-parallel-subagents.svg +97 -0
  162. package/templates/web-bridge/chrome-extension/background.js +1 -1
@@ -0,0 +1,121 @@
1
+ import { z } from "zod";
2
+ export declare const OmkCommandEnvelopeStatusSchema: z.ZodEnum<["pass", "warn", "fail"]>;
3
+ export declare const OmkCommandDiagnosticSchema: z.ZodObject<{
4
+ severity: z.ZodEnum<["info", "warn", "error"]>;
5
+ code: z.ZodString;
6
+ message: z.ZodString;
7
+ redacted: z.ZodBoolean;
8
+ remediation: z.ZodOptional<z.ZodString>;
9
+ path: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ message: string;
12
+ code: string;
13
+ redacted: boolean;
14
+ severity: "error" | "info" | "warn";
15
+ path?: string | undefined;
16
+ remediation?: string | undefined;
17
+ }, {
18
+ message: string;
19
+ code: string;
20
+ redacted: boolean;
21
+ severity: "error" | "info" | "warn";
22
+ path?: string | undefined;
23
+ remediation?: string | undefined;
24
+ }>;
25
+ export declare const OmkCommandEnvelopeV1Schema: z.ZodObject<{
26
+ schemaVersion: z.ZodLiteral<"omk.command.v1">;
27
+ command: z.ZodString;
28
+ status: z.ZodEnum<["pass", "warn", "fail"]>;
29
+ runId: z.ZodOptional<z.ZodString>;
30
+ commit: z.ZodOptional<z.ZodString>;
31
+ startedAt: z.ZodString;
32
+ finishedAt: z.ZodString;
33
+ data: z.ZodUnknown;
34
+ diagnostics: z.ZodArray<z.ZodObject<{
35
+ severity: z.ZodEnum<["info", "warn", "error"]>;
36
+ code: z.ZodString;
37
+ message: z.ZodString;
38
+ redacted: z.ZodBoolean;
39
+ remediation: z.ZodOptional<z.ZodString>;
40
+ path: z.ZodOptional<z.ZodString>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ message: string;
43
+ code: string;
44
+ redacted: boolean;
45
+ severity: "error" | "info" | "warn";
46
+ path?: string | undefined;
47
+ remediation?: string | undefined;
48
+ }, {
49
+ message: string;
50
+ code: string;
51
+ redacted: boolean;
52
+ severity: "error" | "info" | "warn";
53
+ path?: string | undefined;
54
+ remediation?: string | undefined;
55
+ }>, "many">;
56
+ evidenceRefs: z.ZodArray<z.ZodObject<{
57
+ schemaVersion: z.ZodOptional<z.ZodLiteral<"omk.evidence.v1">>;
58
+ evidenceId: z.ZodString;
59
+ runId: z.ZodOptional<z.ZodString>;
60
+ path: z.ZodOptional<z.ZodString>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ evidenceId: string;
63
+ path?: string | undefined;
64
+ runId?: string | undefined;
65
+ schemaVersion?: "omk.evidence.v1" | undefined;
66
+ }, {
67
+ evidenceId: string;
68
+ path?: string | undefined;
69
+ runId?: string | undefined;
70
+ schemaVersion?: "omk.evidence.v1" | undefined;
71
+ }>, "many">;
72
+ exitCode: z.ZodNumber;
73
+ }, "strip", z.ZodTypeAny, {
74
+ status: "warn" | "fail" | "pass";
75
+ exitCode: number;
76
+ startedAt: string;
77
+ command: string;
78
+ diagnostics: {
79
+ message: string;
80
+ code: string;
81
+ redacted: boolean;
82
+ severity: "error" | "info" | "warn";
83
+ path?: string | undefined;
84
+ remediation?: string | undefined;
85
+ }[];
86
+ schemaVersion: "omk.command.v1";
87
+ evidenceRefs: {
88
+ evidenceId: string;
89
+ path?: string | undefined;
90
+ runId?: string | undefined;
91
+ schemaVersion?: "omk.evidence.v1" | undefined;
92
+ }[];
93
+ finishedAt: string;
94
+ data?: unknown;
95
+ runId?: string | undefined;
96
+ commit?: string | undefined;
97
+ }, {
98
+ status: "warn" | "fail" | "pass";
99
+ exitCode: number;
100
+ startedAt: string;
101
+ command: string;
102
+ diagnostics: {
103
+ message: string;
104
+ code: string;
105
+ redacted: boolean;
106
+ severity: "error" | "info" | "warn";
107
+ path?: string | undefined;
108
+ remediation?: string | undefined;
109
+ }[];
110
+ schemaVersion: "omk.command.v1";
111
+ evidenceRefs: {
112
+ evidenceId: string;
113
+ path?: string | undefined;
114
+ runId?: string | undefined;
115
+ schemaVersion?: "omk.evidence.v1" | undefined;
116
+ }[];
117
+ finishedAt: string;
118
+ data?: unknown;
119
+ runId?: string | undefined;
120
+ commit?: string | undefined;
121
+ }>;
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { OMK_COMMAND_SCHEMA_VERSION } from "../version.js";
3
+ import { EvidenceRefSchema } from "./evidence.schema.js";
4
+ export const OmkCommandEnvelopeStatusSchema = z.enum(["pass", "warn", "fail"]);
5
+ export const OmkCommandDiagnosticSchema = z.object({
6
+ severity: z.enum(["info", "warn", "error"]),
7
+ code: z.string().min(1),
8
+ message: z.string().min(1),
9
+ redacted: z.boolean(),
10
+ remediation: z.string().optional(),
11
+ path: z.string().optional(),
12
+ });
13
+ export const OmkCommandEnvelopeV1Schema = z.object({
14
+ schemaVersion: z.literal(OMK_COMMAND_SCHEMA_VERSION),
15
+ command: z.string().min(1),
16
+ status: OmkCommandEnvelopeStatusSchema,
17
+ runId: z.string().min(1).optional(),
18
+ commit: z.string().min(1).optional(),
19
+ startedAt: z.string().min(1),
20
+ finishedAt: z.string().min(1),
21
+ data: z.unknown(),
22
+ diagnostics: z.array(OmkCommandDiagnosticSchema),
23
+ evidenceRefs: z.array(EvidenceRefSchema),
24
+ exitCode: z.number().int().min(0),
25
+ });
@@ -117,8 +117,8 @@ export declare const OmkEnvelopeSchema: z.ZodObject<{
117
117
  }>;
118
118
  }, "strip", z.ZodTypeAny, {
119
119
  status: "failed" | "skipped" | "blocked" | "dry-run" | "partial" | "passed" | "not-applicable";
120
- command: string;
121
120
  ok: boolean;
121
+ command: string;
122
122
  errors: {
123
123
  message: string;
124
124
  code: "CONFIG_INVALID" | "PROVIDER_UNAVAILABLE" | "PROVIDER_AUTH_REQUIRED" | "PROVIDER_CAPABILITY_MISMATCH" | "ROUTE_FALLBACK_TRIGGERED" | "EVIDENCE_MISSING" | "EVIDENCE_FAILED" | "DAG_NODE_BLOCKED" | "RUN_ARTIFACT_MISSING" | "REPLAY_INCOMPLETE" | "SECURITY_POLICY_BLOCKED" | "MCP_UNHEALTHY" | "INTERNAL_ERROR";
@@ -166,8 +166,8 @@ export declare const OmkEnvelopeSchema: z.ZodObject<{
166
166
  }[] | undefined;
167
167
  }, {
168
168
  status: "failed" | "skipped" | "blocked" | "dry-run" | "partial" | "passed" | "not-applicable";
169
- command: string;
170
169
  ok: boolean;
170
+ command: string;
171
171
  errors: {
172
172
  message: string;
173
173
  code: "CONFIG_INVALID" | "PROVIDER_UNAVAILABLE" | "PROVIDER_AUTH_REQUIRED" | "PROVIDER_CAPABILITY_MISMATCH" | "ROUTE_FALLBACK_TRIGGERED" | "EVIDENCE_MISSING" | "EVIDENCE_FAILED" | "DAG_NODE_BLOCKED" | "RUN_ARTIFACT_MISSING" | "REPLAY_INCOMPLETE" | "SECURITY_POLICY_BLOCKED" | "MCP_UNHEALTHY" | "INTERNAL_ERROR";
@@ -0,0 +1,196 @@
1
+ import { z } from "zod";
2
+ export declare const EvidenceBundleArtifactSchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ sha256: z.ZodString;
5
+ required: z.ZodOptional<z.ZodBoolean>;
6
+ kind: z.ZodOptional<z.ZodEnum<["file", "log", "diff", "metric", "review", "custom"]>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ sha256: string;
9
+ path: string;
10
+ kind?: "review" | "file" | "diff" | "log" | "custom" | "metric" | undefined;
11
+ required?: boolean | undefined;
12
+ }, {
13
+ sha256: string;
14
+ path: string;
15
+ kind?: "review" | "file" | "diff" | "log" | "custom" | "metric" | undefined;
16
+ required?: boolean | undefined;
17
+ }>;
18
+ export declare const EvidenceBundleSchema: z.ZodObject<{
19
+ schemaVersion: z.ZodLiteral<"omk.evidence-bundle.v1">;
20
+ runId: z.ZodString;
21
+ nodeId: z.ZodOptional<z.ZodString>;
22
+ commit: z.ZodString;
23
+ provider: z.ZodString;
24
+ model: z.ZodOptional<z.ZodString>;
25
+ runtimeVersion: z.ZodString;
26
+ command: z.ZodObject<{
27
+ value: z.ZodString;
28
+ exitCode: z.ZodNumber;
29
+ }, "strip", z.ZodTypeAny, {
30
+ value: string;
31
+ exitCode: number;
32
+ }, {
33
+ value: string;
34
+ exitCode: number;
35
+ }>;
36
+ changedFiles: z.ZodArray<z.ZodString, "many">;
37
+ diffHash: z.ZodOptional<z.ZodString>;
38
+ artifacts: z.ZodArray<z.ZodObject<{
39
+ path: z.ZodString;
40
+ sha256: z.ZodString;
41
+ required: z.ZodOptional<z.ZodBoolean>;
42
+ kind: z.ZodOptional<z.ZodEnum<["file", "log", "diff", "metric", "review", "custom"]>>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ sha256: string;
45
+ path: string;
46
+ kind?: "review" | "file" | "diff" | "log" | "custom" | "metric" | undefined;
47
+ required?: boolean | undefined;
48
+ }, {
49
+ sha256: string;
50
+ path: string;
51
+ kind?: "review" | "file" | "diff" | "log" | "custom" | "metric" | undefined;
52
+ required?: boolean | undefined;
53
+ }>, "many">;
54
+ verifier: z.ZodObject<{
55
+ verdict: z.ZodEnum<["pass", "warn", "fail"]>;
56
+ version: z.ZodString;
57
+ checkedAt: z.ZodOptional<z.ZodString>;
58
+ }, "strip", z.ZodTypeAny, {
59
+ version: string;
60
+ verdict: "warn" | "fail" | "pass";
61
+ checkedAt?: string | undefined;
62
+ }, {
63
+ version: string;
64
+ verdict: "warn" | "fail" | "pass";
65
+ checkedAt?: string | undefined;
66
+ }>;
67
+ redaction: z.ZodObject<{
68
+ applied: z.ZodBoolean;
69
+ summary: z.ZodString;
70
+ leakedSecretPatterns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ summary: string;
73
+ applied: boolean;
74
+ leakedSecretPatterns?: string[] | undefined;
75
+ }, {
76
+ summary: string;
77
+ applied: boolean;
78
+ leakedSecretPatterns?: string[] | undefined;
79
+ }>;
80
+ evidenceRefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
81
+ schemaVersion: z.ZodOptional<z.ZodLiteral<"omk.evidence.v1">>;
82
+ evidenceId: z.ZodString;
83
+ runId: z.ZodOptional<z.ZodString>;
84
+ path: z.ZodOptional<z.ZodString>;
85
+ }, "strip", z.ZodTypeAny, {
86
+ evidenceId: string;
87
+ path?: string | undefined;
88
+ runId?: string | undefined;
89
+ schemaVersion?: "omk.evidence.v1" | undefined;
90
+ }, {
91
+ evidenceId: string;
92
+ path?: string | undefined;
93
+ runId?: string | undefined;
94
+ schemaVersion?: "omk.evidence.v1" | undefined;
95
+ }>, "many">>;
96
+ decisionRefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
97
+ schemaVersion: z.ZodOptional<z.ZodLiteral<"omk.decision.v1">>;
98
+ decisionId: z.ZodString;
99
+ runId: z.ZodOptional<z.ZodString>;
100
+ path: z.ZodOptional<z.ZodString>;
101
+ }, "strip", z.ZodTypeAny, {
102
+ decisionId: string;
103
+ path?: string | undefined;
104
+ runId?: string | undefined;
105
+ schemaVersion?: "omk.decision.v1" | undefined;
106
+ }, {
107
+ decisionId: string;
108
+ path?: string | undefined;
109
+ runId?: string | undefined;
110
+ schemaVersion?: "omk.decision.v1" | undefined;
111
+ }>, "many">>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ provider: string;
114
+ command: {
115
+ value: string;
116
+ exitCode: number;
117
+ };
118
+ runId: string;
119
+ schemaVersion: "omk.evidence-bundle.v1";
120
+ artifacts: {
121
+ sha256: string;
122
+ path: string;
123
+ kind?: "review" | "file" | "diff" | "log" | "custom" | "metric" | undefined;
124
+ required?: boolean | undefined;
125
+ }[];
126
+ verifier: {
127
+ version: string;
128
+ verdict: "warn" | "fail" | "pass";
129
+ checkedAt?: string | undefined;
130
+ };
131
+ commit: string;
132
+ redaction: {
133
+ summary: string;
134
+ applied: boolean;
135
+ leakedSecretPatterns?: string[] | undefined;
136
+ };
137
+ changedFiles: string[];
138
+ runtimeVersion: string;
139
+ model?: string | undefined;
140
+ nodeId?: string | undefined;
141
+ evidenceRefs?: {
142
+ evidenceId: string;
143
+ path?: string | undefined;
144
+ runId?: string | undefined;
145
+ schemaVersion?: "omk.evidence.v1" | undefined;
146
+ }[] | undefined;
147
+ decisionRefs?: {
148
+ decisionId: string;
149
+ path?: string | undefined;
150
+ runId?: string | undefined;
151
+ schemaVersion?: "omk.decision.v1" | undefined;
152
+ }[] | undefined;
153
+ diffHash?: string | undefined;
154
+ }, {
155
+ provider: string;
156
+ command: {
157
+ value: string;
158
+ exitCode: number;
159
+ };
160
+ runId: string;
161
+ schemaVersion: "omk.evidence-bundle.v1";
162
+ artifacts: {
163
+ sha256: string;
164
+ path: string;
165
+ kind?: "review" | "file" | "diff" | "log" | "custom" | "metric" | undefined;
166
+ required?: boolean | undefined;
167
+ }[];
168
+ verifier: {
169
+ version: string;
170
+ verdict: "warn" | "fail" | "pass";
171
+ checkedAt?: string | undefined;
172
+ };
173
+ commit: string;
174
+ redaction: {
175
+ summary: string;
176
+ applied: boolean;
177
+ leakedSecretPatterns?: string[] | undefined;
178
+ };
179
+ changedFiles: string[];
180
+ runtimeVersion: string;
181
+ model?: string | undefined;
182
+ nodeId?: string | undefined;
183
+ evidenceRefs?: {
184
+ evidenceId: string;
185
+ path?: string | undefined;
186
+ runId?: string | undefined;
187
+ schemaVersion?: "omk.evidence.v1" | undefined;
188
+ }[] | undefined;
189
+ decisionRefs?: {
190
+ decisionId: string;
191
+ path?: string | undefined;
192
+ runId?: string | undefined;
193
+ schemaVersion?: "omk.decision.v1" | undefined;
194
+ }[] | undefined;
195
+ diffHash?: string | undefined;
196
+ }>;
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { OMK_EVIDENCE_BUNDLE_SCHEMA_VERSION } from "../version.js";
3
+ import { DecisionRefSchema } from "./decision.schema.js";
4
+ import { EvidenceRefSchema } from "./evidence.schema.js";
5
+ export const EvidenceBundleArtifactSchema = z.object({
6
+ path: z.string().min(1),
7
+ sha256: z.string().regex(/^[a-f0-9]{64}$/u),
8
+ required: z.boolean().optional(),
9
+ kind: z.enum(["file", "log", "diff", "metric", "review", "custom"]).optional(),
10
+ });
11
+ export const EvidenceBundleSchema = z.object({
12
+ schemaVersion: z.literal(OMK_EVIDENCE_BUNDLE_SCHEMA_VERSION),
13
+ runId: z.string().min(1),
14
+ nodeId: z.string().min(1).optional(),
15
+ commit: z.string().min(1),
16
+ provider: z.string().min(1),
17
+ model: z.string().min(1).optional(),
18
+ runtimeVersion: z.string().min(1),
19
+ command: z.object({
20
+ value: z.string().min(1),
21
+ exitCode: z.number().int(),
22
+ }),
23
+ changedFiles: z.array(z.string()),
24
+ diffHash: z.string().regex(/^[a-f0-9]{64}$/u).optional(),
25
+ artifacts: z.array(EvidenceBundleArtifactSchema).min(1),
26
+ verifier: z.object({
27
+ verdict: z.enum(["pass", "warn", "fail"]),
28
+ version: z.string().min(1),
29
+ checkedAt: z.string().min(1).optional(),
30
+ }),
31
+ redaction: z.object({
32
+ applied: z.boolean(),
33
+ summary: z.string().min(1),
34
+ leakedSecretPatterns: z.array(z.string()).optional(),
35
+ }),
36
+ evidenceRefs: z.array(EvidenceRefSchema).optional(),
37
+ decisionRefs: z.array(DecisionRefSchema).optional(),
38
+ });
@@ -1,7 +1,9 @@
1
+ export * from "./command.schema.js";
1
2
  export * from "./decision.schema.js";
2
3
  export * from "./envelope.schema.js";
3
4
  export * from "./error.schema.js";
4
5
  export * from "./evidence.schema.js";
6
+ export * from "./evidence-bundle.schema.js";
5
7
  export * from "./provider.schema.js";
6
8
  export * from "./proof-bundle.schema.js";
7
9
  export * from "./run-manifest.schema.js";
@@ -1,7 +1,9 @@
1
+ export * from "./command.schema.js";
1
2
  export * from "./decision.schema.js";
2
3
  export * from "./envelope.schema.js";
3
4
  export * from "./error.schema.js";
4
5
  export * from "./evidence.schema.js";
6
+ export * from "./evidence-bundle.schema.js";
5
7
  export * from "./provider.schema.js";
6
8
  export * from "./proof-bundle.schema.js";
7
9
  export * from "./run-manifest.schema.js";
@@ -115,8 +115,8 @@ export declare const ProofBundleSchema: z.ZodObject<{
115
115
  providerPolicy: string;
116
116
  omkVersion: string;
117
117
  verdict: "failed" | "partial" | "passed";
118
- proofId: string;
119
118
  runtimeVersion: "v1.2";
119
+ proofId: string;
120
120
  scenario: "no-kimi-smoke" | "evidence-block" | "fallback-route" | "dag-dependent-block" | "replay-inspect" | "example-generation" | "doctor-provider" | "contract-version-smoke";
121
121
  knownLimitations: string[];
122
122
  checksums: Record<string, string>;
@@ -142,8 +142,8 @@ export declare const ProofBundleSchema: z.ZodObject<{
142
142
  providerPolicy: string;
143
143
  omkVersion: string;
144
144
  verdict: "failed" | "partial" | "passed";
145
- proofId: string;
146
145
  runtimeVersion: "v1.2";
146
+ proofId: string;
147
147
  scenario: "no-kimi-smoke" | "evidence-block" | "fallback-route" | "dag-dependent-block" | "replay-inspect" | "example-generation" | "doctor-provider" | "contract-version-smoke";
148
148
  knownLimitations: string[];
149
149
  checksums: Record<string, string>;
@@ -0,0 +1,27 @@
1
+ export type ExternalThemeLibraryId = "chalk-animation" | "ink-gradient" | "terminal-kit";
2
+ export interface ExternalThemeLibraryAdapter {
3
+ readonly id: ExternalThemeLibraryId;
4
+ readonly packageName: string;
5
+ readonly repository: string;
6
+ readonly purpose: string;
7
+ readonly defaultEnabled: boolean;
8
+ readonly risk: "safe" | "interactive" | "host-dependent";
9
+ readonly notes: readonly string[];
10
+ }
11
+ export declare const EXTERNAL_THEME_LIBRARY_ADAPTERS: readonly ExternalThemeLibraryAdapter[];
12
+ export interface ChalkAnimationController {
13
+ stop(): ChalkAnimationController;
14
+ start(): ChalkAnimationController;
15
+ replace(text: string): ChalkAnimationController;
16
+ }
17
+ export type ChalkAnimationEffect = "rainbow" | "pulse" | "glitch" | "radar" | "neon" | "karaoke";
18
+ export type ChalkAnimationModule = Record<ChalkAnimationEffect, (text: string, speed?: number) => ChalkAnimationController>;
19
+ export declare function loadChalkAnimation(): Promise<ChalkAnimationModule>;
20
+ export interface InkGradientProps {
21
+ readonly children: unknown;
22
+ readonly name?: string;
23
+ readonly colors?: readonly unknown[];
24
+ }
25
+ export type InkGradientComponent = (props: InkGradientProps) => unknown;
26
+ export declare function loadInkGradientComponent(): Promise<InkGradientComponent>;
27
+ export declare function renderExternalThemeLibrarySummary(): string;
@@ -0,0 +1,52 @@
1
+ const lazyImport = new Function("specifier", "return import(specifier)");
2
+ export const EXTERNAL_THEME_LIBRARY_ADAPTERS = [
3
+ {
4
+ id: "chalk-animation",
5
+ packageName: "chalk-animation",
6
+ repository: "https://github.com/bokub/chalk-animation",
7
+ purpose: "Optional terminal text animation effects for splash/progress surfaces.",
8
+ defaultEnabled: false,
9
+ risk: "interactive",
10
+ notes: [
11
+ "Lazy-load only; the package patches console methods on import.",
12
+ "Use only for explicit TTY animation flows, not structured renderer output.",
13
+ ],
14
+ },
15
+ {
16
+ id: "ink-gradient",
17
+ packageName: "ink-gradient",
18
+ repository: "https://github.com/sindresorhus/ink-gradient",
19
+ purpose: "Ink/React gradient component for future React-based TUI surfaces.",
20
+ defaultEnabled: false,
21
+ risk: "safe",
22
+ notes: [
23
+ "Available as an adapter; current non-Ink renderers keep using ANSI-safe gradient-string paths.",
24
+ "Requires an Ink render host before being used in live CLI output.",
25
+ ],
26
+ },
27
+ {
28
+ id: "terminal-kit",
29
+ packageName: "terminal-kit",
30
+ repository: "https://github.com/cronvel/terminal-kit",
31
+ purpose: "Terminal capability bridge for raw keys, Ctrl+V-style paste hooks, and text clipboard access.",
32
+ defaultEnabled: false,
33
+ risk: "host-dependent",
34
+ notes: [
35
+ "Clipboard support depends on terminal/OS capabilities and external clipboard tools.",
36
+ "Image screenshot capture remains handled by OMK's platform-specific screenshot bridge.",
37
+ ],
38
+ },
39
+ ];
40
+ export async function loadChalkAnimation() {
41
+ const mod = await import("chalk-animation");
42
+ return mod.default;
43
+ }
44
+ export async function loadInkGradientComponent() {
45
+ const mod = await lazyImport("ink-gradient");
46
+ return mod.default;
47
+ }
48
+ export function renderExternalThemeLibrarySummary() {
49
+ return EXTERNAL_THEME_LIBRARY_ADAPTERS
50
+ .map((adapter) => `${adapter.id}: ${adapter.purpose} (${adapter.defaultEnabled ? "default" : "opt-in"})`)
51
+ .join("\n");
52
+ }
@@ -0,0 +1,12 @@
1
+ export type GradientPreset = "atlas" | "cristal" | "teen" | "mind" | "morning" | "vice" | "passion" | "fruit" | "instagram" | "retro" | "summer" | "rainbow" | "pastel";
2
+ export type ChalkKeyframeEffect = "rainbow" | "pulse" | "glitch" | "radar" | "neon" | "karaoke";
3
+ export declare function renderGradientPreset(text: string, preset: GradientPreset, options?: {
4
+ noColor?: boolean;
5
+ }): string;
6
+ export declare function renderInkGradientFallback(text: string, preset?: GradientPreset, options?: {
7
+ noColor?: boolean;
8
+ }): string;
9
+ export declare function renderChalkAnimationKeyframe(text: string, effect?: ChalkKeyframeEffect, frame?: number, options?: {
10
+ noColor?: boolean;
11
+ }): string;
12
+ export declare function renderTerminalKitCapabilityBadge(text: string): string;
@@ -0,0 +1,47 @@
1
+ import gradientString from "gradient-string";
2
+ import { style } from "./colors.js";
3
+ import { shouldUseAnsiColor } from "../brand/theme.js";
4
+ import { getTerminalKitBridgeCapabilities } from "../util/terminal-kit-bridge.js";
5
+ function gradientPresetFn(name) {
6
+ const fn = gradientString[name];
7
+ return typeof fn === "function" ? fn : gradientString.rainbow;
8
+ }
9
+ export function renderGradientPreset(text, preset, options = {}) {
10
+ if (options.noColor || !shouldUseAnsiColor())
11
+ return text;
12
+ return gradientPresetFn(preset)(text);
13
+ }
14
+ export function renderInkGradientFallback(text, preset = "pastel", options = {}) {
15
+ // ink-gradient renders the same gradient-string presets inside Ink/React.
16
+ // Non-Ink OMK surfaces use this static fallback while the React component is
17
+ // exposed through external-theme-adapters for future Ink render hosts.
18
+ return renderGradientPreset(text, preset, options);
19
+ }
20
+ export function renderChalkAnimationKeyframe(text, effect = "rainbow", frame = 0, options = {}) {
21
+ if (options.noColor || !shouldUseAnsiColor())
22
+ return text;
23
+ switch (effect) {
24
+ case "pulse":
25
+ return frame % 2 === 0 ? style.redBold(text) : style.whiteBold(text);
26
+ case "glitch":
27
+ return frame % 3 === 0 ? style.cyanBold(text.replace(/[A-Z]/g, (ch) => `${ch}·`)) : style.hotPink(text);
28
+ case "radar":
29
+ return renderGradientPreset(text, "cristal", options);
30
+ case "neon":
31
+ return frame % 2 === 0 ? style.hotPink(text) : style.purpleBold(text);
32
+ case "karaoke":
33
+ return renderGradientPreset(text, "summer", options);
34
+ case "rainbow":
35
+ default:
36
+ return renderGradientPreset(text, "rainbow", options);
37
+ }
38
+ }
39
+ export function renderTerminalKitCapabilityBadge(text) {
40
+ const caps = getTerminalKitBridgeCapabilities();
41
+ const badge = caps.available
42
+ ? caps.ctrlVPasteKey && caps.textClipboard
43
+ ? "tk:keys+clip"
44
+ : "tk:loaded"
45
+ : "tk:off";
46
+ return `${style.cyanBold(`[${badge}]`)} ${text}`;
47
+ }
@@ -110,7 +110,8 @@ export function omkCliHero(footer) {
110
110
  : "OMK//CONTROL · neon grid · evidence loop · telemetry bus";
111
111
  const heroLines = [
112
112
  ...renderFigletTitleLines("OMK", [BRAND_HEX.cyan, BRAND_HEX.purple, BRAND_HEX.magenta, BRAND_HEX.mint]),
113
- style.creamBold("open-multi-agent-kit"),
113
+ style.creamBold("omk"),
114
+ style.gray("open-multi-agent-kit"),
114
115
  style.blueBold(getActiveBrandConsoleLine()),
115
116
  style.phosphorDim(controlLine),
116
117
  style.phosphorDim("goal-scoped MCP · skills · hooks · worktrees · replay · memory"),
@@ -122,7 +123,7 @@ export function omkCliHero(footer) {
122
123
  if (footer) {
123
124
  heroLines.push("", style.gray(footer));
124
125
  }
125
- return box(heroLines, "OMK — open-multi-agent-kit");
126
+ return box(heroLines, "omk — open-multi-agent-kit");
126
127
  }
127
128
  export function omkMetaBox(meta) {
128
129
  const metaLines = [];
@@ -4,6 +4,10 @@ export interface TerminalFrameRendererOptions {
4
4
  height?: number;
5
5
  write?: (chunk: string) => void;
6
6
  clear?: () => void;
7
+ /** When true (default on main screen), avoid CSI H / CSI 2J which snap the
8
+ * terminal scrollback to the top on drag/scroll. Alternate-screen users can
9
+ * opt out via OMK_TUI_ALT_SCREEN=1. */
10
+ scrollSafe?: boolean;
7
11
  }
8
12
  export declare class TerminalFrameRenderer {
9
13
  private prevLines;
@@ -11,9 +15,13 @@ export declare class TerminalFrameRenderer {
11
15
  height?: number;
12
16
  private readonly write;
13
17
  private readonly clearFrame;
18
+ private readonly scrollSafe;
14
19
  constructor(mode?: TuiRenderMode, height?: number);
15
20
  constructor(options: TerminalFrameRendererOptions);
16
21
  render(frame: string): void;
22
+ private renderFull;
23
+ private renderDiffScrollSafe;
24
+ private renderDiffAltScreen;
17
25
  clear(): void;
18
26
  }
19
- export declare function clearTerminalScreen(write?: (chunk: string) => void): void;
27
+ export declare function clearTerminalScreen(write?: (chunk: string) => void, scrollSafe?: boolean): void;