@planu/cli 0.77.0 → 0.79.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 (125) hide show
  1. package/dist/cli/commands/serve.d.ts.map +1 -1
  2. package/dist/cli/commands/serve.js +1 -1
  3. package/dist/cli/commands/serve.js.map +1 -1
  4. package/dist/config/contradiction-patterns.json +83 -0
  5. package/dist/config/estimation-tables.json +49 -0
  6. package/dist/config/license-plans.json +6 -1
  7. package/dist/engine/ci-generator/local-script.d.ts +8 -0
  8. package/dist/engine/ci-generator/local-script.d.ts.map +1 -0
  9. package/dist/engine/ci-generator/local-script.js +177 -0
  10. package/dist/engine/ci-generator/local-script.js.map +1 -0
  11. package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -1
  12. package/dist/engine/ci-generator/planu-steps.js +37 -22
  13. package/dist/engine/ci-generator/planu-steps.js.map +1 -1
  14. package/dist/engine/config-loader.d.ts +73 -0
  15. package/dist/engine/config-loader.d.ts.map +1 -0
  16. package/dist/engine/config-loader.js +246 -0
  17. package/dist/engine/config-loader.js.map +1 -0
  18. package/dist/engine/config-schemas.d.ts +64 -0
  19. package/dist/engine/config-schemas.d.ts.map +1 -0
  20. package/dist/engine/config-schemas.js +55 -0
  21. package/dist/engine/config-schemas.js.map +1 -0
  22. package/dist/engine/telemetry/index.d.ts +3 -0
  23. package/dist/engine/telemetry/index.d.ts.map +1 -0
  24. package/dist/engine/telemetry/index.js +4 -0
  25. package/dist/engine/telemetry/index.js.map +1 -0
  26. package/dist/engine/telemetry/telemetry-client.d.ts +7 -0
  27. package/dist/engine/telemetry/telemetry-client.d.ts.map +1 -0
  28. package/dist/engine/telemetry/telemetry-client.js +29 -0
  29. package/dist/engine/telemetry/telemetry-client.js.map +1 -0
  30. package/dist/engine/telemetry/telemetry-store.d.ts +11 -0
  31. package/dist/engine/telemetry/telemetry-store.d.ts.map +1 -0
  32. package/dist/engine/telemetry/telemetry-store.js +55 -0
  33. package/dist/engine/telemetry/telemetry-store.js.map +1 -0
  34. package/dist/index.js +12 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/storage/ideas-store.d.ts +15 -0
  37. package/dist/storage/ideas-store.d.ts.map +1 -0
  38. package/dist/storage/ideas-store.js +37 -0
  39. package/dist/storage/ideas-store.js.map +1 -0
  40. package/dist/tools/capture-idea-handler.d.ts +4 -0
  41. package/dist/tools/capture-idea-handler.d.ts.map +1 -0
  42. package/dist/tools/capture-idea-handler.js +39 -0
  43. package/dist/tools/capture-idea-handler.js.map +1 -0
  44. package/dist/tools/ci-planu-handler.d.ts +2 -2
  45. package/dist/tools/ci-planu-handler.d.ts.map +1 -1
  46. package/dist/tools/ci-planu-handler.js +55 -22
  47. package/dist/tools/ci-planu-handler.js.map +1 -1
  48. package/dist/tools/configure-telemetry.d.ts +3 -0
  49. package/dist/tools/configure-telemetry.d.ts.map +1 -0
  50. package/dist/tools/configure-telemetry.js +55 -0
  51. package/dist/tools/configure-telemetry.js.map +1 -0
  52. package/dist/tools/discard-idea-handler.d.ts +4 -0
  53. package/dist/tools/discard-idea-handler.d.ts.map +1 -0
  54. package/dist/tools/discard-idea-handler.js +27 -0
  55. package/dist/tools/discard-idea-handler.js.map +1 -0
  56. package/dist/tools/git/cleanup-ops.d.ts +15 -0
  57. package/dist/tools/git/cleanup-ops.d.ts.map +1 -0
  58. package/dist/tools/git/cleanup-ops.js +417 -0
  59. package/dist/tools/git/cleanup-ops.js.map +1 -0
  60. package/dist/tools/init-project/handler.d.ts.map +1 -1
  61. package/dist/tools/init-project/handler.js +22 -0
  62. package/dist/tools/init-project/handler.js.map +1 -1
  63. package/dist/tools/init-project/result-builder.d.ts.map +1 -1
  64. package/dist/tools/init-project/result-builder.js +5 -1
  65. package/dist/tools/init-project/result-builder.js.map +1 -1
  66. package/dist/tools/license-gate.d.ts +6 -0
  67. package/dist/tools/license-gate.d.ts.map +1 -1
  68. package/dist/tools/license-gate.js +14 -0
  69. package/dist/tools/license-gate.js.map +1 -1
  70. package/dist/tools/list-backlog-handler.d.ts +4 -0
  71. package/dist/tools/list-backlog-handler.d.ts.map +1 -0
  72. package/dist/tools/list-backlog-handler.js +60 -0
  73. package/dist/tools/list-backlog-handler.js.map +1 -0
  74. package/dist/tools/manage-git.d.ts.map +1 -1
  75. package/dist/tools/manage-git.js +3 -0
  76. package/dist/tools/manage-git.js.map +1 -1
  77. package/dist/tools/promote-idea-handler.d.ts +4 -0
  78. package/dist/tools/promote-idea-handler.d.ts.map +1 -0
  79. package/dist/tools/promote-idea-handler.js +51 -0
  80. package/dist/tools/promote-idea-handler.js.map +1 -0
  81. package/dist/tools/register-backlog-tools.d.ts +3 -0
  82. package/dist/tools/register-backlog-tools.d.ts.map +1 -0
  83. package/dist/tools/register-backlog-tools.js +81 -0
  84. package/dist/tools/register-backlog-tools.js.map +1 -0
  85. package/dist/tools/register-ci-tools.d.ts.map +1 -1
  86. package/dist/tools/register-ci-tools.js +8 -0
  87. package/dist/tools/register-ci-tools.js.map +1 -1
  88. package/dist/tools/register-telemetry-tools.d.ts +3 -0
  89. package/dist/tools/register-telemetry-tools.d.ts.map +1 -0
  90. package/dist/tools/register-telemetry-tools.js +19 -0
  91. package/dist/tools/register-telemetry-tools.js.map +1 -0
  92. package/dist/tools/schemas/infra.d.ts +1 -1
  93. package/dist/tools/schemas/lifecycle.d.ts +1 -0
  94. package/dist/tools/schemas/lifecycle.d.ts.map +1 -1
  95. package/dist/tools/schemas/lifecycle.js +2 -1
  96. package/dist/tools/schemas/lifecycle.js.map +1 -1
  97. package/dist/tools/update-status-actions.d.ts.map +1 -1
  98. package/dist/tools/update-status-actions.js +12 -0
  99. package/dist/tools/update-status-actions.js.map +1 -1
  100. package/dist/types/ci.d.ts +16 -1
  101. package/dist/types/ci.d.ts.map +1 -1
  102. package/dist/types/common/tech-enums.d.ts +1 -1
  103. package/dist/types/common/tech-enums.d.ts.map +1 -1
  104. package/dist/types/estimation.d.ts +34 -0
  105. package/dist/types/estimation.d.ts.map +1 -1
  106. package/dist/types/git.d.ts +24 -0
  107. package/dist/types/git.d.ts.map +1 -1
  108. package/dist/types/ideas.d.ts +37 -0
  109. package/dist/types/ideas.d.ts.map +1 -0
  110. package/dist/types/ideas.js +3 -0
  111. package/dist/types/ideas.js.map +1 -0
  112. package/dist/types/index.d.ts +2 -0
  113. package/dist/types/index.d.ts.map +1 -1
  114. package/dist/types/index.js +2 -0
  115. package/dist/types/index.js.map +1 -1
  116. package/dist/types/project/planu-config.d.ts +2 -0
  117. package/dist/types/project/planu-config.d.ts.map +1 -1
  118. package/dist/types/telemetry.d.ts +24 -0
  119. package/dist/types/telemetry.d.ts.map +1 -0
  120. package/dist/types/telemetry.js +3 -0
  121. package/dist/types/telemetry.js.map +1 -0
  122. package/package.json +1 -1
  123. package/src/config/contradiction-patterns.json +83 -0
  124. package/src/config/estimation-tables.json +49 -0
  125. package/src/config/license-plans.json +6 -1
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAGlE,eAAO,MAAM,YAAY,EAAE,UAmC1B,CAAC"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAGlE,eAAO,MAAM,YAAY,EAAE,UAqC1B,CAAC"}
@@ -24,7 +24,7 @@ export const serveCommand = {
24
24
  const { registerSpecTools } = await import('../../tools/register-spec-tools.js');
25
25
  const { registerPlatformTools } = await import('../../tools/register-platform-tools.js');
26
26
  process.stdout.write(`${green('Starting Planu MCP server')} on port ${cyan(port)}...\n`);
27
- const server = withToolTracking(new McpServer({ name: 'planu', version: PLANU_VERSION }));
27
+ const server = withToolTracking(new McpServer({ name: `planu v${PLANU_VERSION}`, version: PLANU_VERSION }));
28
28
  registerResources(server);
29
29
  registerSpecTools(server);
30
30
  registerPlatformTools(server);
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,yCAAyC;IACtD,KAAK,EAAE,2BAA2B;IAElC,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,MAAoB;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YAC3B,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;aACrC;YACD,MAAM,EAAE,KAAK;YACb,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAI,MAAM,CAAC,IAA2B,IAAI,MAAM,CAAC;QAE3D,oDAAoD;QACpD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;QAClF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAC9E,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAClE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC1E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QAC1E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QACjF,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;QAEzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,2BAA2B,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzF,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAC1F,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IACvF,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,yCAAyC;IACtD,KAAK,EAAE,2BAA2B;IAElC,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,MAAoB;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YAC3B,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;aACrC;YACD,MAAM,EAAE,KAAK;YACb,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAI,MAAM,CAAC,IAA2B,IAAI,MAAM,CAAC;QAE3D,oDAAoD;QACpD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;QAClF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAC9E,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAClE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC1E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QAC1E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QACjF,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;QAEzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,2BAA2B,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzF,MAAM,MAAM,GAAG,gBAAgB,CAC7B,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,aAAa,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAC3E,CAAC;QACF,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IACvF,CAAC;CACF,CAAC"}
@@ -0,0 +1,83 @@
1
+ [
2
+ {
3
+ "id": "offline-vs-realtime",
4
+ "name": "offline-vs-realtime",
5
+ "sideA": ["offline", "offline-first", "no internet", "without internet", "disconnected"],
6
+ "sideB": ["real-time", "realtime", "online", "sync", "synchronization", "live", "streaming"],
7
+ "severity": "blocker",
8
+ "descriptionTemplate": "{specA} requires offline capability while {specB} requires real-time synchronization — these are mutually exclusive without explicit conflict resolution.",
9
+ "recommendation": "Define a clear synchronization strategy: optimistic updates with eventual consistency, or restrict real-time features to connected mode only."
10
+ },
11
+ {
12
+ "id": "sync-vs-async",
13
+ "name": "sync-vs-async",
14
+ "sideA": ["synchronous", "blocking", "sequential", "serial"],
15
+ "sideB": ["asynchronous", "async", "non-blocking", "concurrent", "parallel", "event-driven"],
16
+ "severity": "warning",
17
+ "descriptionTemplate": "{specA} implies synchronous execution while {specB} implies asynchronous processing — mixing these requires careful interface design.",
18
+ "recommendation": "Decide on a unified execution model. If both are needed, document clearly which parts are sync vs async and add adapters at boundaries."
19
+ },
20
+ {
21
+ "id": "simple-vs-complex",
22
+ "name": "simple-vs-complex",
23
+ "sideA": ["simple", "minimal", "lightweight", "basic", "mvp"],
24
+ "sideB": ["complex", "enterprise", "advanced", "comprehensive", "full-featured", "sophisticated"],
25
+ "severity": "warning",
26
+ "descriptionTemplate": "{specA} targets simplicity/MVP while {specB} targets enterprise complexity — these have opposing design priorities.",
27
+ "recommendation": "Clarify which spec defines the North Star. Consider a phased approach: start minimal, extend to complex in a later iteration."
28
+ },
29
+ {
30
+ "id": "performance-vs-security",
31
+ "name": "performance-vs-security",
32
+ "sideA": ["fast", "performance", "speed", "low latency", "optimized", "cache"],
33
+ "sideB": ["security", "encrypted", "encryption", "audit", "compliant", "zero-trust"],
34
+ "severity": "warning",
35
+ "descriptionTemplate": "{specA} prioritizes performance while {specB} prioritizes security — these often create architectural tradeoffs.",
36
+ "recommendation": "Define explicit performance budgets for security operations. Benchmark encryption overhead. Consider hardware acceleration for crypto."
37
+ },
38
+ {
39
+ "id": "local-vs-cloud",
40
+ "name": "local-vs-cloud",
41
+ "sideA": ["local", "on-premise", "self-hosted", "air-gapped", "desktop", "embedded"],
42
+ "sideB": ["cloud", "remote", "saas", "hosted", "serverless", "managed service"],
43
+ "severity": "blocker",
44
+ "descriptionTemplate": "{specA} requires local/on-premise deployment while {specB} assumes cloud/remote infrastructure — these are incompatible deployment targets.",
45
+ "recommendation": "Choose a single deployment model or build explicit abstraction layers that support both. Hybrid architectures significantly increase complexity."
46
+ },
47
+ {
48
+ "id": "serverless-vs-stateful",
49
+ "name": "serverless-vs-stateful",
50
+ "sideA": ["serverless", "lambda", "function-as-a-service", "faas", "stateless", "ephemeral"],
51
+ "sideB": ["stateful", "persistent connection", "websocket", "long-running", "session", "in-memory state"],
52
+ "severity": "warning",
53
+ "descriptionTemplate": "{specA} assumes serverless/stateless execution while {specB} requires persistent state or long-running connections — these have incompatible execution models.",
54
+ "recommendation": "Choose a clear execution model. If both are needed, use external state stores (Redis, DynamoDB) for serverless and reserve stateful components for dedicated compute."
55
+ },
56
+ {
57
+ "id": "mobile-vs-desktop",
58
+ "name": "mobile-vs-desktop",
59
+ "sideA": ["mobile-first", "touch", "small screen", "responsive", "native app", "ios", "android"],
60
+ "sideB": ["desktop-first", "keyboard-driven", "large screen", "electron", "native desktop", "mouse-driven"],
61
+ "severity": "warning",
62
+ "descriptionTemplate": "{specA} targets mobile-first design while {specB} targets desktop-first design — these have conflicting UX priorities.",
63
+ "recommendation": "Adopt a responsive design strategy or build separate experiences. Define which platform is primary and which adapts."
64
+ },
65
+ {
66
+ "id": "cqrs-vs-crud",
67
+ "name": "cqrs-vs-crud",
68
+ "sideA": ["cqrs", "event sourcing", "command query", "write model", "read model", "event store"],
69
+ "sideB": ["crud", "rest api", "simple database", "active record", "orm", "direct update"],
70
+ "severity": "warning",
71
+ "descriptionTemplate": "{specA} implies CQRS/event-sourcing architecture while {specB} implies simple CRUD — these have fundamentally different data access patterns.",
72
+ "recommendation": "Pick one architectural style per bounded context. CQRS adds complexity; only use it where the read/write asymmetry justifies it."
73
+ },
74
+ {
75
+ "id": "microservices-vs-monolith",
76
+ "name": "microservices-vs-monolith",
77
+ "sideA": ["microservices", "distributed", "service mesh", "api gateway", "independently deployable"],
78
+ "sideB": ["monolith", "single deployment", "modular monolith", "single process", "shared database"],
79
+ "severity": "blocker",
80
+ "descriptionTemplate": "{specA} assumes microservices architecture while {specB} assumes monolithic deployment — these are incompatible deployment topologies.",
81
+ "recommendation": "Align on a single deployment topology. Consider starting with a modular monolith and extracting services only when proven necessary."
82
+ }
83
+ ]
@@ -0,0 +1,49 @@
1
+ {
2
+ "defaultConfig": {
3
+ "defaultLocale": "en",
4
+ "defaultExperienceLevel": "intermediate",
5
+ "hourlyRate": 65,
6
+ "pricingOpusPerMToken": 15,
7
+ "pricingSonnetPerMToken": 3
8
+ },
9
+ "baseHoursByType": [
10
+ { "id": "feature", "hours": 8 },
11
+ { "id": "refactor", "hours": 6 },
12
+ { "id": "bugfix", "hours": 3 },
13
+ { "id": "infra", "hours": 5 },
14
+ { "id": "docs", "hours": 2 },
15
+ { "id": "project", "hours": 16 },
16
+ { "id": "agent", "hours": 20 },
17
+ { "id": "tech-debt", "hours": 8 }
18
+ ],
19
+ "scopeMultiplier": [
20
+ { "id": "trivial", "multiplier": 0.3 },
21
+ { "id": "feature", "multiplier": 1.0 },
22
+ { "id": "cross-module", "multiplier": 2.0 },
23
+ { "id": "architectural", "multiplier": 3.5 }
24
+ ],
25
+ "difficultyMultiplier": [
26
+ { "id": "1", "multiplier": 0.6 },
27
+ { "id": "2", "multiplier": 0.85 },
28
+ { "id": "3", "multiplier": 1.0 },
29
+ { "id": "4", "multiplier": 1.4 },
30
+ { "id": "5", "multiplier": 2.0 }
31
+ ],
32
+ "reviewRatio": [
33
+ { "id": "1", "ratio": 0.1 },
34
+ { "id": "2", "ratio": 0.15 },
35
+ { "id": "3", "ratio": 0.2 },
36
+ { "id": "4", "ratio": 0.25 },
37
+ { "id": "5", "ratio": 0.35 }
38
+ ],
39
+ "tokensPerDevHour": {
40
+ "opus": 12000,
41
+ "sonnet": 25000
42
+ },
43
+ "modeReduction": [
44
+ { "id": "local", "factor": 0.4 },
45
+ { "id": "template", "factor": 0.2 },
46
+ { "id": "light-llm", "factor": 0.7 },
47
+ { "id": "full-llm", "factor": 1.0 }
48
+ ]
49
+ }
@@ -53,7 +53,12 @@
53
53
  "generate_spec_dashboard",
54
54
  "skill_search",
55
55
  "skill_install",
56
- "submit_feedback"
56
+ "submit_feedback",
57
+ "configure_telemetry",
58
+ "capture_idea",
59
+ "list_backlog",
60
+ "promote_idea",
61
+ "discard_idea"
57
62
  ],
58
63
  "proTools": [
59
64
  "audit",
@@ -0,0 +1,8 @@
1
+ import type { LocalScriptOptions } from '../../types/index.js';
2
+ export declare const LOCAL_SCRIPT_PATH = "planu-check.sh";
3
+ /**
4
+ * Generate the content of planu-check.sh for local/offline spec validation.
5
+ * Produces the same checks as the GitHub Actions workflow, runnable without billing.
6
+ */
7
+ export declare function generateLocalScript(options: LocalScriptOptions): string;
8
+ //# sourceMappingURL=local-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-script.d.ts","sourceRoot":"","sources":["../../../src/engine/ci-generator/local-script.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAsLlD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAYvE"}
@@ -0,0 +1,177 @@
1
+ // ci-generator/local-script.ts — Generate local planu-check.sh script (SPEC-201)
2
+ export const LOCAL_SCRIPT_PATH = 'planu-check.sh';
3
+ // -- Sections -----------------------------------------------------------------
4
+ function buildHeader(specsDir, failOnDrift, severityThreshold, detectDrift) {
5
+ return [
6
+ '#!/usr/bin/env bash',
7
+ '# planu-check.sh — Local Planu spec validation (SPEC-201)',
8
+ '# Runs the same checks as .github/workflows/planu-check.yml without GitHub-hosted runners.',
9
+ '# Compatible with act (https://github.com/nektos/act) for local GitHub Actions execution.',
10
+ '#',
11
+ '# Usage:',
12
+ '# ./planu-check.sh # validate specs (respects configured defaults)',
13
+ '# ./planu-check.sh --no-fail # informational only, always exits 0',
14
+ '# ./planu-check.sh --severity=critical # only fail on critical issues',
15
+ '',
16
+ 'set -euo pipefail',
17
+ '',
18
+ '# -- Colors (disabled when not a TTY) --------------------------------------',
19
+ 'if [ -t 1 ]; then',
20
+ ' RED="\\033[0;31m" YELLOW="\\033[1;33m" GREEN="\\033[0;32m" BLUE="\\033[0;34m"',
21
+ ' BOLD="\\033[1m" RESET="\\033[0m"',
22
+ 'else',
23
+ ' RED="" YELLOW="" GREEN="" BLUE="" BOLD="" RESET=""',
24
+ 'fi',
25
+ '',
26
+ '# -- Config ----------------------------------------------------------------',
27
+ `SPECS_DIR="${specsDir}"`,
28
+ `FAIL_ON_ISSUES=${failOnDrift ? 'true' : 'false'}`,
29
+ `SEVERITY="${severityThreshold}"`,
30
+ `DETECT_DRIFT=${detectDrift ? 'true' : 'false'}`,
31
+ '',
32
+ '# Parse flags',
33
+ 'for arg in "$@"; do',
34
+ ' case "$arg" in',
35
+ ' --no-fail) FAIL_ON_ISSUES=false ;;',
36
+ ' --severity=*) SEVERITY="${arg#--severity=}" ;;',
37
+ ' esac',
38
+ 'done',
39
+ ];
40
+ }
41
+ function buildValidateSection() {
42
+ return [
43
+ '',
44
+ '# -- Header ----------------------------------------------------------------',
45
+ 'echo -e "${BOLD}Planu Spec Check${RESET}"',
46
+ 'echo -e "Specs dir: ${BLUE}${SPECS_DIR}${RESET}"',
47
+ 'echo ""',
48
+ '',
49
+ 'TOTAL=0',
50
+ 'ISSUES=0',
51
+ '',
52
+ 'if [ ! -d "$SPECS_DIR" ]; then',
53
+ ' echo -e "${RED}x Specs directory not found: $SPECS_DIR${RESET}"',
54
+ ' exit 1',
55
+ 'fi',
56
+ '',
57
+ '# -- Validate specs --------------------------------------------------------',
58
+ 'for spec_dir in "$SPECS_DIR"/*/; do',
59
+ ' [ -d "$spec_dir" ] || continue',
60
+ ' SPEC_NAME=$(basename "$spec_dir")',
61
+ ' TOTAL=$((TOTAL + 1))',
62
+ '',
63
+ ' SPEC_FILE=$(ls "$spec_dir"spec.md "$spec_dir"HU.md 2>/dev/null | head -1 || echo "")',
64
+ ' if [ -z "$SPEC_FILE" ]; then',
65
+ ' echo -e " ${RED}x${RESET} $SPEC_NAME - missing spec.md"',
66
+ ' ISSUES=$((ISSUES + 1))',
67
+ ' continue',
68
+ ' fi',
69
+ '',
70
+ ' CRITERIA=$(grep -c "^### AC-" "$SPEC_FILE" 2>/dev/null || echo "0")',
71
+ ' SPEC_STATUS=$(grep -m1 "^status:" "$SPEC_FILE" 2>/dev/null | sed \'s/status:[[:space:]]*//\' | tr -d \'\\r\' || echo "")',
72
+ '',
73
+ ' if [ "$SPEC_STATUS" = "done" ] || [ "$SPEC_STATUS" = "discarded" ]; then',
74
+ ' echo -e " ${GREEN}ok${RESET} $SPEC_NAME - $SPEC_STATUS"',
75
+ ' elif [ "$CRITERIA" = "0" ]; then',
76
+ ' echo -e " ${YELLOW}warn${RESET} $SPEC_NAME - no acceptance criteria"',
77
+ ' else',
78
+ ' echo -e " ${BLUE}->${RESET} $SPEC_NAME - $SPEC_STATUS ($CRITERIA AC)"',
79
+ ' ISSUES=$((ISSUES + 1))',
80
+ ' fi',
81
+ 'done',
82
+ ];
83
+ }
84
+ function buildDriftSection() {
85
+ return [
86
+ '',
87
+ '# -- Basic drift detection ------------------------------------------------',
88
+ 'if [ "$DETECT_DRIFT" = "true" ] && command -v git &>/dev/null && git rev-parse --git-dir &>/dev/null; then',
89
+ ' echo ""',
90
+ ' echo -e "${BOLD}Drift Detection${RESET}"',
91
+ ' CHANGED_FILES=$(git diff HEAD --name-only 2>/dev/null || echo "")',
92
+ ' for spec_dir in "$SPECS_DIR"/*/; do',
93
+ ' [ -f "$spec_dir/technical.md" ] || continue',
94
+ ' SPEC_FILES=$(grep -oE \'src/[a-zA-Z0-9_./-]+\' "$spec_dir/technical.md" 2>/dev/null || echo "")',
95
+ ' for sf in $SPEC_FILES; do',
96
+ ' if echo "$CHANGED_FILES" | grep -q "$sf"; then',
97
+ ' SPEC_NAME=$(basename "$spec_dir")',
98
+ ' echo -e " ${YELLOW}warn${RESET} Drift: $sf modified, belongs to $SPEC_NAME"',
99
+ ' fi',
100
+ ' done',
101
+ ' done',
102
+ 'fi',
103
+ ];
104
+ }
105
+ function buildCleanupCheckSection() {
106
+ return [
107
+ '',
108
+ '# -- Git cleanup check (SPEC-203) — WARNING only, never fails CI -------------------',
109
+ 'if command -v git &>/dev/null && git rev-parse --git-dir &>/dev/null; then',
110
+ ' echo ""',
111
+ ' echo -e "${BOLD}Git Health Check${RESET}"',
112
+ '',
113
+ ' # Orphan worktrees: entries in .claude/worktrees/ whose branch is merged',
114
+ ' WORKTREES_DIR=".claude/worktrees"',
115
+ ' if [ -d "$WORKTREES_DIR" ]; then',
116
+ ' MERGED_BRANCHES=$(git branch --merged develop 2>/dev/null || git branch --merged main 2>/dev/null || echo "")',
117
+ ' while IFS= read -r -d "" wt_dir; do',
118
+ ' wt_branch=$(git -C "$wt_dir" rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")',
119
+ ' if [ -n "$wt_branch" ] && echo "$MERGED_BRANCHES" | grep -qF "$wt_branch"; then',
120
+ ' echo -e " ${YELLOW}warn${RESET} Orphan worktree: $wt_dir (branch \'$wt_branch\' merged)"',
121
+ ' fi',
122
+ ' done < <(find "$WORKTREES_DIR" -mindepth 1 -maxdepth 1 -type d -print0 2>/dev/null)',
123
+ ' fi',
124
+ '',
125
+ ' # Branches with gone upstream',
126
+ ' GONE_BRANCHES=$(git branch -vv 2>/dev/null | grep ": gone\\]" | awk \'{ print $1 }\' || echo "")',
127
+ ' if [ -n "$GONE_BRANCHES" ]; then',
128
+ ' while IFS= read -r branch; do',
129
+ ' [ -n "$branch" ] && echo -e " ${YELLOW}warn${RESET} Branch without upstream: $branch"',
130
+ ' done <<< "$GONE_BRANCHES"',
131
+ ' else',
132
+ ' echo -e " ${GREEN}ok${RESET} No branches with gone upstream"',
133
+ ' fi',
134
+ 'fi',
135
+ ];
136
+ }
137
+ function buildSummaryAndExit(failOnDrift) {
138
+ const lines = [
139
+ '',
140
+ '# -- Summary ---------------------------------------------------------------',
141
+ 'echo ""',
142
+ 'echo -e "${BOLD}Summary${RESET}"',
143
+ 'echo "Total specs: $TOTAL"',
144
+ 'if [ "$ISSUES" -gt 0 ]; then',
145
+ ' echo -e "Issues found: ${RED}$ISSUES${RESET}"',
146
+ 'else',
147
+ ' echo -e "Issues found: ${GREEN}0${RESET}"',
148
+ 'fi',
149
+ '',
150
+ '# -- Exit code -------------------------------------------------------------',
151
+ ];
152
+ if (failOnDrift) {
153
+ lines.push('if [ "$FAIL_ON_ISSUES" = "true" ] && [ "$SEVERITY" != "info" ]; then', ' if [ "$ISSUES" -gt 0 ]; then', ' echo ""', ' echo -e "${RED}x Planu check failed ($ISSUES issues)${RESET}"', ' exit 1', ' fi', 'fi');
154
+ }
155
+ else {
156
+ lines.push('# fail-on-issues disabled — always exits 0');
157
+ }
158
+ lines.push('', 'echo -e "${GREEN}ok Planu check passed${RESET}"', 'exit 0');
159
+ return lines;
160
+ }
161
+ // -- Public API ---------------------------------------------------------------
162
+ /**
163
+ * Generate the content of planu-check.sh for local/offline spec validation.
164
+ * Produces the same checks as the GitHub Actions workflow, runnable without billing.
165
+ */
166
+ export function generateLocalScript(options) {
167
+ const { specsDir, detectDrift, failOnDrift, severityThreshold } = options;
168
+ const lines = [
169
+ ...buildHeader(specsDir, failOnDrift, severityThreshold, detectDrift),
170
+ ...buildValidateSection(),
171
+ ...(detectDrift ? buildDriftSection() : []),
172
+ ...buildCleanupCheckSection(),
173
+ ...buildSummaryAndExit(failOnDrift),
174
+ ];
175
+ return lines.join('\n') + '\n';
176
+ }
177
+ //# sourceMappingURL=local-script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-script.js","sourceRoot":"","sources":["../../../src/engine/ci-generator/local-script.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"planu-steps.d.ts","sourceRoot":"","sources":["../../../src/engine/ci-generator/planu-steps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAY9B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzE;AAkPD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAwElF"}
1
+ {"version":3,"file":"planu-steps.d.ts","sourceRoot":"","sources":["../../../src/engine/ci-generator/planu-steps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAa9B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzE;AAoSD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAuDlF"}
@@ -1,5 +1,6 @@
1
1
  // ci-generator/planu-steps.ts — Generate Planu-specific CI workflow YAML (SPEC-066 AC-02..07)
2
2
  import { generatePlanuConfigYaml } from './planu-config.js';
3
+ import { generateLocalScript, LOCAL_SCRIPT_PATH } from './local-script.js';
3
4
  // -- Constants ---------------------------------------------------------------
4
5
  const DEFAULT_SPECS_DIR = 'planu/specs';
5
6
  const WORKFLOW_PATH = '.github/workflows/planu-check.yml';
@@ -227,13 +228,8 @@ function buildConfigReadStep(ind) {
227
228
  ];
228
229
  }
229
230
  // -- Main generator ----------------------------------------------------------
230
- /**
231
- * Generate a complete Planu CI check workflow with optional drift detection,
232
- * PR comments, badge generation, and configurable severity thresholds.
233
- */
234
- export function generatePlanuCI(input) {
235
- const { specsDir = DEFAULT_SPECS_DIR, detectDrift = true, failOnDrift = true, severityThreshold = 'warning', postComment = true, badge = true, workingDirectory = '.', } = input;
236
- const features = ['validate'];
231
+ function buildGithubActionsYaml(input, resolvedSpecsDir, features) {
232
+ const { detectDrift, postComment, badge, failOnDrift, workingDirectory, severityThreshold } = input;
237
233
  const ind = ' ';
238
234
  const lines = buildWorkflowHeader(postComment, workingDirectory);
239
235
  lines.push(' steps:');
@@ -243,35 +239,52 @@ export function generatePlanuCI(input) {
243
239
  lines.push(`${ind} fetch-depth: 0`);
244
240
  lines.push('');
245
241
  features.push('planu-config');
246
- lines.push(...buildConfigReadStep(ind));
247
- lines.push('');
248
- const resolvedSpecsDir = workingDirectory === '.' ? specsDir : `${workingDirectory}/${specsDir}`;
249
- lines.push(...buildValidateStepLines(ind, resolvedSpecsDir));
250
- lines.push('');
242
+ lines.push(...buildConfigReadStep(ind), '');
243
+ lines.push(...buildValidateStepLines(ind, resolvedSpecsDir), '');
251
244
  if (detectDrift) {
252
245
  features.push('detect-drift');
253
- lines.push(...buildDriftStepLines(ind, resolvedSpecsDir));
254
- lines.push('');
246
+ lines.push(...buildDriftStepLines(ind, resolvedSpecsDir), '');
255
247
  }
256
248
  if (postComment) {
257
249
  features.push('pr-comment');
258
- lines.push(...buildCommentStepLines(ind));
259
- lines.push('');
250
+ lines.push(...buildCommentStepLines(ind), '');
260
251
  }
261
252
  if (badge) {
262
253
  features.push('badge');
263
- lines.push(...buildBadgeStepLines(ind));
264
- lines.push('');
254
+ lines.push(...buildBadgeStepLines(ind), '');
265
255
  }
266
256
  if (failOnDrift) {
267
257
  features.push('fail-on-drift');
268
258
  }
269
- lines.push(...buildSeverityStepLines(ind, severityThreshold, failOnDrift));
270
- lines.push('');
259
+ lines.push(...buildSeverityStepLines(ind, severityThreshold, failOnDrift), '');
271
260
  lines.push(' outputs:');
272
261
  lines.push(' drift-detected: ${{ steps.drift.outputs.drift-detected }}');
273
262
  lines.push(' issues: ${{ steps.validate.outputs.issues }}');
274
- const workflowYaml = lines.join('\n') + '\n';
263
+ return lines.join('\n') + '\n';
264
+ }
265
+ /**
266
+ * Generate a complete Planu CI check workflow with optional drift detection,
267
+ * PR comments, badge generation, and configurable severity thresholds.
268
+ */
269
+ export function generatePlanuCI(input) {
270
+ const { specsDir = DEFAULT_SPECS_DIR, detectDrift = true, failOnDrift = true, severityThreshold = 'warning', postComment = true, badge = true, workingDirectory = '.', includeGithubActions = true, gitHook = false, } = input;
271
+ const features = ['validate'];
272
+ const resolvedSpecsDir = workingDirectory === '.' ? specsDir : `${workingDirectory}/${specsDir}`;
273
+ // Always generate local script (works without GitHub billing)
274
+ features.push('local-script');
275
+ const localScript = generateLocalScript({
276
+ specsDir: resolvedSpecsDir,
277
+ detectDrift,
278
+ failOnDrift,
279
+ severityThreshold,
280
+ });
281
+ if (gitHook) {
282
+ features.push('git-hook');
283
+ }
284
+ // GitHub Actions YAML (optional — requires GitHub billing for private repos)
285
+ const workflowYaml = includeGithubActions
286
+ ? buildGithubActionsYaml({ detectDrift, postComment, badge, failOnDrift, workingDirectory, severityThreshold }, resolvedSpecsDir, features)
287
+ : '';
275
288
  const planuConfigYaml = generatePlanuConfigYaml({
276
289
  specsDir,
277
290
  failOnDrift,
@@ -282,10 +295,12 @@ export function generatePlanuCI(input) {
282
295
  const badgeMarkdown = generateBadgeMarkdown('{owner}', '{repo}');
283
296
  return {
284
297
  workflowYaml,
285
- workflowPath: WORKFLOW_PATH,
298
+ workflowPath: includeGithubActions ? WORKFLOW_PATH : '',
286
299
  planuConfigYaml,
287
300
  badgeMarkdown,
288
301
  features,
302
+ localScript,
303
+ localScriptPath: LOCAL_SCRIPT_PATH,
289
304
  };
290
305
  }
291
306
  //# sourceMappingURL=planu-steps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"planu-steps.js","sourceRoot":"","sources":["../../../src/engine/ci-generator/planu-steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"planu-steps.js","sourceRoot":"","sources":["../../../src/engine/ci-generator/planu-steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { ZodType } from 'zod';
2
+ /**
3
+ * Canonical 3-layer configuration loader.
4
+ *
5
+ * Generalizes the pattern from catalog-loader.ts (SPEC-054) into a reusable
6
+ * class that any module can use to make its configuration extensible.
7
+ *
8
+ * @typeParam T - The type of a single configuration item (must have `id: string`)
9
+ */
10
+ export declare class ConfigLoader<T extends {
11
+ id: string;
12
+ }> {
13
+ private readonly area;
14
+ private readonly schema;
15
+ private readonly require;
16
+ constructor(area: string, schema: ZodType<T[]>);
17
+ /**
18
+ * Synchronously load and merge all 3 config layers.
19
+ * Safe for module-level initialization.
20
+ */
21
+ load(projectHash?: string): T[];
22
+ /**
23
+ * Async version of load — preferred when called from async contexts.
24
+ */
25
+ loadAsync(projectHash?: string): Promise<T[]>;
26
+ /**
27
+ * Validate raw data against the schema. Returns parsed items or throws
28
+ * a descriptive error with the exact path of the invalid field.
29
+ */
30
+ validate(data: unknown): T[];
31
+ /**
32
+ * Load only system defaults (src/config/{area}.json).
33
+ */
34
+ loadSystem(): T[];
35
+ private loadGlobalSync;
36
+ private loadProjectSync;
37
+ private loadGlobalAsync;
38
+ private loadProjectAsync;
39
+ private loadFileSync;
40
+ private loadFileAsync;
41
+ /**
42
+ * Merge items from 3 layers by `id`. Higher-precedence layers override
43
+ * lower-precedence items with the same `id`. New ids are appended.
44
+ */
45
+ private merge;
46
+ }
47
+ /**
48
+ * 3-layer configuration loader for structured (object) configs.
49
+ *
50
+ * Similar to ConfigLoader but works with a single object instead of an array.
51
+ * Override layers are deep-merged (top-level keys only) with the system defaults.
52
+ *
53
+ * @typeParam T - The config object type
54
+ */
55
+ export declare class ObjectConfigLoader<T extends Record<string, unknown>> {
56
+ private readonly area;
57
+ private readonly schema;
58
+ private readonly require;
59
+ constructor(area: string, schema: ZodType<T>);
60
+ /** Synchronously load and merge all 3 config layers. */
61
+ load(projectHash?: string): T;
62
+ /** Async version of load. */
63
+ loadAsync(projectHash?: string): Promise<T>;
64
+ /** Validate raw data against the schema. */
65
+ validate(data: unknown): T;
66
+ /** Load system defaults. */
67
+ loadSystem(): T;
68
+ private loadFileSync;
69
+ private loadFileAsync;
70
+ /** Shallow merge: system <- global <- project (top-level keys). */
71
+ private merge;
72
+ }
73
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/engine/config-loader.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,KAAK,CAAC;AAK7C;;;;;;;GAOG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAM9C;;;OAGG;IACH,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;IAO/B;;OAEG;IACG,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOnD;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,EAAE;IAS5B;;OAEG;IACH,UAAU,IAAI,CAAC,EAAE;IAgBjB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;YAMT,eAAe;YAIf,gBAAgB;IAM9B,OAAO,CAAC,YAAY;YAcN,aAAa;IAa3B;;;OAGG;IACH,OAAO,CAAC,KAAK;CAad;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAM5C,wDAAwD;IACxD,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC;IAW7B,6BAA6B;IACvB,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAWjD,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC;IAS1B,4BAA4B;IAC5B,UAAU,IAAI,CAAC;IAYf,OAAO,CAAC,YAAY;YASN,aAAa;IAS3B,mEAAmE;IACnE,OAAO,CAAC,KAAK;CAUd"}