@coralai/nps-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +459 -0
  3. package/dist/audit-log.d.ts +26 -0
  4. package/dist/audit-log.d.ts.map +1 -0
  5. package/dist/audit-log.js +120 -0
  6. package/dist/audit-log.js.map +1 -0
  7. package/dist/bindings/bindings-loader.d.ts +19 -0
  8. package/dist/bindings/bindings-loader.d.ts.map +1 -0
  9. package/dist/bindings/bindings-loader.js +84 -0
  10. package/dist/bindings/bindings-loader.js.map +1 -0
  11. package/dist/cli/agent-cmd.d.ts +2 -0
  12. package/dist/cli/agent-cmd.d.ts.map +1 -0
  13. package/dist/cli/agent-cmd.js +125 -0
  14. package/dist/cli/agent-cmd.js.map +1 -0
  15. package/dist/cli/bind-cmd.d.ts +2 -0
  16. package/dist/cli/bind-cmd.d.ts.map +1 -0
  17. package/dist/cli/bind-cmd.js +127 -0
  18. package/dist/cli/bind-cmd.js.map +1 -0
  19. package/dist/cli/daemon-cmd.d.ts +4 -0
  20. package/dist/cli/daemon-cmd.d.ts.map +1 -0
  21. package/dist/cli/daemon-cmd.js +137 -0
  22. package/dist/cli/daemon-cmd.js.map +1 -0
  23. package/dist/cli/index.d.ts +2 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +62 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/config/loader.d.ts +5 -0
  28. package/dist/config/loader.d.ts.map +1 -0
  29. package/dist/config/loader.js +54 -0
  30. package/dist/config/loader.js.map +1 -0
  31. package/dist/config/paths.d.ts +14 -0
  32. package/dist/config/paths.d.ts.map +1 -0
  33. package/dist/config/paths.js +27 -0
  34. package/dist/config/paths.js.map +1 -0
  35. package/dist/config/schema.d.ts +48 -0
  36. package/dist/config/schema.d.ts.map +1 -0
  37. package/dist/config/schema.js +52 -0
  38. package/dist/config/schema.js.map +1 -0
  39. package/dist/daemon/control-client.d.ts +2 -0
  40. package/dist/daemon/control-client.d.ts.map +1 -0
  41. package/dist/daemon/control-client.js +51 -0
  42. package/dist/daemon/control-client.js.map +1 -0
  43. package/dist/daemon/control-socket.d.ts +19 -0
  44. package/dist/daemon/control-socket.d.ts.map +1 -0
  45. package/dist/daemon/control-socket.js +192 -0
  46. package/dist/daemon/control-socket.js.map +1 -0
  47. package/dist/daemon/daemon.d.ts +20 -0
  48. package/dist/daemon/daemon.d.ts.map +1 -0
  49. package/dist/daemon/daemon.js +166 -0
  50. package/dist/daemon/daemon.js.map +1 -0
  51. package/dist/dispatch/dispatch-pipeline.d.ts +39 -0
  52. package/dist/dispatch/dispatch-pipeline.d.ts.map +1 -0
  53. package/dist/dispatch/dispatch-pipeline.js +219 -0
  54. package/dist/dispatch/dispatch-pipeline.js.map +1 -0
  55. package/dist/dispatch/slash-commands.d.ts +35 -0
  56. package/dist/dispatch/slash-commands.d.ts.map +1 -0
  57. package/dist/dispatch/slash-commands.js +67 -0
  58. package/dist/dispatch/slash-commands.js.map +1 -0
  59. package/dist/errors.d.ts +22 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +17 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/gateway/matrix-gateway.d.ts +24 -0
  64. package/dist/gateway/matrix-gateway.d.ts.map +1 -0
  65. package/dist/gateway/matrix-gateway.js +166 -0
  66. package/dist/gateway/matrix-gateway.js.map +1 -0
  67. package/dist/logger.d.ts +13 -0
  68. package/dist/logger.d.ts.map +1 -0
  69. package/dist/logger.js +19 -0
  70. package/dist/logger.js.map +1 -0
  71. package/dist/main.d.ts +3 -0
  72. package/dist/main.d.ts.map +1 -0
  73. package/dist/main.js +7 -0
  74. package/dist/main.js.map +1 -0
  75. package/dist/profile/profile-registry.d.ts +24 -0
  76. package/dist/profile/profile-registry.d.ts.map +1 -0
  77. package/dist/profile/profile-registry.js +114 -0
  78. package/dist/profile/profile-registry.js.map +1 -0
  79. package/dist/runtime-check.d.ts +18 -0
  80. package/dist/runtime-check.d.ts.map +1 -0
  81. package/dist/runtime-check.js +62 -0
  82. package/dist/runtime-check.js.map +1 -0
  83. package/dist/session/compat-hash.d.ts +21 -0
  84. package/dist/session/compat-hash.d.ts.map +1 -0
  85. package/dist/session/compat-hash.js +115 -0
  86. package/dist/session/compat-hash.js.map +1 -0
  87. package/dist/session/session-store.d.ts +29 -0
  88. package/dist/session/session-store.d.ts.map +1 -0
  89. package/dist/session/session-store.js +123 -0
  90. package/dist/session/session-store.js.map +1 -0
  91. package/dist/version.d.ts +2 -0
  92. package/dist/version.d.ts.map +1 -0
  93. package/dist/version.js +2 -0
  94. package/dist/version.js.map +1 -0
  95. package/package.json +59 -0
@@ -0,0 +1,29 @@
1
+ import type { Logger } from 'pino';
2
+ export interface SessionRecord {
3
+ v: 1;
4
+ sessionId: string;
5
+ compatHash: string;
6
+ profile: string;
7
+ lastEventId?: string;
8
+ lastSeenAt: string;
9
+ }
10
+ export declare class SessionStore {
11
+ private readonly stateDir;
12
+ private logger;
13
+ /** LRU cache of recent eventIds per channel (last 100 per channel). */
14
+ private recentEvents;
15
+ private static readonly LRU;
16
+ constructor(stateDir: string, logger?: Logger);
17
+ private fileFor;
18
+ /** Read stored record for a channel, or undefined if absent / corrupt. */
19
+ get(channelId: string): SessionRecord | undefined;
20
+ /** Atomic write: .tmp + fsync + rename. Mode 0600. */
21
+ put(channelId: string, rec: Omit<SessionRecord, 'v' | 'lastSeenAt'> & {
22
+ lastSeenAt?: string;
23
+ }): void;
24
+ /** Drop the session for a channel (used by /reset or compat mismatch). */
25
+ delete(channelId: string): void;
26
+ /** Returns true if the eventId was already processed for this channel. */
27
+ hasSeenEvent(channelId: string, eventId: string): boolean;
28
+ }
29
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/session/session-store.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,CAAC,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IAOrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,MAAM,CAAS;IACvB,uEAAuE;IACvE,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAO;gBAGf,QAAQ,EAAE,MAAM,EACjC,MAAM,CAAC,EAAE,MAAM;IAMjB,OAAO,CAAC,OAAO;IAMf,0EAA0E;IAC1E,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAiBjD,sDAAsD;IACtD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,YAAY,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuCpG,0EAA0E;IAC1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS/B,0EAA0E;IAC1E,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;CAQ1D"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * M6 — SessionStore.
3
+ *
4
+ * One JSON file per channel under `~/.nps/state/`.
5
+ * ~/.nps/state/<channelId-sanitized>.json
6
+ *
7
+ * Atomic write: write to .tmp + fsync + rename. Mode 0600.
8
+ *
9
+ * Schema:
10
+ * { v: 1, sessionId, compatHash, profile, lastEventId, lastSeenAt }
11
+ *
12
+ * eventId dedupe: simple in-memory LRU + check against stored lastEventId.
13
+ */
14
+ import { existsSync, mkdirSync, openSync, fsyncSync, closeSync, renameSync, readFileSync, writeSync, chmodSync, unlinkSync, } from 'node:fs';
15
+ import { join, dirname } from 'node:path';
16
+ import { getLogger } from '../logger.js';
17
+ export class SessionStore {
18
+ stateDir;
19
+ logger;
20
+ /** LRU cache of recent eventIds per channel (last 100 per channel). */
21
+ recentEvents = new Map();
22
+ static LRU = 100;
23
+ constructor(stateDir, logger) {
24
+ this.stateDir = stateDir;
25
+ this.logger = logger ?? getLogger('session-store');
26
+ mkdirSync(this.stateDir, { recursive: true });
27
+ }
28
+ fileFor(channelId) {
29
+ // Sanitize channelId for filesystem path (Matrix room IDs contain `!`, `:`).
30
+ const safe = channelId.replace(/[^a-zA-Z0-9._-]/g, '_');
31
+ return join(this.stateDir, `${safe}.json`);
32
+ }
33
+ /** Read stored record for a channel, or undefined if absent / corrupt. */
34
+ get(channelId) {
35
+ const path = this.fileFor(channelId);
36
+ if (!existsSync(path))
37
+ return undefined;
38
+ try {
39
+ const raw = readFileSync(path, 'utf8');
40
+ const parsed = JSON.parse(raw);
41
+ if (parsed && typeof parsed === 'object' && parsed.v === 1 && typeof parsed.sessionId === 'string') {
42
+ return parsed;
43
+ }
44
+ this.logger.warn({ channelId, path }, 'unexpected session record shape — treating as missing');
45
+ return undefined;
46
+ }
47
+ catch (e) {
48
+ this.logger.warn({ channelId, path, err: e instanceof Error ? e.message : e }, 'corrupt session JSON — treating as missing (fresh start)');
49
+ return undefined;
50
+ }
51
+ }
52
+ /** Atomic write: .tmp + fsync + rename. Mode 0600. */
53
+ put(channelId, rec) {
54
+ const path = this.fileFor(channelId);
55
+ const tmp = `${path}.tmp`;
56
+ const full = {
57
+ v: 1,
58
+ sessionId: rec.sessionId,
59
+ compatHash: rec.compatHash,
60
+ profile: rec.profile,
61
+ ...(rec.lastEventId !== undefined ? { lastEventId: rec.lastEventId } : {}),
62
+ lastSeenAt: rec.lastSeenAt ?? new Date().toISOString(),
63
+ };
64
+ const json = JSON.stringify(full, null, 2);
65
+ try {
66
+ mkdirSync(dirname(tmp), { recursive: true });
67
+ const fd = openSync(tmp, 'w', 0o600);
68
+ try {
69
+ writeSync(fd, json + '\n');
70
+ fsyncSync(fd);
71
+ }
72
+ finally {
73
+ closeSync(fd);
74
+ }
75
+ renameSync(tmp, path);
76
+ try {
77
+ chmodSync(path, 0o600);
78
+ }
79
+ catch { /* best-effort */ }
80
+ // Track lastEventId in LRU for dedupe
81
+ if (full.lastEventId) {
82
+ const list = this.recentEvents.get(channelId) ?? [];
83
+ list.push(full.lastEventId);
84
+ if (list.length > SessionStore.LRU)
85
+ list.shift();
86
+ this.recentEvents.set(channelId, list);
87
+ }
88
+ }
89
+ catch (e) {
90
+ // best-effort cleanup of .tmp
91
+ try {
92
+ unlinkSync(tmp);
93
+ }
94
+ catch { /* ignore */ }
95
+ this.logger.error({ err: e instanceof Error ? e.message : e, channelId, path }, 'session put failed');
96
+ throw e;
97
+ }
98
+ }
99
+ /** Drop the session for a channel (used by /reset or compat mismatch). */
100
+ delete(channelId) {
101
+ const path = this.fileFor(channelId);
102
+ if (existsSync(path)) {
103
+ try {
104
+ unlinkSync(path);
105
+ }
106
+ catch (e) {
107
+ this.logger.warn({ err: e instanceof Error ? e.message : e, channelId }, 'delete failed');
108
+ }
109
+ }
110
+ this.recentEvents.delete(channelId);
111
+ }
112
+ /** Returns true if the eventId was already processed for this channel. */
113
+ hasSeenEvent(channelId, eventId) {
114
+ // Check in-memory LRU first
115
+ const list = this.recentEvents.get(channelId);
116
+ if (list?.includes(eventId))
117
+ return true;
118
+ // Also check stored record's lastEventId
119
+ const rec = this.get(channelId);
120
+ return rec?.lastEventId === eventId;
121
+ }
122
+ }
123
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/session/session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const NPS_VERSION = "0.1.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const NPS_VERSION = '0.1.0';
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@coralai/nps-cli",
3
+ "version": "0.1.0",
4
+ "description": "Local Linux daemon hosting per-DM Claude Code agents accessible via Matrix",
5
+ "type": "module",
6
+ "main": "dist/main.js",
7
+ "bin": {
8
+ "nps": "dist/main.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://git.wymsn.com/coral/jarvis-skills.git",
21
+ "directory": "nps-cli"
22
+ },
23
+ "engines": {
24
+ "node": ">=18.0.0"
25
+ },
26
+ "os": [
27
+ "linux"
28
+ ],
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "dev": "tsx src/main.ts",
32
+ "typecheck": "tsc --noEmit",
33
+ "test": "vitest run",
34
+ "test:watch": "vitest",
35
+ "prepublishOnly": "npm run build && npm test"
36
+ },
37
+ "keywords": [
38
+ "claude",
39
+ "agent",
40
+ "matrix",
41
+ "im",
42
+ "daemon"
43
+ ],
44
+ "license": "MIT",
45
+ "dependencies": {
46
+ "@coralai/claude-code-agent": "^0.2.0",
47
+ "chokidar": "^5.0.0",
48
+ "pino": "^10.3.1",
49
+ "yaml": "^2.9.0",
50
+ "zod": "^4.4.3"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^25.5.0",
54
+ "matrix-js-sdk": "^41.5.0",
55
+ "tsx": "^4.21.0",
56
+ "typescript": "^5.9.3",
57
+ "vitest": "^4.1.2"
58
+ }
59
+ }