@mycodemap/mycodemap 0.4.2 → 0.5.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 (120) hide show
  1. package/CHANGELOG.md +92 -3
  2. package/README.md +117 -46
  3. package/dist/ai/claude.d.ts +38 -0
  4. package/dist/ai/claude.d.ts.map +1 -0
  5. package/dist/ai/claude.js +169 -0
  6. package/dist/ai/claude.js.map +1 -0
  7. package/dist/ai/codex.d.ts +38 -0
  8. package/dist/ai/codex.d.ts.map +1 -0
  9. package/dist/ai/codex.js +169 -0
  10. package/dist/ai/codex.js.map +1 -0
  11. package/dist/ai/factory.d.ts +48 -0
  12. package/dist/ai/factory.d.ts.map +1 -0
  13. package/dist/ai/factory.js +95 -0
  14. package/dist/ai/factory.js.map +1 -0
  15. package/dist/ai/index.d.ts +12 -0
  16. package/dist/ai/index.d.ts.map +1 -0
  17. package/dist/ai/index.js +29 -0
  18. package/dist/ai/index.js.map +1 -0
  19. package/dist/ai/provider.d.ts +70 -0
  20. package/dist/ai/provider.d.ts.map +1 -0
  21. package/dist/ai/provider.js +31 -0
  22. package/dist/ai/provider.js.map +1 -0
  23. package/dist/ai/subagent-caller.d.ts +90 -0
  24. package/dist/ai/subagent-caller.d.ts.map +1 -0
  25. package/dist/ai/subagent-caller.js +280 -0
  26. package/dist/ai/subagent-caller.js.map +1 -0
  27. package/dist/ai/types.d.ts +70 -0
  28. package/dist/ai/types.d.ts.map +1 -0
  29. package/dist/ai/types.js +5 -0
  30. package/dist/ai/types.js.map +1 -0
  31. package/dist/cli/commands/design.d.ts +47 -0
  32. package/dist/cli/commands/design.d.ts.map +1 -0
  33. package/dist/cli/commands/design.js +268 -0
  34. package/dist/cli/commands/design.js.map +1 -0
  35. package/dist/cli/commands/server.d.ts +9 -0
  36. package/dist/cli/commands/server.d.ts.map +1 -0
  37. package/dist/cli/commands/server.js +65 -0
  38. package/dist/cli/commands/server.js.map +1 -0
  39. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  40. package/dist/cli/commands/ship/pipeline.js +8 -1
  41. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  42. package/dist/cli/commands/ship/publisher.d.ts +9 -1
  43. package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
  44. package/dist/cli/commands/ship/publisher.js +149 -6
  45. package/dist/cli/commands/ship/publisher.js.map +1 -1
  46. package/dist/cli/design-contract-loader.d.ts +15 -0
  47. package/dist/cli/design-contract-loader.d.ts.map +1 -0
  48. package/dist/cli/design-contract-loader.js +175 -0
  49. package/dist/cli/design-contract-loader.js.map +1 -0
  50. package/dist/cli/design-contract-schema.d.ts +11 -0
  51. package/dist/cli/design-contract-schema.d.ts.map +1 -0
  52. package/dist/cli/design-contract-schema.js +75 -0
  53. package/dist/cli/design-contract-schema.js.map +1 -0
  54. package/dist/cli/design-handoff-builder.d.ts +15 -0
  55. package/dist/cli/design-handoff-builder.d.ts.map +1 -0
  56. package/dist/cli/design-handoff-builder.js +345 -0
  57. package/dist/cli/design-handoff-builder.js.map +1 -0
  58. package/dist/cli/design-scope-resolver.d.ts +8 -0
  59. package/dist/cli/design-scope-resolver.d.ts.map +1 -0
  60. package/dist/cli/design-scope-resolver.js +712 -0
  61. package/dist/cli/design-scope-resolver.js.map +1 -0
  62. package/dist/cli/design-verification-builder.d.ts +8 -0
  63. package/dist/cli/design-verification-builder.d.ts.map +1 -0
  64. package/dist/cli/design-verification-builder.js +369 -0
  65. package/dist/cli/design-verification-builder.js.map +1 -0
  66. package/dist/cli/index.js +2 -0
  67. package/dist/cli/index.js.map +1 -1
  68. package/dist/cli-new/commands/server.d.ts +13 -0
  69. package/dist/cli-new/commands/server.d.ts.map +1 -0
  70. package/dist/cli-new/commands/server.js +90 -0
  71. package/dist/cli-new/commands/server.js.map +1 -0
  72. package/dist/generator/ai-overview.d.ts +51 -0
  73. package/dist/generator/ai-overview.d.ts.map +1 -0
  74. package/dist/generator/ai-overview.js +160 -0
  75. package/dist/generator/ai-overview.js.map +1 -0
  76. package/dist/infrastructure/storage/StorageFactory.d.ts +12 -5
  77. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  78. package/dist/infrastructure/storage/StorageFactory.js +55 -14
  79. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  80. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
  81. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
  82. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
  83. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
  84. package/dist/interface/types/design-contract.d.ts +68 -0
  85. package/dist/interface/types/design-contract.d.ts.map +1 -0
  86. package/dist/interface/types/design-contract.js +7 -0
  87. package/dist/interface/types/design-contract.js.map +1 -0
  88. package/dist/interface/types/design-handoff.d.ts +68 -0
  89. package/dist/interface/types/design-handoff.d.ts.map +1 -0
  90. package/dist/interface/types/design-handoff.js +4 -0
  91. package/dist/interface/types/design-handoff.js.map +1 -0
  92. package/dist/interface/types/design-mapping.d.ts +51 -0
  93. package/dist/interface/types/design-mapping.d.ts.map +1 -0
  94. package/dist/interface/types/design-mapping.js +4 -0
  95. package/dist/interface/types/design-mapping.js.map +1 -0
  96. package/dist/interface/types/design-verification.d.ts +49 -0
  97. package/dist/interface/types/design-verification.d.ts.map +1 -0
  98. package/dist/interface/types/design-verification.js +4 -0
  99. package/dist/interface/types/design-verification.js.map +1 -0
  100. package/dist/interface/types/index.d.ts +4 -0
  101. package/dist/interface/types/index.d.ts.map +1 -1
  102. package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
  103. package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
  104. package/dist/orchestrator/ai-feed-generator.js +377 -0
  105. package/dist/orchestrator/ai-feed-generator.js.map +1 -0
  106. package/docs/ai-guide/COMMANDS.md +73 -0
  107. package/docs/ai-guide/OUTPUT.md +415 -0
  108. package/docs/ai-guide/PATTERNS.md +14 -4
  109. package/docs/ai-guide/PROMPTS.md +12 -6
  110. package/docs/archive/test-report-symbol-search.md +384 -0
  111. package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
  112. package/docs/archive/test_report_scenario5.md +615 -0
  113. package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
  114. package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +79 -0
  115. package/docs/product-specs/README.md +2 -1
  116. package/docs/rules/engineering-with-codex-openai.md +6 -2
  117. package/docs/rules/validation.md +9 -6
  118. package/package.json +1 -1
  119. package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
  120. package/scripts/validate-docs.js +247 -0
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+
3
+ const HELP_TEXT = `
4
+ ArcadeDB HTTP smoke test
5
+
6
+ Required environment variables:
7
+ ARCADEDB_HTTP_URL Base URL, for example http://localhost:2480
8
+ ARCADEDB_DATABASE Database name used in /api/v1/command/{database}
9
+ ARCADEDB_USERNAME Basic auth username
10
+ ARCADEDB_PASSWORD Basic auth password
11
+
12
+ Optional:
13
+ ARCADEDB_CYPHER Cypher query to run
14
+
15
+ Request:
16
+ POST {ARCADEDB_HTTP_URL}/api/v1/command/{database}
17
+ Body: {"language":"cypher","command":"MATCH (n) RETURN count(n) AS total LIMIT 1"}
18
+ Auth: Authorization: Basic ...
19
+
20
+ This script is intentionally isolated from shipped runtime code.
21
+ Use --help for offline validation when no ArcadeDB server is available.
22
+ `.trim();
23
+
24
+ function printHelp() {
25
+ console.log(HELP_TEXT);
26
+ }
27
+
28
+ function getRequiredEnv(name) {
29
+ const value = process.env[name];
30
+ if (!value || value.trim().length === 0) {
31
+ throw new Error(`Missing required environment variable: ${name}`);
32
+ }
33
+ return value.trim();
34
+ }
35
+
36
+ async function main() {
37
+ if (process.argv.includes("--help")) {
38
+ printHelp();
39
+ return;
40
+ }
41
+
42
+ let baseUrl;
43
+ let database;
44
+ let username;
45
+ let password;
46
+
47
+ try {
48
+ baseUrl = getRequiredEnv("ARCADEDB_HTTP_URL").replace(/\/+$/, "");
49
+ database = getRequiredEnv("ARCADEDB_DATABASE");
50
+ username = getRequiredEnv("ARCADEDB_USERNAME");
51
+ password = getRequiredEnv("ARCADEDB_PASSWORD");
52
+ } catch (error) {
53
+ console.error(String(error instanceof Error ? error.message : error));
54
+ console.error("Run with --help to see the required contract.");
55
+ process.exitCode = 1;
56
+ return;
57
+ }
58
+
59
+ const command = (process.env.ARCADEDB_CYPHER || "MATCH (n) RETURN count(n) AS total LIMIT 1").trim();
60
+ const endpoint = `${baseUrl}/api/v1/command/${database}`;
61
+ const authHeader = Buffer.from(`${username}:${password}`, "utf8").toString("base64");
62
+
63
+ const response = await fetch(endpoint, {
64
+ method: "POST",
65
+ headers: {
66
+ "content-type": "application/json",
67
+ authorization: `Basic ${authHeader}`,
68
+ },
69
+ body: JSON.stringify({
70
+ language: "cypher",
71
+ command,
72
+ }),
73
+ });
74
+
75
+ const text = await response.text();
76
+
77
+ if (!response.ok) {
78
+ console.error(`ArcadeDB HTTP smoke failed: ${response.status} ${response.statusText}`);
79
+ console.error(text);
80
+ process.exitCode = 1;
81
+ return;
82
+ }
83
+
84
+ console.log("ArcadeDB HTTP smoke succeeded");
85
+ if (text.trim().length > 0) {
86
+ console.log(text);
87
+ }
88
+ }
89
+
90
+ await main();
@@ -226,6 +226,252 @@ function validateAnalyzeDocs(rootDir, failures) {
226
226
  failures.push(...collectAnalyzeDocSyncFailures(rootDir));
227
227
  }
228
228
 
229
+ function validateDesignContractDocs(rootDir, failures) {
230
+ const readme = readText(rootDir, 'README.md', failures);
231
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
232
+ const claudeGuide = readText(rootDir, 'CLAUDE.md', failures);
233
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
234
+ const outputGuide = readText(rootDir, 'docs/ai-guide/OUTPUT.md', failures);
235
+ const patternsGuide = readText(rootDir, 'docs/ai-guide/PATTERNS.md', failures);
236
+ const promptsGuide = readText(rootDir, 'docs/ai-guide/PROMPTS.md', failures);
237
+ const engineeringGuide = readText(rootDir, 'docs/rules/engineering-with-codex-openai.md', failures);
238
+ const validationRule = readText(rootDir, 'docs/rules/validation.md', failures);
239
+ const productSpecsReadme = readText(rootDir, 'docs/product-specs/README.md', failures);
240
+ const designTemplate = readText(rootDir, 'docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md', failures);
241
+ const cliIndexSource = readText(rootDir, 'src/cli/index.ts', failures);
242
+ const designCommandSource = readText(rootDir, 'src/cli/commands/design.ts', failures);
243
+
244
+ if (cliIndexSource) {
245
+ expectIncludes(cliIndexSource, 'program.addCommand(designCommand);', 'src/cli/index.ts design command registration', failures);
246
+ }
247
+
248
+ if (designCommandSource) {
249
+ validateSnippets(
250
+ designCommandSource,
251
+ 'src/cli/commands/design.ts command surface',
252
+ [
253
+ "new Command('design')",
254
+ ".command('validate')",
255
+ ".command('map')",
256
+ ".command('handoff')",
257
+ ".command('verify')",
258
+ 'renderDesignMappingResult',
259
+ 'renderDesignVerificationResult',
260
+ 'runDesignHandoff',
261
+ 'runDesignVerify',
262
+ 'DEFAULT_DESIGN_CONTRACT_PATH',
263
+ 'JSON 格式输出'
264
+ ],
265
+ [],
266
+ failures
267
+ );
268
+ }
269
+
270
+ if (readme) {
271
+ validateSnippets(
272
+ readme,
273
+ 'README.md design contract baseline',
274
+ [
275
+ 'mycodemap design validate mycodemap.design.md --json',
276
+ 'mycodemap design map mycodemap.design.md --json',
277
+ 'mycodemap design handoff mycodemap.design.md --json',
278
+ 'mycodemap design verify mycodemap.design.md --json',
279
+ 'docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md',
280
+ '`mycodemap.design.md`',
281
+ '`design validate → design map → design handoff → design verify`'
282
+ ],
283
+ [],
284
+ failures
285
+ );
286
+ }
287
+
288
+ if (aiGuide) {
289
+ validateSnippets(
290
+ aiGuide,
291
+ 'AI_GUIDE.md design contract baseline',
292
+ [
293
+ 'design validate mycodemap.design.md --json',
294
+ 'design map mycodemap.design.md --json',
295
+ 'design handoff mycodemap.design.md --json',
296
+ 'design verify mycodemap.design.md --json',
297
+ '`mycodemap.design.md`',
298
+ 'interface DesignValidateOutput {',
299
+ 'interface DesignMapOutput {',
300
+ 'interface DesignHandoffOutput {',
301
+ 'interface DesignVerificationOutput {'
302
+ ],
303
+ [],
304
+ failures
305
+ );
306
+ }
307
+
308
+ if (claudeGuide) {
309
+ validateSnippets(
310
+ claudeGuide,
311
+ 'CLAUDE.md design retrieval guidance',
312
+ [
313
+ 'node dist/cli/index.js design validate [file] --json',
314
+ 'node dist/cli/index.js design map [file] --json',
315
+ 'node dist/cli/index.js design handoff [file] --json',
316
+ 'node dist/cli/index.js design verify [file] --json'
317
+ ],
318
+ [],
319
+ failures
320
+ );
321
+ }
322
+
323
+ if (commandsGuide) {
324
+ validateSnippets(
325
+ commandsGuide,
326
+ 'docs/ai-guide/COMMANDS.md design contract baseline',
327
+ [
328
+ '## design - 设计契约输入、范围映射与验证',
329
+ 'mycodemap design validate mycodemap.design.md --json',
330
+ 'mycodemap design map mycodemap.design.md --json',
331
+ 'mycodemap design handoff mycodemap.design.md --json',
332
+ 'mycodemap design verify mycodemap.design.md --json',
333
+ '`mycodemap.design.md`',
334
+ '### 必填 sections',
335
+ '### map',
336
+ '### handoff',
337
+ '### verify',
338
+ 'no-candidates'
339
+ ],
340
+ [],
341
+ failures
342
+ );
343
+ }
344
+
345
+ if (outputGuide) {
346
+ validateSnippets(
347
+ outputGuide,
348
+ 'docs/ai-guide/OUTPUT.md design validate schema',
349
+ [
350
+ '## design validate 命令输出结构',
351
+ '## design map 命令输出结构',
352
+ '## design handoff 命令输出结构',
353
+ '## design verify 命令输出结构',
354
+ 'type DesignContractDiagnosticCode =',
355
+ 'interface DesignValidateOutput {',
356
+ 'interface DesignMapOutput {',
357
+ 'interface DesignHandoffOutput {',
358
+ 'interface DesignVerificationOutput {',
359
+ 'unknowns: string[];',
360
+ 'diagnostics: DesignMappingDiagnostic[];',
361
+ 'readyForExecution: boolean;',
362
+ 'approvals: Array<DesignHandoffTraceItem & {',
363
+ 'assumptions: DesignHandoffTraceItem[];',
364
+ 'openQuestions: DesignHandoffTraceItem[];',
365
+ 'type DesignVerificationStatus =',
366
+ 'type DesignDriftKind =',
367
+ 'checklist: Array<{',
368
+ 'drift: Array<{',
369
+ '"code": "handoff-missing"',
370
+ '"code": "missing-section"',
371
+ '"code": "high-risk-scope"',
372
+ '"code": "review-required"'
373
+ ],
374
+ [],
375
+ failures
376
+ );
377
+ }
378
+
379
+ if (patternsGuide) {
380
+ validateSnippets(
381
+ patternsGuide,
382
+ 'docs/ai-guide/PATTERNS.md design/workflow baseline',
383
+ [
384
+ 'node dist/cli/index.js design validate mycodemap.design.md --json',
385
+ 'node dist/cli/index.js design map mycodemap.design.md --json',
386
+ 'node dist/cli/index.js design handoff mycodemap.design.md --json',
387
+ 'node dist/cli/index.js design verify mycodemap.design.md --json',
388
+ '`design validate → design map → design handoff → design verify`',
389
+ '`workflow` 仍只保留 `find` / `read` / `link` / `show` 四阶段'
390
+ ],
391
+ [
392
+ '5. `commit` - 提交验证',
393
+ '6. `ci` - CI 验证'
394
+ ],
395
+ failures
396
+ );
397
+ }
398
+
399
+ if (promptsGuide) {
400
+ validateSnippets(
401
+ promptsGuide,
402
+ 'docs/ai-guide/PROMPTS.md design contract prompt',
403
+ [
404
+ 'cp docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md mycodemap.design.md',
405
+ 'node dist/cli/index.js design validate mycodemap.design.md --json'
406
+ ],
407
+ [],
408
+ failures
409
+ );
410
+ }
411
+
412
+ if (engineeringGuide) {
413
+ validateSnippets(
414
+ engineeringGuide,
415
+ 'docs/rules/engineering-with-codex-openai.md design command guardrail',
416
+ [
417
+ '`node dist/cli/index.js design validate mycodemap.design.md --json`',
418
+ '`node dist/cli/index.js design map mycodemap.design.md --json`',
419
+ '`node dist/cli/index.js design handoff mycodemap.design.md --json`',
420
+ '`node dist/cli/index.js design verify mycodemap.design.md --json`',
421
+ '`candidates` / `unknowns` / `diagnostics`',
422
+ '`readyForExecution` / `approvals` / `assumptions` / `openQuestions`',
423
+ '`checklist` / `drift` / `diagnostics` / `readyForExecution`',
424
+ '`docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md`'
425
+ ],
426
+ [],
427
+ failures
428
+ );
429
+ }
430
+
431
+ if (productSpecsReadme) {
432
+ validateSnippets(
433
+ productSpecsReadme,
434
+ 'docs/product-specs/README.md design template index',
435
+ [
436
+ '`DESIGN_CONTRACT_TEMPLATE.md`'
437
+ ],
438
+ [],
439
+ failures
440
+ );
441
+ }
442
+
443
+ if (validationRule) {
444
+ validateSnippets(
445
+ validationRule,
446
+ 'docs/rules/validation.md design verification baseline',
447
+ [
448
+ '`design validate` / `design map` / `design handoff` / `design verify`',
449
+ '`design validate → design map → design handoff → design verify`',
450
+ 'design verify mycodemap.design.md --json',
451
+ 'review-needed 与 blocker 退出语义'
452
+ ],
453
+ [],
454
+ failures
455
+ );
456
+ }
457
+
458
+ if (designTemplate) {
459
+ validateSnippets(
460
+ designTemplate,
461
+ 'docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md',
462
+ [
463
+ '保存为 `mycodemap.design.md`',
464
+ '## Goal',
465
+ '## Constraints',
466
+ '## Acceptance Criteria',
467
+ '## Non-Goals'
468
+ ],
469
+ [],
470
+ failures
471
+ );
472
+ }
473
+ }
474
+
229
475
  function validatePositioningBaselineDocs(rootDir, failures) {
230
476
  const readme = readText(rootDir, 'README.md', failures);
231
477
  const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
@@ -938,6 +1184,7 @@ function validateDocs(rootDir) {
938
1184
  validatePluginRuntimeDocs(rootDir, failures);
939
1185
  validateGraphStorageDocs(rootDir, failures);
940
1186
  validateAnalyzeDocs(rootDir, failures);
1187
+ validateDesignContractDocs(rootDir, failures);
941
1188
  validateTestingDocs(rootDir, failures);
942
1189
  validateWorkflowAndDiscoveryDocs(rootDir, failures);
943
1190
  validateProductSpecsDocs(rootDir, failures);