@tenphi/akno 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 (147) hide show
  1. package/LICENSE +83 -0
  2. package/README.md +46 -0
  3. package/dist/args.d.ts +18 -0
  4. package/dist/args.d.ts.map +1 -0
  5. package/dist/args.js +92 -0
  6. package/dist/args.js.map +1 -0
  7. package/dist/bin.d.ts +3 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +142 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/commands/adopt-cmd.d.ts +2 -0
  12. package/dist/commands/adopt-cmd.d.ts.map +1 -0
  13. package/dist/commands/adopt-cmd.js +61 -0
  14. package/dist/commands/adopt-cmd.js.map +1 -0
  15. package/dist/commands/answer-cmd.d.ts +2 -0
  16. package/dist/commands/answer-cmd.d.ts.map +1 -0
  17. package/dist/commands/answer-cmd.js +150 -0
  18. package/dist/commands/answer-cmd.js.map +1 -0
  19. package/dist/commands/bench-cmd.d.ts +4 -0
  20. package/dist/commands/bench-cmd.d.ts.map +1 -0
  21. package/dist/commands/bench-cmd.js +1542 -0
  22. package/dist/commands/bench-cmd.js.map +1 -0
  23. package/dist/commands/config-cmd.d.ts +7 -0
  24. package/dist/commands/config-cmd.d.ts.map +1 -0
  25. package/dist/commands/config-cmd.js +80 -0
  26. package/dist/commands/config-cmd.js.map +1 -0
  27. package/dist/commands/context-cmd.d.ts +2 -0
  28. package/dist/commands/context-cmd.d.ts.map +1 -0
  29. package/dist/commands/context-cmd.js +130 -0
  30. package/dist/commands/context-cmd.js.map +1 -0
  31. package/dist/commands/doctor-cmd.d.ts +2 -0
  32. package/dist/commands/doctor-cmd.d.ts.map +1 -0
  33. package/dist/commands/doctor-cmd.js +198 -0
  34. package/dist/commands/doctor-cmd.js.map +1 -0
  35. package/dist/commands/dream-cmd.d.ts +26 -0
  36. package/dist/commands/dream-cmd.d.ts.map +1 -0
  37. package/dist/commands/dream-cmd.js +1167 -0
  38. package/dist/commands/dream-cmd.js.map +1 -0
  39. package/dist/commands/dream-model-status.d.ts +5 -0
  40. package/dist/commands/dream-model-status.d.ts.map +1 -0
  41. package/dist/commands/dream-model-status.js +33 -0
  42. package/dist/commands/dream-model-status.js.map +1 -0
  43. package/dist/commands/dream-notifications.d.ts +24 -0
  44. package/dist/commands/dream-notifications.d.ts.map +1 -0
  45. package/dist/commands/dream-notifications.js +168 -0
  46. package/dist/commands/dream-notifications.js.map +1 -0
  47. package/dist/commands/dream-schedule.d.ts +55 -0
  48. package/dist/commands/dream-schedule.d.ts.map +1 -0
  49. package/dist/commands/dream-schedule.js +160 -0
  50. package/dist/commands/dream-schedule.js.map +1 -0
  51. package/dist/commands/folder-cmd.d.ts +2 -0
  52. package/dist/commands/folder-cmd.d.ts.map +1 -0
  53. package/dist/commands/folder-cmd.js +84 -0
  54. package/dist/commands/folder-cmd.js.map +1 -0
  55. package/dist/commands/graph-cmd.d.ts +2 -0
  56. package/dist/commands/graph-cmd.d.ts.map +1 -0
  57. package/dist/commands/graph-cmd.js +126 -0
  58. package/dist/commands/graph-cmd.js.map +1 -0
  59. package/dist/commands/inbox-cmd.d.ts +2 -0
  60. package/dist/commands/inbox-cmd.d.ts.map +1 -0
  61. package/dist/commands/inbox-cmd.js +69 -0
  62. package/dist/commands/inbox-cmd.js.map +1 -0
  63. package/dist/commands/index-cmd.d.ts +2 -0
  64. package/dist/commands/index-cmd.d.ts.map +1 -0
  65. package/dist/commands/index-cmd.js +102 -0
  66. package/dist/commands/index-cmd.js.map +1 -0
  67. package/dist/commands/ingest-cmd.d.ts +2 -0
  68. package/dist/commands/ingest-cmd.d.ts.map +1 -0
  69. package/dist/commands/ingest-cmd.js +167 -0
  70. package/dist/commands/ingest-cmd.js.map +1 -0
  71. package/dist/commands/init-cmd.d.ts +292 -0
  72. package/dist/commands/init-cmd.d.ts.map +1 -0
  73. package/dist/commands/init-cmd.js +476 -0
  74. package/dist/commands/init-cmd.js.map +1 -0
  75. package/dist/commands/init-prompts.d.ts +51 -0
  76. package/dist/commands/init-prompts.d.ts.map +1 -0
  77. package/dist/commands/init-prompts.js +192 -0
  78. package/dist/commands/init-prompts.js.map +1 -0
  79. package/dist/commands/list-cmd.d.ts +2 -0
  80. package/dist/commands/list-cmd.d.ts.map +1 -0
  81. package/dist/commands/list-cmd.js +77 -0
  82. package/dist/commands/list-cmd.js.map +1 -0
  83. package/dist/commands/maintenance-policy-output.d.ts +4 -0
  84. package/dist/commands/maintenance-policy-output.d.ts.map +1 -0
  85. package/dist/commands/maintenance-policy-output.js +72 -0
  86. package/dist/commands/maintenance-policy-output.js.map +1 -0
  87. package/dist/commands/mutate-cmd.d.ts +5 -0
  88. package/dist/commands/mutate-cmd.d.ts.map +1 -0
  89. package/dist/commands/mutate-cmd.js +224 -0
  90. package/dist/commands/mutate-cmd.js.map +1 -0
  91. package/dist/commands/plan-cmd.d.ts +9 -0
  92. package/dist/commands/plan-cmd.d.ts.map +1 -0
  93. package/dist/commands/plan-cmd.js +411 -0
  94. package/dist/commands/plan-cmd.js.map +1 -0
  95. package/dist/commands/read-cmd.d.ts +2 -0
  96. package/dist/commands/read-cmd.d.ts.map +1 -0
  97. package/dist/commands/read-cmd.js +89 -0
  98. package/dist/commands/read-cmd.js.map +1 -0
  99. package/dist/commands/recall-cmd.d.ts +2 -0
  100. package/dist/commands/recall-cmd.d.ts.map +1 -0
  101. package/dist/commands/recall-cmd.js +176 -0
  102. package/dist/commands/recall-cmd.js.map +1 -0
  103. package/dist/commands/redeploy-cmd.d.ts +43 -0
  104. package/dist/commands/redeploy-cmd.d.ts.map +1 -0
  105. package/dist/commands/redeploy-cmd.js +270 -0
  106. package/dist/commands/redeploy-cmd.js.map +1 -0
  107. package/dist/commands/rules-cmd.d.ts +2 -0
  108. package/dist/commands/rules-cmd.d.ts.map +1 -0
  109. package/dist/commands/rules-cmd.js +72 -0
  110. package/dist/commands/rules-cmd.js.map +1 -0
  111. package/dist/commands/serve-cmd.d.ts +23 -0
  112. package/dist/commands/serve-cmd.d.ts.map +1 -0
  113. package/dist/commands/serve-cmd.js +415 -0
  114. package/dist/commands/serve-cmd.js.map +1 -0
  115. package/dist/commands/timeline-cmd.d.ts +2 -0
  116. package/dist/commands/timeline-cmd.d.ts.map +1 -0
  117. package/dist/commands/timeline-cmd.js +67 -0
  118. package/dist/commands/timeline-cmd.js.map +1 -0
  119. package/dist/commands/write-cmd.d.ts +49 -0
  120. package/dist/commands/write-cmd.d.ts.map +1 -0
  121. package/dist/commands/write-cmd.js +269 -0
  122. package/dist/commands/write-cmd.js.map +1 -0
  123. package/dist/ops-handle.d.ts +67 -0
  124. package/dist/ops-handle.d.ts.map +1 -0
  125. package/dist/ops-handle.js +196 -0
  126. package/dist/ops-handle.js.map +1 -0
  127. package/dist/output.d.ts +28 -0
  128. package/dist/output.d.ts.map +1 -0
  129. package/dist/output.js +87 -0
  130. package/dist/output.js.map +1 -0
  131. package/dist/serve/http.d.ts +19 -0
  132. package/dist/serve/http.d.ts.map +1 -0
  133. package/dist/serve/http.js +135 -0
  134. package/dist/serve/http.js.map +1 -0
  135. package/dist/serve/mcp.d.ts +21 -0
  136. package/dist/serve/mcp.d.ts.map +1 -0
  137. package/dist/serve/mcp.js +79 -0
  138. package/dist/serve/mcp.js.map +1 -0
  139. package/dist/serve/socket.d.ts +15 -0
  140. package/dist/serve/socket.d.ts.map +1 -0
  141. package/dist/serve/socket.js +311 -0
  142. package/dist/serve/socket.js.map +1 -0
  143. package/dist/version.d.ts +2 -0
  144. package/dist/version.d.ts.map +1 -0
  145. package/dist/version.js +15 -0
  146. package/dist/version.js.map +1 -0
  147. package/package.json +40 -0
@@ -0,0 +1,311 @@
1
+ import fs from 'node:fs';
2
+ import net from 'node:net';
3
+ import path from 'node:path';
4
+ import { AknoError, COMMAND_NAMES, isCommandName, OPS, WireRequest, createLineDecoder, encodeLine, isOpName, PROTOCOL_VERSION, } from '@tenphi/akno-protocol';
5
+ import { MAINTENANCE_TRANSFORMS, MAINTENANCE_PLAN_STATUSES, } from '@tenphi/akno-core';
6
+ import { AKNO_VERSION } from "../version.js";
7
+ /**
8
+ * The default door: no port, filesystem permissions are the auth, and it is
9
+ * the fastest. Newline-delimited JSON over a unix socket, framed by the protocol
10
+ * package so this file and the client cannot disagree about the wire.
11
+ */
12
+ export async function serveSocket(akno, socketPath, options = {}) {
13
+ fs.mkdirSync(path.dirname(socketPath), { recursive: true });
14
+ // A socket file left behind by a crash blocks bind. The write lock is what
15
+ // actually prevents two servers, so removing a dead socket is safe here.
16
+ if (fs.existsSync(socketPath)) {
17
+ if (await isLive(socketPath)) {
18
+ throw new AknoError('read_only', `another Akno is already listening on ${socketPath}`);
19
+ }
20
+ fs.rmSync(socketPath, { force: true });
21
+ }
22
+ const server = net.createServer((socket) => {
23
+ socket.setNoDelay(true);
24
+ socket.setEncoding('utf8');
25
+ const hello = {
26
+ hello: 'akno',
27
+ protocol: PROTOCOL_VERSION,
28
+ version: AKNO_VERSION,
29
+ writable: akno.writable,
30
+ akno_path: akno.config.aknoPath,
31
+ ops: options.allow ?? Object.keys(OPS),
32
+ commands: [...COMMAND_NAMES],
33
+ };
34
+ socket.write(encodeLine(hello));
35
+ const decode = createLineDecoder();
36
+ socket.on('data', (chunk) => {
37
+ for (const raw of decode(chunk)) {
38
+ void handle(raw, socket, akno, options);
39
+ }
40
+ });
41
+ socket.on('error', () => socket.destroy());
42
+ });
43
+ // macOS allows 104 bytes for a socket path, including the terminator. Past that the bind
44
+ // *succeeds* on a silently truncated name and the chmod below fails with a bare ENOENT stack
45
+ // trace — which is what a deep `state_dir` produced. Said plainly and up front instead.
46
+ const pathBytes = Buffer.byteLength(socketPath) + 1;
47
+ if (pathBytes > 104) {
48
+ throw new AknoError('invalid', `the socket path is ${pathBytes} bytes and macOS allows 104: ${socketPath}. ` +
49
+ 'Set `server.socket` to an absolute path somewhere shorter, or move `state_dir`.');
50
+ }
51
+ await new Promise((resolve, reject) => {
52
+ server.once('error', reject);
53
+ server.listen(socketPath, () => {
54
+ server.off('error', reject);
55
+ try {
56
+ // Owner-only: the socket *is* the authentication boundary. If it cannot be locked
57
+ // down, the door does not open — a world-readable socket is worse than no socket.
58
+ fs.chmodSync(socketPath, 0o600);
59
+ }
60
+ catch (err) {
61
+ reject(new AknoError('unavailable', `the socket could not be secured at ${socketPath}: ${err instanceof Error ? err.message : String(err)}`));
62
+ return;
63
+ }
64
+ resolve();
65
+ });
66
+ });
67
+ return {
68
+ path: socketPath,
69
+ async close() {
70
+ await new Promise((resolve) => server.close(() => resolve()));
71
+ fs.rmSync(socketPath, { force: true });
72
+ },
73
+ };
74
+ }
75
+ /**
76
+ * Operator commands, run by the process that holds the write handle. Input is
77
+ * shaped by the CLI that sends it; each of these is a small, named bag of options rather than
78
+ * an op with a schema, which is why they are not in the registry.
79
+ */
80
+ async function runCommand(akno, command, input) {
81
+ const options = (input ?? {});
82
+ switch (command) {
83
+ case 'index':
84
+ return akno.index(options);
85
+ case 'inbox':
86
+ return akno.inbox(options);
87
+ case 'dream':
88
+ return akno.dream(options);
89
+ case 'approve': {
90
+ const slug = input?.slug;
91
+ return akno.approve(idFrom(input, 'proposal_id'), typeof slug === 'string' && slug.length > 0 ? { slug } : {});
92
+ }
93
+ case 'decline':
94
+ return akno.decline(idFrom(input, 'proposal_id'));
95
+ case 'changes':
96
+ return akno.changes(limitFrom(input));
97
+ case 'proposals':
98
+ return akno.proposals();
99
+ case 'plan': {
100
+ const action = stringFrom(input, 'action');
101
+ switch (action) {
102
+ case 'list':
103
+ return akno.plans(limitFrom(input), planStatusesFrom(input));
104
+ case 'show':
105
+ return akno.plan(idFrom(input, 'plan_id'));
106
+ case 'diff': {
107
+ const item = input?.item_id;
108
+ const revision = optionalPositiveInteger(input, 'revision');
109
+ return akno.maintenanceDiff(idFrom(input, 'plan_id'), typeof item === 'string' && item.length > 0 ? item : undefined, revision);
110
+ }
111
+ case 'revise': {
112
+ const relPath = input?.rel_path;
113
+ const reason = input?.reason;
114
+ if (relPath !== undefined && (typeof relPath !== 'string' || relPath.length === 0)) {
115
+ throw new AknoError('invalid', 'rel_path must be a non-empty string');
116
+ }
117
+ if (reason !== undefined && typeof reason !== 'string') {
118
+ throw new AknoError('invalid', 'reason must be a string');
119
+ }
120
+ return akno.revisePlan(idFrom(input, 'plan_id'), idFrom(input, 'item_id'), {
121
+ after: stringFrom(input, 'after'),
122
+ ...(typeof relPath === 'string' ? { relPath } : {}),
123
+ ...(typeof reason === 'string' ? { reason } : {}),
124
+ });
125
+ }
126
+ case 'decide': {
127
+ const outcome = stringFrom(input, 'outcome');
128
+ if (outcome !== 'approve' && outcome !== 'reject') {
129
+ throw new AknoError('invalid', 'outcome must be approve or reject');
130
+ }
131
+ const reason = input?.reason;
132
+ const idempotencyKey = optionalStringFrom(input, 'idempotency_key');
133
+ return akno.decidePlan(idFrom(input, 'plan_id'), idFrom(input, 'item_id'), outcome, typeof reason === 'string' ? reason : '', idempotencyKey ? { idempotencyKey } : {});
134
+ }
135
+ case 'apply': {
136
+ const idempotencyKey = optionalStringFrom(input, 'idempotency_key');
137
+ return akno.applyPlan(idFrom(input, 'plan_id'), idempotencyKey ? { idempotencyKey } : {});
138
+ }
139
+ case 'supersede': {
140
+ const reason = input?.reason;
141
+ return akno.supersedePlan(idFrom(input, 'plan_id'), typeof reason === 'string' ? reason : undefined);
142
+ }
143
+ case 'prune':
144
+ return akno.prunePlans({ apply: booleanFrom(input, 'apply', false) });
145
+ case 'status':
146
+ return akno.maintenanceStatus(statusQueryFrom(input));
147
+ case 'resume': {
148
+ const scope = stringFrom(input, 'scope');
149
+ if (scope === 'profile')
150
+ return akno.resumeMaintenance({ profile: true });
151
+ if (!MAINTENANCE_TRANSFORMS.includes(scope)) {
152
+ throw new AknoError('invalid', `resume scope must be profile or one of: ${MAINTENANCE_TRANSFORMS.join(', ')}`);
153
+ }
154
+ return akno.resumeMaintenance({
155
+ transform: scope,
156
+ });
157
+ }
158
+ case 'policy': {
159
+ const mode = optionalMaintenanceMode(input);
160
+ return akno.maintenancePolicy(stringFrom(input, 'path'), mode);
161
+ }
162
+ default:
163
+ throw new AknoError('invalid', `unknown plan action: ${action}`);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ function optionalMaintenanceMode(input) {
169
+ const value = input?.mode;
170
+ if (value === undefined)
171
+ return undefined;
172
+ if (value === 'audit' || value === 'review' || value === 'auto')
173
+ return value;
174
+ throw new AknoError('invalid', 'mode must be audit, review, or auto');
175
+ }
176
+ function idFrom(input, key) {
177
+ const value = input?.[key];
178
+ if (typeof value !== 'string' || value.length === 0) {
179
+ throw new AknoError('invalid', `${key} is required`);
180
+ }
181
+ return value;
182
+ }
183
+ function stringFrom(input, key) {
184
+ const value = input?.[key];
185
+ if (typeof value !== 'string' || value.length === 0) {
186
+ throw new AknoError('invalid', `${key} is required`);
187
+ }
188
+ return value;
189
+ }
190
+ function optionalStringFrom(input, key) {
191
+ const value = input?.[key];
192
+ if (value === undefined)
193
+ return undefined;
194
+ if (typeof value !== 'string' || value.length === 0) {
195
+ throw new AknoError('invalid', `${key} must be a non-empty string`);
196
+ }
197
+ return value;
198
+ }
199
+ function booleanFrom(input, key, fallback) {
200
+ const value = input?.[key];
201
+ if (value === undefined)
202
+ return fallback;
203
+ if (typeof value !== 'boolean')
204
+ throw new AknoError('invalid', `${key} must be boolean`);
205
+ return value;
206
+ }
207
+ function optionalPositiveInteger(input, key) {
208
+ const value = input?.[key];
209
+ if (value === undefined)
210
+ return undefined;
211
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {
212
+ throw new AknoError('invalid', `${key} must be a positive integer`);
213
+ }
214
+ return value;
215
+ }
216
+ function limitFrom(input) {
217
+ const value = input?.limit;
218
+ return typeof value === 'number' && Number.isFinite(value) && value > 0 ? Math.floor(value) : 20;
219
+ }
220
+ function planStatusesFrom(input) {
221
+ const value = input?.status;
222
+ if (value === undefined)
223
+ return [];
224
+ if (!Array.isArray(value) ||
225
+ value.length === 0 ||
226
+ value.some((status) => typeof status !== 'string' || !MAINTENANCE_PLAN_STATUSES.includes(status))) {
227
+ throw new AknoError('invalid', `plan status must contain: ${MAINTENANCE_PLAN_STATUSES.join(', ')}`);
228
+ }
229
+ return [...new Set(value)];
230
+ }
231
+ function statusQueryFrom(input) {
232
+ const values = input ?? {};
233
+ const runId = values.run_id;
234
+ const last = values.last;
235
+ const pending = values.pending;
236
+ const selected = Number(runId !== undefined) + Number(last !== undefined) + Number(pending === true);
237
+ if (selected > 1)
238
+ throw new AknoError('invalid', 'choose only one of run_id, last, or pending');
239
+ if (runId !== undefined && (typeof runId !== 'string' || runId.length === 0)) {
240
+ throw new AknoError('invalid', 'run_id must be a non-empty string');
241
+ }
242
+ if (last !== undefined && (typeof last !== 'number' || !Number.isInteger(last) || last < 1 || last > 100)) {
243
+ throw new AknoError('invalid', 'last must be an integer from 1 to 100');
244
+ }
245
+ if (pending !== undefined && typeof pending !== 'boolean') {
246
+ throw new AknoError('invalid', 'pending must be boolean');
247
+ }
248
+ return {
249
+ ...(typeof runId === 'string' ? { runId } : {}),
250
+ ...(typeof last === 'number' ? { last } : {}),
251
+ ...(pending === true ? { pending: true } : {}),
252
+ };
253
+ }
254
+ async function handle(raw, socket, akno, options) {
255
+ let request;
256
+ try {
257
+ request = WireRequest.parse(JSON.parse(raw));
258
+ }
259
+ catch {
260
+ socket.write(encodeLine({ id: 0, ok: false, error: { code: 'invalid', message: 'malformed request line' } }));
261
+ return;
262
+ }
263
+ const started = performance.now();
264
+ try {
265
+ if (request.kind === 'command') {
266
+ // Exactly one process holds the write handle, so maintenance that writes has to be
267
+ // reachable *through* the service rather than racing it.
268
+ if (!isCommandName(request.op)) {
269
+ throw new AknoError('invalid', `unknown command: ${request.op}`);
270
+ }
271
+ const result = await runCommand(akno, request.op, request.input);
272
+ options.log?.(`${request.op} ${(performance.now() - started).toFixed(1)}ms`);
273
+ socket.write(encodeLine({ id: request.id, ok: true, result }));
274
+ return;
275
+ }
276
+ if (!isOpName(request.op)) {
277
+ throw new AknoError('invalid', `unknown op: ${request.op}`);
278
+ }
279
+ // Trust is a parameter, not a property of the transport: the same code
280
+ // runs with different permissions, so an MCP caller can be denied `forget`
281
+ // without a second code path that grows its own bugs.
282
+ if (options.allow && !options.allow.includes(request.op)) {
283
+ throw new AknoError('forbidden', `${request.op} is not allowed on this door`);
284
+ }
285
+ // Honoured because this door is trusted: filesystem permissions are its authentication, and
286
+ // without it a host mediating for an agent could never answer a gated proposal on the owner's
287
+ // behalf — the gate would be unanswerable through the door the service is reached by.
288
+ const result = await akno.call(request.op, request.input, request.actor ? { actor: request.actor } : {});
289
+ options.log?.(`${request.op} ${(performance.now() - started).toFixed(1)}ms`);
290
+ socket.write(encodeLine({ id: request.id, ok: true, result }));
291
+ }
292
+ catch (err) {
293
+ const error = AknoError.from(err);
294
+ options.log?.(`${request.op} ${error.code}: ${error.message}`);
295
+ socket.write(encodeLine({ id: request.id, ok: false, error: error.toJSON() }));
296
+ }
297
+ }
298
+ /** A socket nobody is listening on refuses the connection immediately. */
299
+ async function isLive(socketPath) {
300
+ return new Promise((resolve) => {
301
+ const probe = net.createConnection(socketPath);
302
+ const done = (live) => {
303
+ probe.destroy();
304
+ resolve(live);
305
+ };
306
+ probe.once('connect', () => done(true));
307
+ probe.once('error', () => done(false));
308
+ setTimeout(() => done(false), 500);
309
+ });
310
+ }
311
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/serve/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const AKNO_VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,YAAY,QAAmB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import fs from 'node:fs';
2
+ /**
3
+ * The package manifest is the release authority. Reading it at runtime keeps the CLI, socket/HTTP
4
+ * handshakes, and MCP server identity on the version that was actually installed; a release bump
5
+ * therefore has one editable value instead of four easy-to-miss string literals.
6
+ */
7
+ function packageVersion() {
8
+ const manifest = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
9
+ if (typeof manifest.version !== 'string' || manifest.version.length === 0) {
10
+ throw new Error('the @tenphi/akno package manifest has no version');
11
+ }
12
+ return manifest.version;
13
+ }
14
+ export const AKNO_VERSION = packageVersion();
15
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAMzB;;;;GAIG;AACH,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAClD,CAAC;IACrB,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@tenphi/akno",
3
+ "version": "0.1.0",
4
+ "description": "Akno — a two-way memory layer for agents over a Markdown knowledge base",
5
+ "license": "PolyForm-Noncommercial-1.0.0",
6
+ "type": "module",
7
+ "bin": {
8
+ "akno": "./dist/bin.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "dependencies": {
14
+ "@modelcontextprotocol/sdk": "^1.29.0",
15
+ "zod": "^4.4.3",
16
+ "@tenphi/akno-client": "0.1.0",
17
+ "@tenphi/akno-core": "0.1.0",
18
+ "@tenphi/akno-protocol": "0.1.0"
19
+ },
20
+ "os": [
21
+ "darwin"
22
+ ],
23
+ "engines": {
24
+ "node": ">=22.18"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/tenphi/akno.git",
32
+ "directory": "packages/cli"
33
+ },
34
+ "homepage": "https://github.com/tenphi/akno#readme",
35
+ "bugs": {
36
+ "url": "https://github.com/tenphi/akno/issues"
37
+ },
38
+ "author": "Andrey Yamanov",
39
+ "scripts": {}
40
+ }