@memnexus-ai/mx-agent-cli 0.1.166 → 0.1.168

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 (127) hide show
  1. package/dist/__tests__/claude-sync.test.js +15 -0
  2. package/dist/__tests__/claude-sync.test.js.map +1 -1
  3. package/dist/__tests__/config-command.test.d.ts +9 -0
  4. package/dist/__tests__/config-command.test.d.ts.map +1 -0
  5. package/dist/__tests__/config-command.test.js +55 -0
  6. package/dist/__tests__/config-command.test.js.map +1 -0
  7. package/dist/__tests__/config-generation.test.d.ts +7 -0
  8. package/dist/__tests__/config-generation.test.d.ts.map +1 -0
  9. package/dist/__tests__/config-generation.test.js +141 -0
  10. package/dist/__tests__/config-generation.test.js.map +1 -0
  11. package/dist/__tests__/config-sync.test.d.ts +10 -0
  12. package/dist/__tests__/config-sync.test.d.ts.map +1 -0
  13. package/dist/__tests__/config-sync.test.js +180 -0
  14. package/dist/__tests__/config-sync.test.js.map +1 -0
  15. package/dist/__tests__/coordination-client.test.d.ts +9 -0
  16. package/dist/__tests__/coordination-client.test.d.ts.map +1 -0
  17. package/dist/__tests__/coordination-client.test.js +72 -0
  18. package/dist/__tests__/coordination-client.test.js.map +1 -0
  19. package/dist/__tests__/coordination-command.test.d.ts +9 -0
  20. package/dist/__tests__/coordination-command.test.d.ts.map +1 -0
  21. package/dist/__tests__/coordination-command.test.js +108 -0
  22. package/dist/__tests__/coordination-command.test.js.map +1 -0
  23. package/dist/__tests__/coordination-fallback.test.d.ts +9 -0
  24. package/dist/__tests__/coordination-fallback.test.d.ts.map +1 -0
  25. package/dist/__tests__/coordination-fallback.test.js +158 -0
  26. package/dist/__tests__/coordination-fallback.test.js.map +1 -0
  27. package/dist/__tests__/project-config.test.js +1 -0
  28. package/dist/__tests__/project-config.test.js.map +1 -1
  29. package/dist/agent-config/.mx-config-generation.json +4 -0
  30. package/dist/agent-config/CLAUDE.md.template +140 -0
  31. package/dist/agent-config/OWNERS.md +51 -0
  32. package/dist/agent-config/agents/bar-raiser.md +205 -0
  33. package/dist/agent-config/agents/dogfood-auditor.md +243 -0
  34. package/dist/agent-config/agents/git-expert.md +380 -0
  35. package/dist/agent-config/agents/implementation-engineer.md +387 -0
  36. package/dist/agent-config/agents/memory-creator.md +330 -0
  37. package/dist/agent-config/agents/prd-writer.md +478 -0
  38. package/dist/agent-config/agents/prfaq-writer.md +344 -0
  39. package/dist/agent-config/agents/prior-art-researcher.md +264 -0
  40. package/dist/agent-config/agents/qa-tester.md +406 -0
  41. package/dist/agent-config/agents/red-team.md +330 -0
  42. package/dist/agent-config/agents/security-reviewer.md +300 -0
  43. package/dist/agent-config/agents/status-reporter.md +297 -0
  44. package/dist/agent-config/claude-md/CLAUDE.core.md +105 -0
  45. package/dist/agent-config/claude-md/CLAUDE.overlay.memnexus.md +68 -0
  46. package/dist/agent-config/claude-md/compose.mjs +179 -0
  47. package/dist/agent-config/claude-md/vars.memnexus.json +4 -0
  48. package/dist/agent-config/hooks/auto-capture-precompact.sh +176 -0
  49. package/dist/agent-config/hooks/auto-capture-session-end.sh +178 -0
  50. package/dist/agent-config/hooks/auto-checkpoint.sh +102 -0
  51. package/dist/agent-config/hooks/ci-validate-hook.sh +499 -0
  52. package/dist/agent-config/hooks/ci-validate-routes.conf +16 -0
  53. package/dist/agent-config/hooks/delegation-audit.sh +61 -0
  54. package/dist/agent-config/hooks/deploy-verification-reminder.sh +179 -0
  55. package/dist/agent-config/hooks/git-mutation-guard.sh +219 -0
  56. package/dist/agent-config/hooks/iteration-log-check.sh +212 -0
  57. package/dist/agent-config/hooks/memory-checkpoint-reminder.sh +103 -0
  58. package/dist/agent-config/hooks/mx-guard-hook.sh +77 -0
  59. package/dist/agent-config/hooks/named-memory-write-guard.sh +237 -0
  60. package/dist/agent-config/hooks/reload-checkpoint.sh +68 -0
  61. package/dist/agent-config/hooks/set-terminal-appearance.sh +34 -0
  62. package/dist/agent-config/hooks/workflow-dispatch-guard.sh +184 -0
  63. package/dist/agent-config/hooks/worktree-guard.sh +258 -0
  64. package/dist/agent-config/rules/eval-harness.md +33 -0
  65. package/dist/agent-config/rules/frontend.md +17 -0
  66. package/dist/agent-config/rules/mcp-protocol.md +15 -0
  67. package/dist/agent-config/rules/retrieval.md +17 -0
  68. package/dist/agent-config/settings.json +196 -0
  69. package/dist/agent-config/shared/eval-tiered-rigor.md +15 -0
  70. package/dist/agent-config/shared/team-operating-rules.md +37 -0
  71. package/dist/agent-config/skills/eval-claim-impact/SKILL.md +20 -0
  72. package/dist/agent-config/skills/eval-harness-review/SKILL.md +21 -0
  73. package/dist/agent-config/skills/mx-checkpoint/SKILL.md +111 -0
  74. package/dist/agent-config/skills/mx-fix-pr/SKILL.md +90 -0
  75. package/dist/agent-config/skills/mx-gap-assessment/SKILL.md +90 -0
  76. package/dist/agent-config/skills/mx-iteration-close/SKILL.md +81 -0
  77. package/dist/agent-config/skills/mx-post-merge-sync/SKILL.md +83 -0
  78. package/dist/agent-config/skills/mx-pre-pr-check/SKILL.md +85 -0
  79. package/dist/agent-config/skills/mx-save/SKILL.md +102 -0
  80. package/dist/agent-config/skills/mx-session-start/SKILL.md +85 -0
  81. package/dist/agent-config/skills/team-gate-checklist/SKILL.md +19 -0
  82. package/dist/commands/config-sync.d.ts +39 -0
  83. package/dist/commands/config-sync.d.ts.map +1 -0
  84. package/dist/commands/config-sync.js +212 -0
  85. package/dist/commands/config-sync.js.map +1 -0
  86. package/dist/commands/config.d.ts.map +1 -1
  87. package/dist/commands/config.js +5 -1
  88. package/dist/commands/config.js.map +1 -1
  89. package/dist/commands/coordination.d.ts +49 -0
  90. package/dist/commands/coordination.d.ts.map +1 -0
  91. package/dist/commands/coordination.js +128 -0
  92. package/dist/commands/coordination.js.map +1 -0
  93. package/dist/commands/create.d.ts.map +1 -1
  94. package/dist/commands/create.js +3 -0
  95. package/dist/commands/create.js.map +1 -1
  96. package/dist/commands/init.d.ts.map +1 -1
  97. package/dist/commands/init.js +12 -4
  98. package/dist/commands/init.js.map +1 -1
  99. package/dist/commands/start.d.ts.map +1 -1
  100. package/dist/commands/start.js +6 -0
  101. package/dist/commands/start.js.map +1 -1
  102. package/dist/index.js +64 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/lib/bundled-config.d.ts +44 -0
  105. package/dist/lib/bundled-config.d.ts.map +1 -0
  106. package/dist/lib/bundled-config.js +164 -0
  107. package/dist/lib/bundled-config.js.map +1 -0
  108. package/dist/lib/claude.d.ts.map +1 -1
  109. package/dist/lib/claude.js +9 -3
  110. package/dist/lib/claude.js.map +1 -1
  111. package/dist/lib/config-generation.d.ts +36 -0
  112. package/dist/lib/config-generation.d.ts.map +1 -0
  113. package/dist/lib/config-generation.js +73 -0
  114. package/dist/lib/config-generation.js.map +1 -0
  115. package/dist/lib/coordination-client.d.ts +74 -0
  116. package/dist/lib/coordination-client.d.ts.map +1 -0
  117. package/dist/lib/coordination-client.js +83 -0
  118. package/dist/lib/coordination-client.js.map +1 -0
  119. package/dist/lib/coordination-fallback.d.ts +75 -0
  120. package/dist/lib/coordination-fallback.d.ts.map +1 -0
  121. package/dist/lib/coordination-fallback.js +224 -0
  122. package/dist/lib/coordination-fallback.js.map +1 -0
  123. package/dist/lib/project-config.d.ts +7 -0
  124. package/dist/lib/project-config.d.ts.map +1 -1
  125. package/dist/lib/project-config.js +4 -0
  126. package/dist/lib/project-config.js.map +1 -1
  127. package/package.json +2 -2
@@ -0,0 +1,74 @@
1
+ /**
2
+ * coordination-client -- HTTP(S) client for the MX Agent Coordination Service.
3
+ *
4
+ * Talks to the standalone service's /enqueue, /drain, /ack endpoints over TLS
5
+ * with a per-team bearer token. Service URL + token are read from the mx-agent
6
+ * config store (same mechanism as observability-api-token) or the environment.
7
+ *
8
+ * Part of PR-B / FR-7 (CLI commands) of the agent coordination queue PRD.
9
+ */
10
+ export type Priority = 'p0' | 'p1' | 'p2' | 'p3';
11
+ export declare const CONFIG_KEY_URL = "coordination-service-url";
12
+ export declare const CONFIG_KEY_TOKEN = "coordination-service-token";
13
+ export interface EnqueueRequest {
14
+ to: string;
15
+ priority: Priority;
16
+ body: string;
17
+ from?: string;
18
+ idempotencyKey?: string;
19
+ }
20
+ export interface CoordinationMessage {
21
+ id: string;
22
+ from: string;
23
+ to: string;
24
+ priority: Priority;
25
+ body: string;
26
+ timestamp: string;
27
+ }
28
+ export interface DrainResponse {
29
+ messages: CoordinationMessage[];
30
+ remaining: number;
31
+ batchId: string;
32
+ }
33
+ /** The subset of service operations the CLI commands use. */
34
+ export interface CoordinationClient {
35
+ enqueue(req: EnqueueRequest): Promise<{
36
+ messageId: string;
37
+ duplicate: boolean;
38
+ }>;
39
+ drain(opts: {
40
+ limit?: number;
41
+ }): Promise<DrainResponse>;
42
+ confirmDrain(batchId: string): Promise<void>;
43
+ ack(messageId: string): Promise<void>;
44
+ }
45
+ /** Thrown for a transport failure (service unreachable) — triggers the FR-8 fallback. */
46
+ export declare class ServiceUnreachableError extends Error {
47
+ constructor(cause: unknown);
48
+ }
49
+ /** Thrown for an HTTP error response (the service answered, but non-2xx). */
50
+ export declare class ServiceHttpError extends Error {
51
+ readonly status: number;
52
+ constructor(status: number, message: string);
53
+ }
54
+ export interface ClientConfig {
55
+ url: string;
56
+ token: string;
57
+ }
58
+ /** Resolve service URL + token from env (preferred) or the mx-agent config store. */
59
+ export declare function resolveClientConfig(): ClientConfig;
60
+ export declare class HttpCoordinationClient implements CoordinationClient {
61
+ private readonly config;
62
+ constructor(config: ClientConfig);
63
+ private request;
64
+ enqueue(req: EnqueueRequest): Promise<{
65
+ messageId: string;
66
+ duplicate: boolean;
67
+ }>;
68
+ drain(opts: {
69
+ limit?: number;
70
+ }): Promise<DrainResponse>;
71
+ confirmDrain(batchId: string): Promise<void>;
72
+ ack(messageId: string): Promise<void>;
73
+ }
74
+ //# sourceMappingURL=coordination-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-client.d.ts","sourceRoot":"","sources":["../../src/lib/coordination-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,eAAO,MAAM,cAAc,6BAA6B,CAAC;AACzD,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,yFAAyF;AACzF,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,KAAK,EAAE,OAAO;CAI3B;AAED,6EAA6E;AAC7E,qBAAa,gBAAiB,SAAQ,KAAK;aACb,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI5D;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,IAAI,YAAY,CAUlD;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;YAEnC,OAAO;IAwBrB,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAIhF,KAAK,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAIjD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5C"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * coordination-client -- HTTP(S) client for the MX Agent Coordination Service.
3
+ *
4
+ * Talks to the standalone service's /enqueue, /drain, /ack endpoints over TLS
5
+ * with a per-team bearer token. Service URL + token are read from the mx-agent
6
+ * config store (same mechanism as observability-api-token) or the environment.
7
+ *
8
+ * Part of PR-B / FR-7 (CLI commands) of the agent coordination queue PRD.
9
+ */
10
+ import { getConfigValue } from './config.js';
11
+ export const CONFIG_KEY_URL = 'coordination-service-url';
12
+ export const CONFIG_KEY_TOKEN = 'coordination-service-token';
13
+ /** Thrown for a transport failure (service unreachable) — triggers the FR-8 fallback. */
14
+ export class ServiceUnreachableError extends Error {
15
+ constructor(cause) {
16
+ super(`coordination service unreachable: ${cause instanceof Error ? cause.message : String(cause)}`);
17
+ this.name = 'ServiceUnreachableError';
18
+ }
19
+ }
20
+ /** Thrown for an HTTP error response (the service answered, but non-2xx). */
21
+ export class ServiceHttpError extends Error {
22
+ status;
23
+ constructor(status, message) {
24
+ super(message);
25
+ this.status = status;
26
+ this.name = 'ServiceHttpError';
27
+ }
28
+ }
29
+ /** Resolve service URL + token from env (preferred) or the mx-agent config store. */
30
+ export function resolveClientConfig() {
31
+ const url = process.env.MX_COORD_SERVICE_URL || getConfigValue(CONFIG_KEY_URL);
32
+ const token = process.env.MX_COORD_SERVICE_TOKEN || getConfigValue(CONFIG_KEY_TOKEN);
33
+ if (!url) {
34
+ throw new Error(`coordination service URL not set. Run: mx-agent config set ${CONFIG_KEY_URL} <https-url> (or set MX_COORD_SERVICE_URL)`);
35
+ }
36
+ if (!token) {
37
+ throw new Error(`coordination service token not set. Run: mx-agent config set ${CONFIG_KEY_TOKEN} <token> (or set MX_COORD_SERVICE_TOKEN)`);
38
+ }
39
+ return { url: url.replace(/\/+$/, ''), token };
40
+ }
41
+ export class HttpCoordinationClient {
42
+ config;
43
+ constructor(config) {
44
+ this.config = config;
45
+ }
46
+ async request(method, path, body) {
47
+ let res;
48
+ try {
49
+ res = await fetch(`${this.config.url}${path}`, {
50
+ method,
51
+ headers: {
52
+ authorization: `Bearer ${this.config.token}`,
53
+ 'content-type': 'application/json',
54
+ },
55
+ body: body === undefined ? undefined : JSON.stringify(body),
56
+ });
57
+ }
58
+ catch (err) {
59
+ // Network-level failure (DNS, refused, TLS) → the service is unreachable.
60
+ throw new ServiceUnreachableError(err);
61
+ }
62
+ const text = await res.text();
63
+ const parsed = text ? JSON.parse(text) : {};
64
+ if (!res.ok) {
65
+ const msg = parsed.error ?? `HTTP ${res.status}`;
66
+ throw new ServiceHttpError(res.status, msg);
67
+ }
68
+ return parsed;
69
+ }
70
+ enqueue(req) {
71
+ return this.request('POST', '/enqueue', req);
72
+ }
73
+ drain(opts) {
74
+ return this.request('POST', '/drain', opts.limit === undefined ? {} : { limit: opts.limit });
75
+ }
76
+ async confirmDrain(batchId) {
77
+ await this.request('POST', '/drain/confirm', { batchId });
78
+ }
79
+ async ack(messageId) {
80
+ await this.request('POST', '/ack', { messageId });
81
+ }
82
+ }
83
+ //# sourceMappingURL=coordination-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-client.js","sourceRoot":"","sources":["../../src/lib/coordination-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * coordination-fallback -- FR-8 degraded-mode durable fallback for enqueue.
3
+ *
4
+ * When the coordination service is unreachable, `mx-agent escalate` writes the
5
+ * message ONLY to a local durable file in the worktree (never a network call),
6
+ * so the entry is non-lossy. On the next successful CLI invocation the file is
7
+ * flushed into the service under a single-flusher lease, each entry carrying an
8
+ * idempotency key so a re-run (or interrupted flush) is a server-side no-op.
9
+ *
10
+ * Hardening (KI-COORD-SF2): the fallback file is opened O_NOFOLLOW + O_CREAT,
11
+ * mode 0600, with per-entry atomic append (one line < PIPE_BUF under O_APPEND is
12
+ * atomic on POSIX). A pre-planted symlink is rejected (ELOOP).
13
+ *
14
+ * Part of PR-B / FR-8 of the agent coordination queue PRD.
15
+ */
16
+ import type { CoordinationClient, Priority } from './coordination-client.js';
17
+ export declare const FALLBACK_FILENAME = ".mx-coordination-fallback.jsonl";
18
+ export declare const LEASE_FILENAME = ".mx-coordination-fallback.lock";
19
+ export declare const CORRUPT_FILENAME = ".mx-coordination-fallback.corrupt.jsonl";
20
+ export declare function corruptPath(root?: string): string;
21
+ /** A queued-locally entry. `idempotencyKey` dedups a re-flush server-side. */
22
+ export interface FallbackEntry {
23
+ team: string;
24
+ to: string;
25
+ priority: Priority;
26
+ body: string;
27
+ from?: string;
28
+ localTimestamp: string;
29
+ idempotencyKey: string;
30
+ }
31
+ export declare function worktreeRoot(): string;
32
+ export declare function fallbackPath(root?: string): string;
33
+ export declare function leasePath(root?: string): string;
34
+ /** Idempotency key = team + localTimestamp + contentHash (matches the flush spec). */
35
+ export declare function idempotencyKeyFor(team: string, localTimestamp: string, body: string): string;
36
+ /**
37
+ * Append one entry to the fallback file with a single atomic write. Opens
38
+ * O_NOFOLLOW so a pre-planted symlink is rejected, O_CREAT|O_APPEND mode 0600.
39
+ */
40
+ export declare function appendFallbackEntry(entry: Omit<FallbackEntry, 'localTimestamp' | 'idempotencyKey'> & {
41
+ localTimestamp?: string;
42
+ }, path?: string): FallbackEntry;
43
+ /**
44
+ * Read fallback entries, SKIP-AND-QUARANTINE corrupt lines (MAJOR-4): a single
45
+ * JSON-invalid line must not wedge the whole queue. Bad lines are appended to a
46
+ * sibling `.corrupt.jsonl` (0600) for manual inspection and a warning is printed
47
+ * to stderr; valid lines are returned. `corruptFile` is injectable for tests.
48
+ */
49
+ export declare function readFallbackEntries(path?: string, corruptFile?: string): FallbackEntry[];
50
+ /**
51
+ * Acquire the single-flusher lease (exclusive create). If a lease exists but is
52
+ * stale (older than staleMs), steal it — a crashed flusher must not wedge the
53
+ * queue. Returns true if acquired.
54
+ */
55
+ export declare function acquireLease(path?: string, staleMs?: number): boolean;
56
+ export declare function releaseLease(path?: string): void;
57
+ export interface FlushResult {
58
+ flushed: number;
59
+ remaining: number;
60
+ skipped: boolean;
61
+ }
62
+ /**
63
+ * Flush queued-locally entries into the service under the single-flusher lease.
64
+ * Each entry is enqueued with its idempotency key; a re-flush of an already-sent
65
+ * entry is a server-side dedup no-op (the service treats dedup as
66
+ * fail-open-with-audit, which makes re-flush safe by design). Stops early if the
67
+ * service is still unreachable, leaving remaining entries on disk.
68
+ */
69
+ export declare function flushFallback(client: CoordinationClient, opts?: {
70
+ fallbackPath?: string;
71
+ leasePath?: string;
72
+ corruptPath?: string;
73
+ staleMs?: number;
74
+ }): Promise<FlushResult>;
75
+ //# sourceMappingURL=coordination-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-fallback.d.ts","sourceRoot":"","sources":["../../src/lib/coordination-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,OAAO,KAAK,EAAE,kBAAkB,EAAkB,QAAQ,EAA2B,MAAM,0BAA0B,CAAC;AAEtH,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AACnE,eAAO,MAAM,cAAc,mCAAmC,CAAC;AAC/D,eAAO,MAAM,gBAAgB,4CAA4C,CAAC;AAE1E,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAEjE;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAElE;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAE/D;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7F,IAAI,GAAE,MAAuB,GAC5B,aAAa,CAmBf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,MAAuB,EAC7B,WAAW,GAAE,MAAsB,GAClC,aAAa,EAAE,CAqCjB;AAUD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAoB,EAAE,OAAO,SAAS,GAAG,OAAO,CAyBlF;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAoB,GAAG,IAAI,CAM7D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,kBAAkB,EAC1B,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F,OAAO,CAAC,WAAW,CAAC,CA+CtB"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * coordination-fallback -- FR-8 degraded-mode durable fallback for enqueue.
3
+ *
4
+ * When the coordination service is unreachable, `mx-agent escalate` writes the
5
+ * message ONLY to a local durable file in the worktree (never a network call),
6
+ * so the entry is non-lossy. On the next successful CLI invocation the file is
7
+ * flushed into the service under a single-flusher lease, each entry carrying an
8
+ * idempotency key so a re-run (or interrupted flush) is a server-side no-op.
9
+ *
10
+ * Hardening (KI-COORD-SF2): the fallback file is opened O_NOFOLLOW + O_CREAT,
11
+ * mode 0600, with per-entry atomic append (one line < PIPE_BUF under O_APPEND is
12
+ * atomic on POSIX). A pre-planted symlink is rejected (ELOOP).
13
+ *
14
+ * Part of PR-B / FR-8 of the agent coordination queue PRD.
15
+ */
16
+ import { openSync, writeSync, closeSync, fstatSync, fchmodSync, readFileSync, writeFileSync, existsSync, statSync, unlinkSync, constants as fsConstants, } from 'fs';
17
+ import { join } from 'path';
18
+ import { createHash } from 'crypto';
19
+ export const FALLBACK_FILENAME = '.mx-coordination-fallback.jsonl';
20
+ export const LEASE_FILENAME = '.mx-coordination-fallback.lock';
21
+ export const CORRUPT_FILENAME = '.mx-coordination-fallback.corrupt.jsonl';
22
+ export function corruptPath(root = worktreeRoot()) {
23
+ return join(root, CORRUPT_FILENAME);
24
+ }
25
+ export function worktreeRoot() {
26
+ return process.env.CLAUDE_WORKTREE_PATH || process.cwd();
27
+ }
28
+ export function fallbackPath(root = worktreeRoot()) {
29
+ return join(root, FALLBACK_FILENAME);
30
+ }
31
+ export function leasePath(root = worktreeRoot()) {
32
+ return join(root, LEASE_FILENAME);
33
+ }
34
+ /** Idempotency key = team + localTimestamp + contentHash (matches the flush spec). */
35
+ export function idempotencyKeyFor(team, localTimestamp, body) {
36
+ const contentHash = createHash('sha256').update(body, 'utf8').digest('hex');
37
+ return `${team}:${localTimestamp}:${contentHash}`;
38
+ }
39
+ /**
40
+ * Append one entry to the fallback file with a single atomic write. Opens
41
+ * O_NOFOLLOW so a pre-planted symlink is rejected, O_CREAT|O_APPEND mode 0600.
42
+ */
43
+ export function appendFallbackEntry(entry, path = fallbackPath()) {
44
+ const localTimestamp = entry.localTimestamp ?? new Date().toISOString();
45
+ const full = {
46
+ ...entry,
47
+ localTimestamp,
48
+ idempotencyKey: idempotencyKeyFor(entry.team, localTimestamp, entry.body),
49
+ };
50
+ const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_APPEND | fsConstants.O_NOFOLLOW;
51
+ const fd = openSync(path, flags, 0o600);
52
+ try {
53
+ // Tighten a pre-existing loose file (MINOR-5): if the file existed with
54
+ // group/other bits, fchmod it back to 0600 before writing the secret body.
55
+ const mode = fstatSync(fd).mode & 0o777;
56
+ if (mode & 0o077)
57
+ fchmodSync(fd, 0o600);
58
+ writeSync(fd, `${JSON.stringify(full)}\n`);
59
+ }
60
+ finally {
61
+ closeSync(fd);
62
+ }
63
+ return full;
64
+ }
65
+ /**
66
+ * Read fallback entries, SKIP-AND-QUARANTINE corrupt lines (MAJOR-4): a single
67
+ * JSON-invalid line must not wedge the whole queue. Bad lines are appended to a
68
+ * sibling `.corrupt.jsonl` (0600) for manual inspection and a warning is printed
69
+ * to stderr; valid lines are returned. `corruptFile` is injectable for tests.
70
+ */
71
+ export function readFallbackEntries(path = fallbackPath(), corruptFile = corruptPath()) {
72
+ if (!existsSync(path))
73
+ return [];
74
+ const raw = readFileSync(path, 'utf8');
75
+ const good = [];
76
+ const corrupt = [];
77
+ for (const line of raw.split('\n')) {
78
+ const trimmed = line.trim();
79
+ if (!trimmed)
80
+ continue;
81
+ try {
82
+ good.push(JSON.parse(trimmed));
83
+ }
84
+ catch {
85
+ corrupt.push(trimmed);
86
+ }
87
+ }
88
+ if (corrupt.length > 0) {
89
+ const noun = `corrupt fallback entr${corrupt.length === 1 ? 'y' : 'ies'}`;
90
+ try {
91
+ // Same O_NOFOLLOW protection as the main file: never follow a pre-planted
92
+ // symlink at the quarantine path.
93
+ const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_APPEND | fsConstants.O_NOFOLLOW;
94
+ const fd = openSync(corruptFile, flags, 0o600);
95
+ try {
96
+ const mode = fstatSync(fd).mode & 0o777;
97
+ if (mode & 0o077)
98
+ fchmodSync(fd, 0o600);
99
+ writeSync(fd, corrupt.join('\n') + '\n');
100
+ }
101
+ finally {
102
+ closeSync(fd);
103
+ }
104
+ process.stderr.write(`WARNING: ${corrupt.length} ${noun} quarantined to ${corruptFile} — inspect manually\n`);
105
+ }
106
+ catch (err) {
107
+ // Quarantine path is a symlink or unwritable — never follow, never crash.
108
+ // Surface the lost lines INLINE so nothing is silently dropped.
109
+ const code = err.code ?? 'error';
110
+ process.stderr.write(`WARNING: could not quarantine ${corrupt.length} ${noun} (${code}) to ${corruptFile} — NOT written; inline: ${corrupt.join(' | ')}\n`);
111
+ }
112
+ }
113
+ return good;
114
+ }
115
+ function writeFallbackEntries(entries, path) {
116
+ if (entries.length === 0) {
117
+ if (existsSync(path))
118
+ unlinkSync(path);
119
+ return;
120
+ }
121
+ writeFileSync(path, entries.map((e) => JSON.stringify(e)).join('\n') + '\n', { mode: 0o600 });
122
+ }
123
+ /**
124
+ * Acquire the single-flusher lease (exclusive create). If a lease exists but is
125
+ * stale (older than staleMs), steal it — a crashed flusher must not wedge the
126
+ * queue. Returns true if acquired.
127
+ */
128
+ export function acquireLease(path = leasePath(), staleMs = 30_000) {
129
+ const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL | fsConstants.O_NOFOLLOW;
130
+ const tryCreate = () => {
131
+ try {
132
+ const fd = openSync(path, flags, 0o600);
133
+ writeSync(fd, JSON.stringify({ pid: process.pid, ts: new Date().toISOString() }));
134
+ closeSync(fd);
135
+ return true;
136
+ }
137
+ catch (err) {
138
+ if (err.code === 'EEXIST')
139
+ return false;
140
+ throw err;
141
+ }
142
+ };
143
+ if (tryCreate())
144
+ return true;
145
+ // Lease exists — steal it if stale.
146
+ try {
147
+ const age = Date.now() - statSync(path).mtimeMs;
148
+ if (age > staleMs) {
149
+ unlinkSync(path);
150
+ return tryCreate();
151
+ }
152
+ }
153
+ catch {
154
+ /* raced away — fall through to not-acquired */
155
+ }
156
+ return false;
157
+ }
158
+ export function releaseLease(path = leasePath()) {
159
+ try {
160
+ if (existsSync(path))
161
+ unlinkSync(path);
162
+ }
163
+ catch {
164
+ /* best effort */
165
+ }
166
+ }
167
+ /**
168
+ * Flush queued-locally entries into the service under the single-flusher lease.
169
+ * Each entry is enqueued with its idempotency key; a re-flush of an already-sent
170
+ * entry is a server-side dedup no-op (the service treats dedup as
171
+ * fail-open-with-audit, which makes re-flush safe by design). Stops early if the
172
+ * service is still unreachable, leaving remaining entries on disk.
173
+ */
174
+ export async function flushFallback(client, opts = {}) {
175
+ const fp = opts.fallbackPath ?? fallbackPath();
176
+ const lp = opts.leasePath ?? leasePath();
177
+ const cp = opts.corruptPath ?? `${fp.replace(/\.jsonl$/, '')}.corrupt.jsonl`;
178
+ const entries = readFallbackEntries(fp, cp);
179
+ if (entries.length === 0)
180
+ return { flushed: 0, remaining: 0, skipped: false };
181
+ if (!acquireLease(lp, opts.staleMs)) {
182
+ return { flushed: 0, remaining: entries.length, skipped: true };
183
+ }
184
+ let flushed = 0;
185
+ try {
186
+ // Re-read under the lease so we do not clobber entries a prior holder wrote.
187
+ const held = readFallbackEntries(fp, cp);
188
+ const remaining = [];
189
+ let stillDown = false;
190
+ for (const entry of held) {
191
+ if (stillDown) {
192
+ remaining.push(entry);
193
+ continue;
194
+ }
195
+ try {
196
+ const req = {
197
+ to: entry.to,
198
+ priority: entry.priority,
199
+ body: entry.body,
200
+ from: entry.from ?? entry.team,
201
+ idempotencyKey: entry.idempotencyKey,
202
+ };
203
+ await client.enqueue(req);
204
+ flushed++;
205
+ }
206
+ catch (err) {
207
+ if (err?.name === 'ServiceUnreachableError') {
208
+ // Still down — keep this and all following entries for the next flush.
209
+ stillDown = true;
210
+ remaining.push(entry);
211
+ }
212
+ else {
213
+ throw err; // a real HTTP error is not a transient outage
214
+ }
215
+ }
216
+ }
217
+ writeFallbackEntries(remaining, fp);
218
+ return { flushed, remaining: remaining.length, skipped: false };
219
+ }
220
+ finally {
221
+ releaseLease(lp);
222
+ }
223
+ }
224
+ //# sourceMappingURL=coordination-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-fallback.js","sourceRoot":"","sources":["../../src/lib/coordination-fallback.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,13 @@ export interface ProjectConfig {
24
24
  * Default: '' (no prefix — backwards compatible with the MemNexus monorepo).
25
25
  */
26
26
  projectSlug?: string;
27
+ /**
28
+ * Project-appropriate observability API URL (e.g. the dev observability
29
+ * endpoint). When set, `mx-agent config-sync --apply` seeds the operator's
30
+ * `observability-api-url` config from it if that key is not already set.
31
+ * Default: '' (unset — the CLI falls back to its own default).
32
+ */
33
+ observabilityApiUrl?: string;
27
34
  }
28
35
  export declare const PROJECT_CONFIG_DEFAULTS: Required<ProjectConfig>;
29
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/lib/project-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,aAAa,CAO3D,CAAC;AA4BF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAqB3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CASrF"}
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/lib/project-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,aAAa,CAQ3D,CAAC;AA4BF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAsB3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAUrF"}
@@ -15,6 +15,7 @@ export const PROJECT_CONFIG_DEFAULTS = {
15
15
  teamsDir: 'mx-agent-system/teams',
16
16
  roleguidesDir: 'mx-agent-system/roleguides',
17
17
  projectSlug: '',
18
+ observabilityApiUrl: '',
18
19
  };
19
20
  /** Characters that must not appear in config values used in shell commands */
20
21
  const SHELL_UNSAFE_RE = /[;|&`$(){}!#\\<>\n\r\x00]/;
@@ -66,6 +67,8 @@ export function loadProjectConfig(projectRoot) {
66
67
  config.roleguidesDir = parsed.roleguidesDir;
67
68
  if (typeof parsed.projectSlug === 'string')
68
69
  config.projectSlug = parsed.projectSlug;
70
+ if (typeof parsed.observabilityApiUrl === 'string')
71
+ config.observabilityApiUrl = parsed.observabilityApiUrl;
69
72
  }
70
73
  catch {
71
74
  return null;
@@ -89,6 +92,7 @@ export function resolveProjectConfig(c) {
89
92
  teamsDir: c?.teamsDir ?? PROJECT_CONFIG_DEFAULTS.teamsDir,
90
93
  roleguidesDir: c?.roleguidesDir ?? PROJECT_CONFIG_DEFAULTS.roleguidesDir,
91
94
  projectSlug: c?.projectSlug ?? PROJECT_CONFIG_DEFAULTS.projectSlug,
95
+ observabilityApiUrl: c?.observabilityApiUrl ?? PROJECT_CONFIG_DEFAULTS.observabilityApiUrl,
92
96
  };
93
97
  }
94
98
  //# sourceMappingURL=project-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/lib/project-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/lib/project-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@memnexus-ai/mx-agent-cli",
3
- "version": "0.1.166",
3
+ "version": "0.1.168",
4
4
  "description": "CLI for creating and managing AI agent teams",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "mx-agent": "./dist/index.js"
8
8
  },
9
9
  "scripts": {
10
- "build": "tsc",
10
+ "build": "tsc && node scripts/bundle-config.mjs",
11
11
  "dev": "tsc --watch",
12
12
  "start": "node dist/index.js",
13
13
  "prepublishOnly": "npm run build",