@kontextmind/kxm 0.6.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 (227) hide show
  1. package/.claude-plugin/marketplace.json +19 -0
  2. package/.kxm/README.md +14 -0
  3. package/.kxm/assets/README.md +5 -0
  4. package/.kxm/assets/retrospectives/README.md +5 -0
  5. package/.kxm/config/README.md +5 -0
  6. package/.kxm/config/agents.json +43 -0
  7. package/.kxm/config/env.example +56 -0
  8. package/.kxm/config/update.example.yaml +9 -0
  9. package/.kxm/config/workflows/fix.json +160 -0
  10. package/.kxm/config/workflows/jira-development.json +116 -0
  11. package/.kxm/config/workflows/provenance-quorum.json +150 -0
  12. package/.kxm/config/workflows/v04-dogfood.json +72 -0
  13. package/CHANGELOG.md +465 -0
  14. package/LICENSE +21 -0
  15. package/README.md +306 -0
  16. package/SECURITY.md +72 -0
  17. package/docs/README.md +48 -0
  18. package/docs/agent-communication-envelopes-and-gates.md +553 -0
  19. package/docs/architecture.md +242 -0
  20. package/docs/assignment-runner.md +241 -0
  21. package/docs/configuration.md +361 -0
  22. package/docs/continuous-improvement.md +114 -0
  23. package/docs/getting-started.md +253 -0
  24. package/docs/kxm-handbook.md +1090 -0
  25. package/docs/operations.md +205 -0
  26. package/docs/provenance-gates.md +291 -0
  27. package/docs/skills.md +45 -0
  28. package/docs/templates/README.md +95 -0
  29. package/docs/templates/adr.md +88 -0
  30. package/docs/templates/architecture.md +120 -0
  31. package/docs/templates/bug-fix.md +109 -0
  32. package/docs/templates/feature.md +108 -0
  33. package/docs/templates/handoff.md +72 -0
  34. package/docs/templates/postmortem.md +77 -0
  35. package/docs/templates/research.md +100 -0
  36. package/docs/templates/review.md +85 -0
  37. package/docs/templates/runbook.md +73 -0
  38. package/docs/templates/test-plan.md +87 -0
  39. package/docs/templates/test-report.md +72 -0
  40. package/docs/test-matrix.md +121 -0
  41. package/docs/troubleshooting.md +249 -0
  42. package/docs/vnext/README.md +62 -0
  43. package/docs/vnext/architecture.md +185 -0
  44. package/docs/vnext/effects-and-recovery.md +172 -0
  45. package/docs/vnext/lifecycles.md +235 -0
  46. package/docs/vnext/migration.md +220 -0
  47. package/docs/vnext/routing.md +184 -0
  48. package/docs/vnext/synchronization.md +172 -0
  49. package/docs/vnext/terminology.md +240 -0
  50. package/docs/vnext/validation.md +335 -0
  51. package/docs/webhook-workflows.md +240 -0
  52. package/docs/workflow-guide.md +1150 -0
  53. package/examples/README.md +102 -0
  54. package/examples/provenance-workflow.json +40 -0
  55. package/examples/requester.ts +30 -0
  56. package/examples/reviewer-agent.ts +29 -0
  57. package/examples/roundtrip.ts +46 -0
  58. package/examples/vnext/.kxm/agents/coordinator.yaml +16 -0
  59. package/examples/vnext/.kxm/agents/critic-1.yaml +16 -0
  60. package/examples/vnext/.kxm/agents/critic-2.yaml +15 -0
  61. package/examples/vnext/.kxm/agents/critic-3.yaml +15 -0
  62. package/examples/vnext/.kxm/agents/implementer.yaml +15 -0
  63. package/examples/vnext/.kxm/agents/planner.yaml +13 -0
  64. package/examples/vnext/.kxm/agents/reproducer.yaml +15 -0
  65. package/examples/vnext/.kxm/agents/reviewer.yaml +15 -0
  66. package/examples/vnext/.kxm/gates.yaml +8 -0
  67. package/examples/vnext/.kxm/models/critic-claude.yaml +11 -0
  68. package/examples/vnext/.kxm/models/critic-gemini.yaml +11 -0
  69. package/examples/vnext/.kxm/models/critic-grok.yaml +12 -0
  70. package/examples/vnext/.kxm/models/implementation.yaml +14 -0
  71. package/examples/vnext/.kxm/models/primary.yaml +17 -0
  72. package/examples/vnext/.kxm/prices.yaml +111 -0
  73. package/examples/vnext/.kxm/project/env.yaml +7 -0
  74. package/examples/vnext/.kxm/project.yaml +32 -0
  75. package/examples/vnext/.kxm/repo/repo.yaml +8 -0
  76. package/examples/vnext/.kxm/workflows/default.yaml +92 -0
  77. package/examples/vnext/.kxm/workflows/fix.yaml +376 -0
  78. package/examples/vnext/.kxm/workflows/improve.yaml +57 -0
  79. package/examples/vnext/README.md +53 -0
  80. package/examples/vnext/records/assignment-result-recorded.json +63 -0
  81. package/examples/vnext/records/assignment-result.json +46 -0
  82. package/examples/vnext/records/context-candidate.json +42 -0
  83. package/examples/vnext/records/delivery-manifest.json +66 -0
  84. package/examples/vnext/records/effect-uncertainty-resolved-sync.json +67 -0
  85. package/examples/vnext/records/effect-uncertainty-resolved.json +62 -0
  86. package/examples/vnext/records/run-created.json +54 -0
  87. package/examples/vnext/records/sync-event.json +65 -0
  88. package/examples/vnext/repositories/api/.kxm/repo/env.yaml +7 -0
  89. package/examples/vnext/repositories/api/.kxm/repo/repo.yaml +8 -0
  90. package/examples/vnext/repositories/web/.kxm/repo/repo.yaml +8 -0
  91. package/examples/workflow-signal.ts +63 -0
  92. package/package.json +129 -0
  93. package/plugins/kxm/.claude-plugin/plugin.json +73 -0
  94. package/plugins/kxm/.mcp.json +19 -0
  95. package/plugins/kxm/README.md +93 -0
  96. package/plugins/kxm/dist/cli.js +42853 -0
  97. package/plugins/kxm/dist/client.js +416 -0
  98. package/plugins/kxm/dist/core.js +1823 -0
  99. package/plugins/kxm/dist/extension.js +3797 -0
  100. package/plugins/kxm/dist/mcp-server.js +17104 -0
  101. package/plugins/kxm/dist/runtime.js +23361 -0
  102. package/plugins/kxm/dist/server.js +13640 -0
  103. package/plugins/kxm/dist/vnext-runtime-supervisor.js +21109 -0
  104. package/plugins/kxm/package.json +12 -0
  105. package/plugins/kxm/skills/kxm/SKILL.md +97 -0
  106. package/plugins/kxm/skills/kxm/references/protocol.md +103 -0
  107. package/plugins/kxm/skills/kxm-session/SKILL.md +53 -0
  108. package/plugins/kxm/src/arbiter.ts +355 -0
  109. package/plugins/kxm/src/artifacts-exist.ts +62 -0
  110. package/plugins/kxm/src/autocomplete.ts +236 -0
  111. package/plugins/kxm/src/cli.ts +3707 -0
  112. package/plugins/kxm/src/client.ts +614 -0
  113. package/plugins/kxm/src/commands.ts +1063 -0
  114. package/plugins/kxm/src/config.ts +290 -0
  115. package/plugins/kxm/src/context/providers.ts +101 -0
  116. package/plugins/kxm/src/context-packet.ts +332 -0
  117. package/plugins/kxm/src/context.ts +499 -0
  118. package/plugins/kxm/src/core.ts +6 -0
  119. package/plugins/kxm/src/database.ts +563 -0
  120. package/plugins/kxm/src/diagnostics.ts +184 -0
  121. package/plugins/kxm/src/envelope.ts +118 -0
  122. package/plugins/kxm/src/extension.ts +895 -0
  123. package/plugins/kxm/src/external-effects.ts +299 -0
  124. package/plugins/kxm/src/github-watch.ts +255 -0
  125. package/plugins/kxm/src/hub-binding.ts +160 -0
  126. package/plugins/kxm/src/hub.ts +2502 -0
  127. package/plugins/kxm/src/improve.ts +383 -0
  128. package/plugins/kxm/src/inbox.ts +10 -0
  129. package/plugins/kxm/src/kxm-install-kind.ts +113 -0
  130. package/plugins/kxm/src/kxm-update-config.ts +39 -0
  131. package/plugins/kxm/src/kxm-update.ts +238 -0
  132. package/plugins/kxm/src/local-snapshot.ts +406 -0
  133. package/plugins/kxm/src/logger.ts +198 -0
  134. package/plugins/kxm/src/mcp-server.ts +143 -0
  135. package/plugins/kxm/src/memory.ts +385 -0
  136. package/plugins/kxm/src/nous-pi.ts +287 -0
  137. package/plugins/kxm/src/nous-provider.ts +729 -0
  138. package/plugins/kxm/src/price-calc.ts +87 -0
  139. package/plugins/kxm/src/prices.ts +121 -0
  140. package/plugins/kxm/src/protocol.ts +172 -0
  141. package/plugins/kxm/src/recovery.ts +211 -0
  142. package/plugins/kxm/src/redact.ts +26 -0
  143. package/plugins/kxm/src/retrospective.ts +400 -0
  144. package/plugins/kxm/src/routing.ts +830 -0
  145. package/plugins/kxm/src/runtime.ts +9 -0
  146. package/plugins/kxm/src/server.ts +117 -0
  147. package/plugins/kxm/src/session-work.ts +571 -0
  148. package/plugins/kxm/src/session.ts +184 -0
  149. package/plugins/kxm/src/skills.ts +535 -0
  150. package/plugins/kxm/src/state.ts +326 -0
  151. package/plugins/kxm/src/store.ts +637 -0
  152. package/plugins/kxm/src/studio-layout.ts +268 -0
  153. package/plugins/kxm/src/suggest.ts +162 -0
  154. package/plugins/kxm/src/task-manager.ts +244 -0
  155. package/plugins/kxm/src/telemetry.ts +116 -0
  156. package/plugins/kxm/src/tui.ts +1046 -0
  157. package/plugins/kxm/src/vnext-bindings.ts +403 -0
  158. package/plugins/kxm/src/vnext-config.ts +1646 -0
  159. package/plugins/kxm/src/vnext-engine-artifacts.ts +86 -0
  160. package/plugins/kxm/src/vnext-engine-command.ts +533 -0
  161. package/plugins/kxm/src/vnext-engine-compile.ts +722 -0
  162. package/plugins/kxm/src/vnext-engine-evidence.ts +273 -0
  163. package/plugins/kxm/src/vnext-engine-fold.ts +1400 -0
  164. package/plugins/kxm/src/vnext-engine-gate-records.ts +583 -0
  165. package/plugins/kxm/src/vnext-engine-plan.ts +717 -0
  166. package/plugins/kxm/src/vnext-engine.ts +2458 -0
  167. package/plugins/kxm/src/vnext-gate-hash.ts +10 -0
  168. package/plugins/kxm/src/vnext-harness.ts +1142 -0
  169. package/plugins/kxm/src/vnext-init.ts +430 -0
  170. package/plugins/kxm/src/vnext-migrate.ts +1848 -0
  171. package/plugins/kxm/src/vnext-oneshot-producer.ts +424 -0
  172. package/plugins/kxm/src/vnext-permission.ts +936 -0
  173. package/plugins/kxm/src/vnext-pi-producer.ts +628 -0
  174. package/plugins/kxm/src/vnext-repair.ts +1094 -0
  175. package/plugins/kxm/src/vnext-runtime-owner.ts +320 -0
  176. package/plugins/kxm/src/vnext-runtime-store.ts +1560 -0
  177. package/plugins/kxm/src/vnext-runtime-supervisor.ts +586 -0
  178. package/plugins/kxm/src/vnext-runtime.ts +663 -0
  179. package/plugins/kxm/src/vnext-template.ts +247 -0
  180. package/plugins/kxm/src/wiki.ts +313 -0
  181. package/plugins/kxm/src/workflow.ts +1548 -0
  182. package/schemas/vnext/README.md +46 -0
  183. package/schemas/vnext/agent.schema.json +40 -0
  184. package/schemas/vnext/assignment-result.schema.json +66 -0
  185. package/schemas/vnext/backup-manifest.schema.json +89 -0
  186. package/schemas/vnext/candidate.schema.json +109 -0
  187. package/schemas/vnext/common.schema.json +422 -0
  188. package/schemas/vnext/context-candidate.schema.json +76 -0
  189. package/schemas/vnext/context-packet.schema.json +192 -0
  190. package/schemas/vnext/delivery-manifest.schema.json +159 -0
  191. package/schemas/vnext/environment.schema.json +66 -0
  192. package/schemas/vnext/gate-registry.schema.json +109 -0
  193. package/schemas/vnext/handoff-manifest.schema.json +146 -0
  194. package/schemas/vnext/init-operation.schema.json +61 -0
  195. package/schemas/vnext/local-repository-bindings.schema.json +30 -0
  196. package/schemas/vnext/memory-record.schema.json +45 -0
  197. package/schemas/vnext/migration-decision.schema.json +26 -0
  198. package/schemas/vnext/migration-plan.schema.json +123 -0
  199. package/schemas/vnext/migration-receipt.schema.json +52 -0
  200. package/schemas/vnext/model.schema.json +42 -0
  201. package/schemas/vnext/permission-diff.schema.json +57 -0
  202. package/schemas/vnext/prices.schema.json +115 -0
  203. package/schemas/vnext/project.schema.json +85 -0
  204. package/schemas/vnext/repository.schema.json +24 -0
  205. package/schemas/vnext/run-event.schema.json +460 -0
  206. package/schemas/vnext/session-brief.schema.json +153 -0
  207. package/schemas/vnext/sync-event.schema.json +234 -0
  208. package/schemas/vnext/template-provenance.schema.json +38 -0
  209. package/schemas/vnext/workflow.schema.json +248 -0
  210. package/scripts/assignment-run.d.mts +354 -0
  211. package/scripts/assignment-run.mjs +4451 -0
  212. package/scripts/build-runtime.mjs +56 -0
  213. package/scripts/check-generated.mjs +77 -0
  214. package/scripts/check-versions.mjs +34 -0
  215. package/scripts/emit-codex-artifacts.d.mts +9 -0
  216. package/scripts/emit-codex-artifacts.mjs +91 -0
  217. package/scripts/harness-run.d.mts +83 -0
  218. package/scripts/harness-run.mjs +2095 -0
  219. package/scripts/kxm-hub.mjs +105 -0
  220. package/scripts/kxm-publish-npm.mjs +327 -0
  221. package/scripts/kxm-release-github.mjs +472 -0
  222. package/scripts/kxm-runtime-supervisor.mjs +7 -0
  223. package/scripts/kxm-worker.mjs +1127 -0
  224. package/scripts/kxm.mjs +27 -0
  225. package/scripts/roster-policy.d.mts +20 -0
  226. package/scripts/roster-policy.mjs +161 -0
  227. package/scripts/smoke-multi-pi.mjs +479 -0
@@ -0,0 +1,42 @@
1
+ {
2
+ "schema": "kxm.context-candidate.v1",
3
+ "id": "candidate_01JCANDIDATE0000000000",
4
+ "projectId": "prj_01JPROJECT00000000000000000",
5
+ "sourceRunId": "run_01JRUN00000000000000000000",
6
+ "sourceConfigRevision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
7
+ "sourceMemoryRevision": "ctxrev_01JMEMORY0000000000000000",
8
+ "type": "skill",
9
+ "scope": {
10
+ "kind": "repository",
11
+ "repositoryId": "api"
12
+ },
13
+ "summary": "When refreshing OAuth tokens, use single-flight coordination and retain a production-coupled concurrency reproduction.",
14
+ "authority": "evidence",
15
+ "confidence": "probable",
16
+ "status": "review-required",
17
+ "activation": "review-required",
18
+ "targetPath": ".kxm/repo/skills/oauth-refresh/SKILL.md",
19
+ "proposedChange": {
20
+ "id": "artifact_01JARTIFACT00000000000",
21
+ "kind": "candidate-patch",
22
+ "hash": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
23
+ "size": 1842,
24
+ "classification": "project",
25
+ "availability": "local"
26
+ },
27
+ "evidenceRefs": [
28
+ {
29
+ "id": "evidence_01JEVIDENCE000000000000",
30
+ "kind": "test-result",
31
+ "hash": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
32
+ "status": "passed"
33
+ }
34
+ ],
35
+ "evaluation": {
36
+ "status": "not-started",
37
+ "metric": "refresh-regression-rate",
38
+ "expectedDirection": "decrease",
39
+ "evidenceRefs": []
40
+ },
41
+ "createdAt": "2026-09-01T22:40:00.000Z"
42
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "schema": "kxm.delivery-manifest.v1",
3
+ "projectId": "prj_01JPROJECT00000000000000000",
4
+ "runId": "run_01JRUN00000000000000000000",
5
+ "createdAt": "2026-09-01T22:30:00.000Z",
6
+ "updatedAt": "2026-09-01T22:31:00.000Z",
7
+ "configRevision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
8
+ "atomic": false,
9
+ "status": "completed",
10
+ "repositories": [
11
+ {
12
+ "repositoryId": "api",
13
+ "baseCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
14
+ "contentSnapshotHash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
15
+ "outputCommit": "cccccccccccccccccccccccccccccccccccccccc",
16
+ "status": "delivered",
17
+ "effect": {
18
+ "class": "workspace-mutation",
19
+ "sharedMutable": false
20
+ },
21
+ "target": {
22
+ "kind": "local-commit",
23
+ "ref": "cccccccccccccccccccccccccccccccccccccccc"
24
+ },
25
+ "receipts": [
26
+ {
27
+ "provider": "git",
28
+ "kind": "local-commit",
29
+ "id": "cccccccccccccccccccccccccccccccccccccccc",
30
+ "observedAt": "2026-09-01T22:30:30.000Z"
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "repositoryId": "web",
36
+ "baseCommit": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
37
+ "contentSnapshotHash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
38
+ "outputCommit": "dddddddddddddddddddddddddddddddddddddddd",
39
+ "status": "delivered",
40
+ "effect": {
41
+ "class": "workspace-mutation",
42
+ "sharedMutable": false
43
+ },
44
+ "target": {
45
+ "kind": "local-commit",
46
+ "ref": "dddddddddddddddddddddddddddddddddddddddd"
47
+ },
48
+ "receipts": [
49
+ {
50
+ "provider": "git",
51
+ "kind": "local-commit",
52
+ "id": "dddddddddddddddddddddddddddddddddddddddd",
53
+ "observedAt": "2026-09-01T22:30:45.000Z"
54
+ }
55
+ ]
56
+ }
57
+ ],
58
+ "dependencies": [
59
+ {
60
+ "before": "api",
61
+ "after": "web",
62
+ "reason": "The web change consumes the new API response field."
63
+ }
64
+ ],
65
+ "summary": "Prepared two local commits; no shared branch, merge, or deployment was performed."
66
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "schema": "kxm.sync-event.v1",
3
+ "sourceEventId": "evt_01JUNCERTAINTY000000000000",
4
+ "eventType": "effect.uncertainty_resolved",
5
+ "projectId": "prj_01JPROJECT00000000000000000",
6
+ "runId": "run_01JRUN00000000000000000000",
7
+ "homeRuntimeId": "runtime_01JRUNTIME000000000000000",
8
+ "sequence": 30,
9
+ "occurredAt": "2026-09-01T22:20:00.000Z",
10
+ "configRevision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
11
+ "memoryRevision": "ctxrev_01JMEMORY0000000000000000",
12
+ "executorPolicyRevision": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
13
+ "toolPolicyRevision": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
14
+ "syncPolicyRevision": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
15
+ "redaction": {
16
+ "version": "redactor-v1",
17
+ "fieldsOmitted": ["raw-tool-log"],
18
+ "valuesReplaced": 0
19
+ },
20
+ "payload": {
21
+ "workflowId": "fix",
22
+ "previousStatus": "blocked_uncertain",
23
+ "status": "running",
24
+ "outcome": "receipt-reconciled",
25
+ "summary": "An authoritative deployment receipt confirmed the prior operation completed.",
26
+ "reason": "Deployment API returned the assignment-scoped receipt.",
27
+ "stepId": "delivery",
28
+ "stepAttempt": 1,
29
+ "assignmentId": "assignment_01JDELIVERY000000000000",
30
+ "attemptId": "attempt_01JDELIVERY0000000000000",
31
+ "effect": {
32
+ "id": "effect_01JEFFECT000000000000000",
33
+ "policy": {
34
+ "class": "external-non-idempotent",
35
+ "sharedMutable": true
36
+ }
37
+ },
38
+ "lease": {
39
+ "id": "lease_01JLEASE0000000000000000",
40
+ "fencingToken": "fence-42",
41
+ "acquiredAt": "2026-09-01T22:00:00.000Z",
42
+ "expiresAt": "2026-09-01T22:05:00.000Z",
43
+ "operation": "deployment"
44
+ },
45
+ "resolvedBy": {
46
+ "kind": "human",
47
+ "id": "operator:onesm"
48
+ },
49
+ "resolutionAction": "mark-completed",
50
+ "suppliedRefs": [
51
+ {
52
+ "id": "evidence_01JDEPLOYMENT0000000000",
53
+ "kind": "deployment-receipt",
54
+ "hash": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
55
+ "status": "verified"
56
+ }
57
+ ],
58
+ "receipts": [
59
+ {
60
+ "provider": "deployment-api",
61
+ "kind": "deployment",
62
+ "id": "deploy-241",
63
+ "observedAt": "2026-09-01T22:19:59.000Z"
64
+ }
65
+ ]
66
+ }
67
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "schema": "kxm.run-event.v1",
3
+ "eventId": "evt_01JUNCERTAINTY000000000000",
4
+ "eventType": "effect.uncertainty_resolved",
5
+ "projectId": "prj_01JPROJECT00000000000000000",
6
+ "runId": "run_01JRUN00000000000000000000",
7
+ "homeRuntimeId": "runtime_01JRUNTIME000000000000000",
8
+ "sequence": 30,
9
+ "commandId": "cmd_01JRESOLUTION000000000000",
10
+ "occurredAt": "2026-09-01T22:20:00.000Z",
11
+ "recordedAt": "2026-09-01T22:20:00.004Z",
12
+ "monotonicNs": "6592234000000",
13
+ "configRevision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
14
+ "memoryRevision": "ctxrev_01JMEMORY0000000000000000",
15
+ "executorPolicyRevision": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
16
+ "toolPolicyRevision": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
17
+ "payload": {
18
+ "workflowId": "fix",
19
+ "previousStatus": "blocked_uncertain",
20
+ "status": "running",
21
+ "outcome": "receipt-reconciled",
22
+ "summary": "An authoritative deployment receipt confirmed the prior operation completed.",
23
+ "reason": "Deployment API returned the assignment-scoped receipt.",
24
+ "stepId": "delivery",
25
+ "stepAttempt": 1,
26
+ "assignmentId": "assignment_01JDELIVERY000000000000",
27
+ "attemptId": "attempt_01JDELIVERY0000000000000",
28
+ "effect": {
29
+ "id": "effect_01JEFFECT000000000000000",
30
+ "policy": {
31
+ "class": "external-non-idempotent",
32
+ "sharedMutable": true
33
+ }
34
+ },
35
+ "lease": {
36
+ "id": "lease_01JLEASE0000000000000000",
37
+ "fencingToken": "fence-42",
38
+ "acquiredAt": "2026-09-01T22:00:00.000Z",
39
+ "expiresAt": "2026-09-01T22:05:00.000Z",
40
+ "operation": "deployment"
41
+ },
42
+ "receipt": {
43
+ "provider": "deployment-api",
44
+ "kind": "deployment",
45
+ "id": "deploy-241",
46
+ "observedAt": "2026-09-01T22:19:59.000Z"
47
+ },
48
+ "resolvedBy": {
49
+ "kind": "human",
50
+ "id": "operator:onesm"
51
+ },
52
+ "resolutionAction": "mark-completed",
53
+ "suppliedRefs": [
54
+ {
55
+ "id": "evidence_01JDEPLOYMENT0000000000",
56
+ "kind": "deployment-receipt",
57
+ "hash": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
58
+ "status": "verified"
59
+ }
60
+ ]
61
+ }
62
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "schema": "kxm.run-event.v1",
3
+ "eventId": "evt_01JEVENT000000000000000000",
4
+ "eventType": "run.created",
5
+ "projectId": "prj_01JPROJECT00000000000000000",
6
+ "runId": "run_01JRUN00000000000000000000",
7
+ "homeRuntimeId": "runtime_01JRUNTIME000000000000000",
8
+ "sequence": 1,
9
+ "commandId": "cmd_01JCOMMAND0000000000000000",
10
+ "occurredAt": "2026-09-01T21:50:34.000Z",
11
+ "recordedAt": "2026-09-01T21:50:34.003Z",
12
+ "monotonicNs": "4812234000000",
13
+ "configRevision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
14
+ "memoryRevision": "ctxrev_01JMEMORY0000000000000000",
15
+ "executorPolicyRevision": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
16
+ "toolPolicyRevision": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
17
+ "payload": {
18
+ "workflowId": "fix",
19
+ "displayTitle": "Fix concurrent token refresh",
20
+ "promptHash": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
21
+ "status": "created",
22
+ "repositoryIds": ["api", "control", "web"],
23
+ "executorIds": ["local"],
24
+ "executors": [
25
+ {
26
+ "id": "local",
27
+ "kind": "local",
28
+ "executorVersion": "1.0.0",
29
+ "harness": "pi",
30
+ "harnessVersion": "0.84.4"
31
+ }
32
+ ],
33
+ "repositories": [
34
+ {
35
+ "repositoryId": "control",
36
+ "baseCommit": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
37
+ "contentSnapshotHash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
38
+ "sourceState": "dirty-snapshot"
39
+ },
40
+ {
41
+ "repositoryId": "api",
42
+ "baseCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
43
+ "contentSnapshotHash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
44
+ "sourceState": "dirty-snapshot"
45
+ },
46
+ {
47
+ "repositoryId": "web",
48
+ "baseCommit": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
49
+ "contentSnapshotHash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
50
+ "sourceState": "clean"
51
+ }
52
+ ]
53
+ }
54
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "schema": "kxm.sync-event.v1",
3
+ "sourceEventId": "evt_01JRESULT00000000000000000",
4
+ "eventType": "assignment.result_recorded",
5
+ "projectId": "prj_01JPROJECT00000000000000000",
6
+ "runId": "run_01JRUN00000000000000000000",
7
+ "homeRuntimeId": "runtime_01JRUNTIME000000000000000",
8
+ "sequence": 24,
9
+ "occurredAt": "2026-09-01T22:12:10.000Z",
10
+ "configRevision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
11
+ "memoryRevision": "ctxrev_01JMEMORY0000000000000000",
12
+ "executorPolicyRevision": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
13
+ "toolPolicyRevision": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
14
+ "syncPolicyRevision": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
15
+ "redaction": {
16
+ "version": "redactor-v1",
17
+ "fieldsOmitted": ["full-result", "raw-tool-log", "diff"],
18
+ "valuesReplaced": 0
19
+ },
20
+ "payload": {
21
+ "workflowId": "fix",
22
+ "displayTitle": "Fix concurrent token refresh",
23
+ "status": "result_recorded",
24
+ "outcome": "implemented",
25
+ "summary": "Added single-flight token refresh and regression coverage.",
26
+ "stepId": "implement",
27
+ "stepAttempt": 1,
28
+ "assignmentId": "assignment_01JASSIGNMENT00000000000",
29
+ "attemptId": "attempt_01JATTEMPT0000000000000",
30
+ "agentId": "implementer",
31
+ "instanceNo": 1,
32
+ "scopeEpoch": 1,
33
+ "executor": {
34
+ "id": "local",
35
+ "kind": "local",
36
+ "executorVersion": "1.0.0",
37
+ "harness": "pi",
38
+ "harnessVersion": "0.84.4"
39
+ },
40
+ "model": {
41
+ "profile": "implementation",
42
+ "provider": "anthropic",
43
+ "model": "claude-sonnet-4-6",
44
+ "tags": ["implementation"]
45
+ },
46
+ "timing": {
47
+ "durationMs": 730000,
48
+ "agentMs": 730000
49
+ },
50
+ "usage": {
51
+ "inputTokens": 18200,
52
+ "outputTokens": 3400,
53
+ "cost": 1.42,
54
+ "currency": "USD",
55
+ "costKind": "estimated"
56
+ },
57
+ "fileChanges": [
58
+ {
59
+ "repositoryId": "api",
60
+ "added": ["test/Auth/RefreshConcurrencyTest.cs"],
61
+ "modified": ["src/Auth/RefreshService.cs"]
62
+ }
63
+ ]
64
+ }
65
+ }
@@ -0,0 +1,7 @@
1
+ schema: kxm.environment.v1
2
+ values:
3
+ ASPNETCORE_ENVIRONMENT: Development
4
+ secrets:
5
+ - name: TEST_DATABASE_URL
6
+ ref: test-database-url
7
+ required: false
@@ -0,0 +1,8 @@
1
+ schema: kxm.repository.v1
2
+ projectId: prj_01JPROJECT00000000000000000
3
+ repositoryId: api
4
+ description: Payments API and background workers.
5
+ ecosystems:
6
+ - dotnet
7
+ classification: sensitive
8
+ defaultAccess: read
@@ -0,0 +1,8 @@
1
+ schema: kxm.repository.v1
2
+ projectId: prj_01JPROJECT00000000000000000
3
+ repositoryId: web
4
+ description: Customer-facing web application.
5
+ ecosystems:
6
+ - node
7
+ classification: internal
8
+ defaultAccess: read
@@ -0,0 +1,63 @@
1
+ import { createHmac, randomUUID } from "node:crypto";
2
+ import { canonicalWorkflowEvidenceKey } from "../plugins/kxm/src/workflow.ts";
3
+
4
+ const [runId, signalKey, status, summary, ...evidenceArgs] = process.argv.slice(2);
5
+ const serverUrl = process.env.KXM_SERVER_URL?.trim() || "http://127.0.0.1:7331";
6
+ const definitionId = process.env.KXM_WORKFLOW_ID?.trim();
7
+ const secret = process.env.KXM_WORKFLOW_SIGNAL_SECRET?.trim();
8
+
9
+ if (!runId || !signalKey || !status || !summary || !definitionId || !secret) {
10
+ console.error([
11
+ "Usage: workflow-signal <runId> <signalKey> <passed|warning|failed> <summary> [<required-key>=<evidence> ...]",
12
+ "Required environment: KXM_WORKFLOW_ID, KXM_WORKFLOW_SIGNAL_SECRET",
13
+ "Optional environment: KXM_SERVER_URL, KXM_SIGNAL_DELIVERY_ID",
14
+ ].join("\n"));
15
+ process.exitCode = 2;
16
+ } else if (status !== "passed" && status !== "warning" && status !== "failed") {
17
+ console.error("status must be passed, warning, or failed");
18
+ process.exitCode = 2;
19
+ } else {
20
+ const evidenceEntries = new Map<string, string>();
21
+ for (const value of evidenceArgs) {
22
+ const separator = value.indexOf("=");
23
+ if (separator <= 0 || separator === value.length - 1) {
24
+ throw new Error("evidence must use <required-key>=<evidence> syntax");
25
+ }
26
+ const key = canonicalWorkflowEvidenceKey(value.slice(0, separator));
27
+ const proof = value.slice(separator + 1).trim();
28
+ if (!key || !proof) throw new Error("evidence must use <required-key>=<evidence> syntax");
29
+ if (evidenceEntries.has(key)) throw new Error(`duplicate normalized evidence key: ${key}`);
30
+ evidenceEntries.set(key, proof);
31
+ }
32
+ const evidence = Object.fromEntries(evidenceEntries);
33
+ const body = JSON.stringify({ status, summary, evidence });
34
+ const signature = `sha256=${createHmac("sha256", secret).update(body).digest("hex")}`;
35
+ const deliveryId = process.env.KXM_SIGNAL_DELIVERY_ID?.trim() || `example-${randomUUID()}`;
36
+ const endpoint = [
37
+ serverUrl.replace(/\/$/, ""),
38
+ "v1/webhooks",
39
+ encodeURIComponent(definitionId),
40
+ "runs",
41
+ encodeURIComponent(runId),
42
+ "signals",
43
+ encodeURIComponent(signalKey),
44
+ ].join("/");
45
+ const response = await fetch(endpoint, {
46
+ method: "POST",
47
+ headers: {
48
+ "content-type": "application/json",
49
+ "x-hub-signature-256": signature,
50
+ "x-kxm-delivery-id": deliveryId,
51
+ },
52
+ body,
53
+ });
54
+ const responseBody = await response.text();
55
+ let parsedBody: unknown = responseBody;
56
+ try {
57
+ parsedBody = JSON.parse(responseBody) as unknown;
58
+ } catch {
59
+ // Preserve a non-JSON proxy or server response for diagnostics.
60
+ }
61
+ console.log(JSON.stringify({ status: response.status, deliveryId, body: parsedBody }, null, 2));
62
+ if (!response.ok) process.exitCode = 1;
63
+ }
package/package.json ADDED
@@ -0,0 +1,129 @@
1
+ {
2
+ "name": "@kontextmind/kxm",
3
+ "version": "0.6.0",
4
+ "description": "KXM local-first multi-agent orchestration and operator dashboard",
5
+ "type": "module",
6
+ "author": "KontextMind",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/kontextmind/kxm.git"
10
+ },
11
+ "homepage": "https://github.com/kontextmind/kxm#readme",
12
+ "bugs": "https://github.com/kontextmind/kxm/issues",
13
+ "keywords": [
14
+ "pi-package",
15
+ "pi-extension",
16
+ "agent-skills",
17
+ "multi-agent",
18
+ "webhooks",
19
+ "workflow-automation",
20
+ "claude-code-plugin",
21
+ "mcp"
22
+ ],
23
+ "engines": {
24
+ "node": "^22.19.0 || >=24.0.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "scripts": {
30
+ "hub": "node scripts/kxm-hub.mjs",
31
+ "worker": "node scripts/kxm-worker.mjs",
32
+ "example": "node --disable-warning=ExperimentalWarning --experimental-strip-types examples/roundtrip.ts",
33
+ "build:mcp": "esbuild plugins/kxm/src/mcp-server.ts --bundle --platform=node --format=esm --target=node22 --alias:@modelcontextprotocol/sdk/server/index.js=./node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js --alias:@modelcontextprotocol/sdk/server/stdio.js=./node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js --alias:@modelcontextprotocol/sdk/types.js=./node_modules/@modelcontextprotocol/sdk/dist/esm/types.js --outfile=plugins/kxm/dist/mcp-server.js --banner:js=\"#!/usr/bin/env node\"",
34
+ "build:runtime": "node scripts/build-runtime.mjs",
35
+ "build": "npm run build:mcp && npm run build:runtime",
36
+ "check:generated": "npm run build && node scripts/check-generated.mjs",
37
+ "test:core": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/core/*.test.ts",
38
+ "test:simulations": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/simulations/*.test.ts",
39
+ "test:complete": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/core/*.test.ts test/simulations/*.test.ts",
40
+ "test": "npm run test:core",
41
+ "test:coverage:core": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 --experimental-test-coverage --test-coverage-lines=92 --test-coverage-branches=80 --test-coverage-functions=93 --test-coverage-include=plugins/kxm/src/**/*.ts --test-coverage-exclude=plugins/kxm/src/server.ts --test-coverage-exclude=plugins/kxm/src/mcp-server.ts test/core/*.test.ts",
42
+ "test:coverage:complete": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 --experimental-test-coverage --test-coverage-lines=93 --test-coverage-branches=80 --test-coverage-functions=93 --test-coverage-include=plugins/kxm/src/**/*.ts --test-coverage-exclude=plugins/kxm/src/server.ts --test-coverage-exclude=plugins/kxm/src/mcp-server.ts test/core/*.test.ts test/simulations/*.test.ts",
43
+ "test:coverage": "npm run test:coverage:core",
44
+ "typecheck": "tsc --noEmit",
45
+ "lint:docs": "markdownlint-cli2",
46
+ "check:versions": "node scripts/check-versions.mjs",
47
+ "check": "npm run typecheck && npm run lint:docs && npm run check:versions",
48
+ "verify": "npm test && npm run check && npm run check:generated",
49
+ "validate:claude": "claude plugin validate . --strict && claude plugin validate plugins/kxm --strict",
50
+ "validate:ci": "npm run test:coverage && npm run check && npm pack --dry-run",
51
+ "validate": "npm run validate:ci && npm run validate:claude"
52
+ },
53
+ "bin": {
54
+ "kxm": "./scripts/kxm.mjs"
55
+ },
56
+ "exports": {
57
+ "./core": "./plugins/kxm/dist/core.js",
58
+ "./runtime": "./plugins/kxm/dist/runtime.js",
59
+ "./client": "./plugins/kxm/dist/client.js",
60
+ "./extension": "./plugins/kxm/dist/extension.js",
61
+ "./mcp": "./plugins/kxm/dist/mcp-server.js",
62
+ "./package.json": "./package.json"
63
+ },
64
+ "pi": {
65
+ "extensions": [
66
+ "./plugins/kxm/src/extension.ts"
67
+ ],
68
+ "skills": [
69
+ "./plugins/kxm/skills"
70
+ ]
71
+ },
72
+ "peerDependencies": {
73
+ "@earendil-works/pi-coding-agent": "*",
74
+ "typebox": "*"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "@earendil-works/pi-coding-agent": {
78
+ "optional": true
79
+ },
80
+ "typebox": {
81
+ "optional": true
82
+ }
83
+ },
84
+ "devDependencies": {
85
+ "@earendil-works/pi-coding-agent": "0.84.3",
86
+ "@modelcontextprotocol/sdk": "1.30.0",
87
+ "@types/node": "26.4.0",
88
+ "ajv": "8.20.0",
89
+ "commander": "15.0.0",
90
+ "esbuild": "0.28.2",
91
+ "markdownlint-cli2": "0.23.2",
92
+ "typebox": "1.3.19",
93
+ "typescript": "7.0.2",
94
+ "yaml": "2.9.0"
95
+ },
96
+ "files": [
97
+ ".kxm/README.md",
98
+ ".kxm/assets/README.md",
99
+ ".kxm/assets/retrospectives/README.md",
100
+ ".kxm/config/README.md",
101
+ ".kxm/config/env.example",
102
+ ".kxm/config/update.example.yaml",
103
+ ".kxm/config/agents.json",
104
+ ".kxm/config/workflows/jira-development.json",
105
+ ".kxm/config/workflows/v04-dogfood.json",
106
+ ".kxm/config/workflows/fix.json",
107
+ ".kxm/config/workflows/provenance-quorum.json",
108
+ ".claude-plugin",
109
+ "plugins/kxm/.claude-plugin",
110
+ "plugins/kxm/.mcp.json",
111
+ "plugins/kxm/package.json",
112
+ "plugins/kxm/README.md",
113
+ "plugins/kxm/dist",
114
+ "plugins/kxm/skills",
115
+ "plugins/kxm/src",
116
+ "scripts",
117
+ "docs",
118
+ "examples",
119
+ "schemas",
120
+ "README.md",
121
+ "CHANGELOG.md",
122
+ "LICENSE",
123
+ "SECURITY.md"
124
+ ],
125
+ "license": "MIT",
126
+ "dependencies": {
127
+ "@earendil-works/pi-tui": "0.84.4"
128
+ }
129
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
+ "name": "kxm",
4
+ "displayName": "KXM",
5
+ "version": "0.6.0",
6
+ "description": "Headless multi-agent orchestration, durable workflows, and a live operator dashboard for Pi and Claude Code",
7
+ "author": {
8
+ "name": "KontextMind",
9
+ "url": "https://github.com/kontextmind"
10
+ },
11
+ "homepage": "https://github.com/kontextmind/kxm",
12
+ "repository": "https://github.com/kontextmind/kxm",
13
+ "license": "MIT",
14
+ "keywords": ["kxm", "multi-agent", "workflows", "mcp", "pi"],
15
+ "mcpServers": "./.mcp.json",
16
+ "hooks": {
17
+ "SessionStart": [
18
+ {
19
+ "hooks": [
20
+ {
21
+ "type": "command",
22
+ "command": "kxm session brief --status"
23
+ },
24
+ {
25
+ "type": "command",
26
+ "command": "kxm memory brief"
27
+ }
28
+ ]
29
+ }
30
+ ]
31
+ },
32
+ "channels": [
33
+ {
34
+ "server": "kxm"
35
+ }
36
+ ],
37
+ "userConfig": {
38
+ "server_url": {
39
+ "type": "string",
40
+ "title": "KXM server URL",
41
+ "description": "URL of the running KXM hub",
42
+ "default": "http://127.0.0.1:7331",
43
+ "required": true
44
+ },
45
+ "auth_token": {
46
+ "type": "string",
47
+ "title": "Authentication token",
48
+ "description": "Project bearer token for this agent",
49
+ "sensitive": true,
50
+ "required": false
51
+ },
52
+ "agent_name": {
53
+ "type": "string",
54
+ "title": "Agent name",
55
+ "description": "Unique name shown to other agents in the project",
56
+ "default": "claude",
57
+ "required": true
58
+ },
59
+ "agent_purpose": {
60
+ "type": "string",
61
+ "title": "Agent purpose",
62
+ "description": "Short description used by peers when routing work",
63
+ "default": "Claude Code implementation and review agent",
64
+ "required": true
65
+ },
66
+ "project": {
67
+ "type": "string",
68
+ "title": "Project",
69
+ "description": "Optional project namespace; defaults to the current directory name",
70
+ "required": false
71
+ }
72
+ }
73
+ }