chainlesschain 0.47.9 → 0.49.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 (70) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AppLayout-6SPt_8Y_.js → AppLayout-Rvi759IS.js} +1 -1
  5. package/src/assets/web-panel/assets/Dashboard-BS-tzGNj.css +1 -0
  6. package/src/assets/web-panel/assets/{Dashboard-Br7kCwKJ.js → Dashboard-DBhFxXYQ.js} +2 -2
  7. package/src/assets/web-panel/assets/{index-tN-8TosE.js → index-uL0cZ8N_.js} +2 -2
  8. package/src/assets/web-panel/index.html +2 -2
  9. package/src/commands/codegen.js +303 -0
  10. package/src/commands/collab.js +482 -0
  11. package/src/commands/crosschain.js +382 -0
  12. package/src/commands/dbevo.js +388 -0
  13. package/src/commands/dev.js +411 -0
  14. package/src/commands/federation.js +427 -0
  15. package/src/commands/fusion.js +332 -0
  16. package/src/commands/governance.js +505 -0
  17. package/src/commands/hardening.js +110 -0
  18. package/src/commands/incentive.js +373 -0
  19. package/src/commands/inference.js +304 -0
  20. package/src/commands/infra.js +361 -0
  21. package/src/commands/kg.js +371 -0
  22. package/src/commands/marketplace.js +326 -0
  23. package/src/commands/mcp.js +97 -18
  24. package/src/commands/nlprog.js +329 -0
  25. package/src/commands/ops.js +408 -0
  26. package/src/commands/perception.js +385 -0
  27. package/src/commands/pqc.js +34 -0
  28. package/src/commands/privacy.js +345 -0
  29. package/src/commands/quantization.js +280 -0
  30. package/src/commands/recommend.js +336 -0
  31. package/src/commands/reputation.js +349 -0
  32. package/src/commands/runtime.js +500 -0
  33. package/src/commands/sla.js +352 -0
  34. package/src/commands/stress.js +252 -0
  35. package/src/commands/tech.js +268 -0
  36. package/src/commands/tenant.js +576 -0
  37. package/src/commands/trust.js +366 -0
  38. package/src/harness/mcp-client.js +330 -54
  39. package/src/index.js +112 -0
  40. package/src/lib/aiops.js +523 -0
  41. package/src/lib/autonomous-developer.js +524 -0
  42. package/src/lib/code-agent.js +442 -0
  43. package/src/lib/collaboration-governance.js +556 -0
  44. package/src/lib/community-governance.js +649 -0
  45. package/src/lib/content-recommendation.js +600 -0
  46. package/src/lib/cross-chain.js +669 -0
  47. package/src/lib/dbevo.js +669 -0
  48. package/src/lib/decentral-infra.js +445 -0
  49. package/src/lib/federation-hardening.js +587 -0
  50. package/src/lib/hardening-manager.js +409 -0
  51. package/src/lib/inference-network.js +407 -0
  52. package/src/lib/knowledge-graph.js +530 -0
  53. package/src/lib/mcp-client.js +3 -0
  54. package/src/lib/multimodal.js +698 -0
  55. package/src/lib/nl-programming.js +595 -0
  56. package/src/lib/perception.js +500 -0
  57. package/src/lib/pqc-manager.js +141 -9
  58. package/src/lib/privacy-computing.js +575 -0
  59. package/src/lib/protocol-fusion.js +535 -0
  60. package/src/lib/quantization.js +362 -0
  61. package/src/lib/reputation-optimizer.js +509 -0
  62. package/src/lib/skill-marketplace.js +397 -0
  63. package/src/lib/sla-manager.js +484 -0
  64. package/src/lib/stress-tester.js +383 -0
  65. package/src/lib/tech-learning-engine.js +651 -0
  66. package/src/lib/tenant-saas.js +831 -0
  67. package/src/lib/token-incentive.js +513 -0
  68. package/src/lib/trust-security.js +473 -0
  69. package/src/lib/universal-runtime.js +771 -0
  70. package/src/assets/web-panel/assets/Dashboard-CKeMmCoT.css +0 -1
@@ -0,0 +1,411 @@
1
+ /**
2
+ * Autonomous Developer commands (Phase 63)
3
+ * chainlesschain dev levels|phases|refactor-types|start|list|show|phase|
4
+ * pause|resume|complete|fail|review|adr|adrs
5
+ */
6
+
7
+ import chalk from "chalk";
8
+ import { logger } from "../lib/logger.js";
9
+ import { bootstrap, shutdown } from "../runtime/bootstrap.js";
10
+ import {
11
+ ensureAutonomousDevTables,
12
+ listAutonomyLevels,
13
+ listPhases,
14
+ listRefactoringTypes,
15
+ startDevSession,
16
+ getSession,
17
+ listSessions,
18
+ advancePhase,
19
+ pauseSession,
20
+ resumeSession,
21
+ completeSession,
22
+ failSession,
23
+ reviewCode,
24
+ recordADR,
25
+ listADRs,
26
+ renderADR,
27
+ AUTONOMY_LEVELS,
28
+ } from "../lib/autonomous-developer.js";
29
+
30
+ function _dbFromCtx(ctx) {
31
+ if (!ctx.db) {
32
+ logger.error("Database not available");
33
+ process.exit(1);
34
+ }
35
+ const db = ctx.db.getDatabase();
36
+ ensureAutonomousDevTables(db);
37
+ return db;
38
+ }
39
+
40
+ function _printSession(s) {
41
+ logger.log(
42
+ ` ${chalk.bold("ID:")} ${chalk.cyan(s.sessionId.slice(0, 8))}`,
43
+ );
44
+ logger.log(` ${chalk.bold("Req:")} ${s.requirement}`);
45
+ logger.log(` ${chalk.bold("Phase:")} ${s.currentPhase}`);
46
+ logger.log(` ${chalk.bold("Status:")} ${s.status}`);
47
+ logger.log(` ${chalk.bold("Autonomy:")} L${s.autonomyLevel}`);
48
+ }
49
+
50
+ export function registerDevCommand(program) {
51
+ const dev = program
52
+ .command("dev")
53
+ .description(
54
+ "Autonomous developer — dev sessions, ADRs, code review, refactor catalog",
55
+ );
56
+
57
+ dev
58
+ .command("levels")
59
+ .description("List autonomy levels (L0-L4)")
60
+ .option("--json", "Output as JSON")
61
+ .action((options) => {
62
+ const levels = listAutonomyLevels();
63
+ if (options.json) {
64
+ console.log(JSON.stringify(levels, null, 2));
65
+ } else {
66
+ for (const l of levels) {
67
+ logger.log(
68
+ ` ${chalk.cyan(`L${l.level}`)} ${chalk.bold(l.name.padEnd(18))} ${l.description}`,
69
+ );
70
+ }
71
+ }
72
+ });
73
+
74
+ dev
75
+ .command("phases")
76
+ .description("List development phases in order")
77
+ .option("--json", "Output as JSON")
78
+ .action((options) => {
79
+ const phases = listPhases();
80
+ if (options.json) {
81
+ console.log(JSON.stringify(phases, null, 2));
82
+ } else {
83
+ for (let i = 0; i < phases.length; i++) {
84
+ logger.log(` ${chalk.cyan(`${i + 1}.`)} ${phases[i]}`);
85
+ }
86
+ }
87
+ });
88
+
89
+ dev
90
+ .command("refactor-types")
91
+ .description("List known refactoring types")
92
+ .option("--json", "Output as JSON")
93
+ .action((options) => {
94
+ const types = listRefactoringTypes();
95
+ if (options.json) {
96
+ console.log(JSON.stringify(types, null, 2));
97
+ } else {
98
+ for (const t of types) logger.log(` ${chalk.cyan(t)}`);
99
+ }
100
+ });
101
+
102
+ dev
103
+ .command("start <requirement>")
104
+ .description("Start a new dev session")
105
+ .option("-l, --level <n>", "Autonomy level 0..4", parseInt, 2)
106
+ .option("-b, --by <author>", "createdBy tag")
107
+ .option("--json", "Output as JSON")
108
+ .action(async (requirement, options) => {
109
+ try {
110
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
111
+ const db = _dbFromCtx(ctx);
112
+ const session = startDevSession(db, {
113
+ requirement,
114
+ autonomyLevel: options.level,
115
+ createdBy: options.by,
116
+ });
117
+ if (options.json) {
118
+ console.log(JSON.stringify(session, null, 2));
119
+ } else {
120
+ logger.success("Dev session started");
121
+ _printSession(session);
122
+ }
123
+ await shutdown();
124
+ } catch (err) {
125
+ logger.error(`Failed: ${err.message}`);
126
+ process.exit(1);
127
+ }
128
+ });
129
+
130
+ dev
131
+ .command("list")
132
+ .description("List dev sessions")
133
+ .option(
134
+ "-s, --status <s>",
135
+ "Filter by status (active|paused|completed|failed)",
136
+ )
137
+ .option("-p, --phase <p>", "Filter by phase")
138
+ .option("--limit <n>", "Maximum entries", parseInt, 50)
139
+ .option("--json", "Output as JSON")
140
+ .action(async (options) => {
141
+ try {
142
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
143
+ _dbFromCtx(ctx);
144
+ const rows = listSessions({
145
+ status: options.status,
146
+ phase: options.phase,
147
+ limit: options.limit,
148
+ });
149
+ if (options.json) {
150
+ console.log(JSON.stringify(rows, null, 2));
151
+ } else if (rows.length === 0) {
152
+ logger.info("No dev sessions.");
153
+ } else {
154
+ for (const s of rows) {
155
+ logger.log(
156
+ ` ${chalk.cyan(s.sessionId.slice(0, 8))} L${s.autonomyLevel} [${s.status.padEnd(9)}] ${s.currentPhase.padEnd(22)} ${s.requirement}`,
157
+ );
158
+ }
159
+ }
160
+ await shutdown();
161
+ } catch (err) {
162
+ logger.error(`Failed: ${err.message}`);
163
+ process.exit(1);
164
+ }
165
+ });
166
+
167
+ dev
168
+ .command("show <session-id>")
169
+ .description("Show full details of a dev session")
170
+ .option("--json", "Output as JSON")
171
+ .action(async (sessionId, options) => {
172
+ try {
173
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
174
+ _dbFromCtx(ctx);
175
+ const session = getSession(sessionId);
176
+ if (!session) {
177
+ logger.error(`Session not found: ${sessionId}`);
178
+ process.exit(1);
179
+ }
180
+ if (options.json) {
181
+ console.log(JSON.stringify(session, null, 2));
182
+ } else {
183
+ _printSession(session);
184
+ if (session.reviewFeedback) {
185
+ logger.log(
186
+ ` ${chalk.bold("Feedback:")} ${JSON.stringify(session.reviewFeedback).slice(0, 120)}`,
187
+ );
188
+ }
189
+ }
190
+ await shutdown();
191
+ } catch (err) {
192
+ logger.error(`Failed: ${err.message}`);
193
+ process.exit(1);
194
+ }
195
+ });
196
+
197
+ dev
198
+ .command("phase <session-id> <phase>")
199
+ .description("Advance a session to a new phase")
200
+ .option("--json", "Output as JSON")
201
+ .action(async (sessionId, phase, options) => {
202
+ try {
203
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
204
+ const db = _dbFromCtx(ctx);
205
+ const session = advancePhase(db, sessionId, phase);
206
+ if (options.json) {
207
+ console.log(JSON.stringify(session, null, 2));
208
+ } else {
209
+ logger.success(`Phase advanced → ${session.currentPhase}`);
210
+ }
211
+ await shutdown();
212
+ } catch (err) {
213
+ logger.error(`Failed: ${err.message}`);
214
+ process.exit(1);
215
+ }
216
+ });
217
+
218
+ dev
219
+ .command("pause <session-id>")
220
+ .description("Pause an active session")
221
+ .action(async (sessionId) => {
222
+ try {
223
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
224
+ const db = _dbFromCtx(ctx);
225
+ pauseSession(db, sessionId);
226
+ logger.success(`Paused ${sessionId.slice(0, 8)}`);
227
+ await shutdown();
228
+ } catch (err) {
229
+ logger.error(`Failed: ${err.message}`);
230
+ process.exit(1);
231
+ }
232
+ });
233
+
234
+ dev
235
+ .command("resume <session-id>")
236
+ .description("Resume a paused session")
237
+ .action(async (sessionId) => {
238
+ try {
239
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
240
+ const db = _dbFromCtx(ctx);
241
+ resumeSession(db, sessionId);
242
+ logger.success(`Resumed ${sessionId.slice(0, 8)}`);
243
+ await shutdown();
244
+ } catch (err) {
245
+ logger.error(`Failed: ${err.message}`);
246
+ process.exit(1);
247
+ }
248
+ });
249
+
250
+ dev
251
+ .command("complete <session-id>")
252
+ .description("Mark a session completed")
253
+ .action(async (sessionId) => {
254
+ try {
255
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
256
+ const db = _dbFromCtx(ctx);
257
+ completeSession(db, sessionId);
258
+ logger.success(`Completed ${sessionId.slice(0, 8)}`);
259
+ await shutdown();
260
+ } catch (err) {
261
+ logger.error(`Failed: ${err.message}`);
262
+ process.exit(1);
263
+ }
264
+ });
265
+
266
+ dev
267
+ .command("fail <session-id>")
268
+ .description("Mark a session failed")
269
+ .option("-r, --reason <text>", "Failure reason")
270
+ .action(async (sessionId, options) => {
271
+ try {
272
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
273
+ const db = _dbFromCtx(ctx);
274
+ failSession(db, sessionId, options.reason);
275
+ logger.success(`Failed ${sessionId.slice(0, 8)}`);
276
+ await shutdown();
277
+ } catch (err) {
278
+ logger.error(`Failed: ${err.message}`);
279
+ process.exit(1);
280
+ }
281
+ });
282
+
283
+ dev
284
+ .command("review <file>")
285
+ .description(
286
+ "Review a file using heuristics (delegates to detectAntiPatterns)",
287
+ )
288
+ .option("-s, --session <id>", "Attach review to a session")
289
+ .option("--min-score <n>", "Minimum passing score 0..1", parseFloat, 0.7)
290
+ .option("--json", "Output as JSON")
291
+ .action(async (file, options) => {
292
+ try {
293
+ let db = null;
294
+ if (options.session) {
295
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
296
+ db = _dbFromCtx(ctx);
297
+ }
298
+ const result = reviewCode(file, {
299
+ sessionId: options.session,
300
+ db,
301
+ minScore: options.minScore,
302
+ });
303
+ if (options.json) {
304
+ console.log(JSON.stringify(result, null, 2));
305
+ } else {
306
+ const color = result.passed ? chalk.green : chalk.yellow;
307
+ logger.log(
308
+ ` ${color(`Grade ${result.grade}`)} score=${result.score} findings=${result.totalFindings}`,
309
+ );
310
+ for (const f of result.findings) {
311
+ logger.log(
312
+ ` ${chalk.yellow(f.type.padEnd(22))} [${f.severity}] ${f.detail}`,
313
+ );
314
+ }
315
+ }
316
+ if (options.session) await shutdown();
317
+ } catch (err) {
318
+ logger.error(`Failed: ${err.message}`);
319
+ process.exit(1);
320
+ }
321
+ });
322
+
323
+ dev
324
+ .command("adr <session-id> <title> <decision>")
325
+ .description("Record an Architecture Decision Record for a session")
326
+ .option("-c, --context <text>", "Decision context", "")
327
+ .option("-q, --consequences <text>", "Consequences", "")
328
+ .option("-a, --alternatives <csv>", "Comma-separated alternatives", "")
329
+ .option(
330
+ "-s, --status <s>",
331
+ "proposed|accepted|deprecated|superseded",
332
+ "accepted",
333
+ )
334
+ .option("--render", "Render ADR markdown")
335
+ .option("--json", "Output as JSON")
336
+ .action(async (sessionId, title, decision, options) => {
337
+ try {
338
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
339
+ const db = _dbFromCtx(ctx);
340
+ const alternatives = options.alternatives
341
+ ? options.alternatives
342
+ .split(",")
343
+ .map((s) => s.trim())
344
+ .filter(Boolean)
345
+ : [];
346
+ const context = options.context || `Session ${sessionId.slice(0, 8)}`;
347
+ const adr = recordADR(db, {
348
+ sessionId,
349
+ title,
350
+ decision,
351
+ context,
352
+ consequences: options.consequences,
353
+ alternatives,
354
+ status: options.status,
355
+ });
356
+ if (options.json) {
357
+ console.log(JSON.stringify(adr, null, 2));
358
+ } else if (options.render) {
359
+ console.log(renderADR(adr));
360
+ } else {
361
+ logger.success("ADR recorded");
362
+ logger.log(
363
+ ` ${chalk.bold("ID:")} ${chalk.cyan(adr.adrId.slice(0, 8))}`,
364
+ );
365
+ logger.log(` ${chalk.bold("Title:")} ${adr.title}`);
366
+ logger.log(` ${chalk.bold("Status:")} ${adr.status}`);
367
+ }
368
+ await shutdown();
369
+ } catch (err) {
370
+ logger.error(`Failed: ${err.message}`);
371
+ process.exit(1);
372
+ }
373
+ });
374
+
375
+ dev
376
+ .command("adrs")
377
+ .description("List ADRs (optionally filter by session or status)")
378
+ .option("-s, --session <id>", "Filter by session")
379
+ .option("-S, --status <s>", "Filter by status")
380
+ .option("--limit <n>", "Maximum entries", parseInt, 50)
381
+ .option("--json", "Output as JSON")
382
+ .action(async (options) => {
383
+ try {
384
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
385
+ _dbFromCtx(ctx);
386
+ const rows = listADRs({
387
+ sessionId: options.session,
388
+ status: options.status,
389
+ limit: options.limit,
390
+ });
391
+ if (options.json) {
392
+ console.log(JSON.stringify(rows, null, 2));
393
+ } else if (rows.length === 0) {
394
+ logger.info("No ADRs.");
395
+ } else {
396
+ for (const a of rows) {
397
+ logger.log(
398
+ ` ${chalk.cyan(a.adrId.slice(0, 8))} [${a.status.padEnd(11)}] ${chalk.bold(a.title)}`,
399
+ );
400
+ }
401
+ }
402
+ await shutdown();
403
+ } catch (err) {
404
+ logger.error(`Failed: ${err.message}`);
405
+ process.exit(1);
406
+ }
407
+ });
408
+
409
+ // silence unused import lints (AUTONOMY_LEVELS re-exported for consumers)
410
+ void AUTONOMY_LEVELS;
411
+ }