@powerhousedao/vetra 4.1.0-dev.30 → 4.1.0-dev.32

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 (99) hide show
  1. package/dist/document-models/app-module/gen/object.d.ts +2 -2
  2. package/dist/document-models/app-module/gen/object.d.ts.map +1 -1
  3. package/dist/document-models/app-module/gen/object.js.map +1 -1
  4. package/dist/document-models/app-module/gen/types.d.ts +2 -2
  5. package/dist/document-models/app-module/gen/types.d.ts.map +1 -1
  6. package/dist/document-models/app-module/gen/utils.d.ts.map +1 -1
  7. package/dist/document-models/app-module/gen/utils.js +3 -6
  8. package/dist/document-models/app-module/gen/utils.js.map +1 -1
  9. package/dist/document-models/app-module/index.d.ts +0 -1
  10. package/dist/document-models/app-module/index.d.ts.map +1 -1
  11. package/dist/document-models/document-editor/gen/object.d.ts +2 -2
  12. package/dist/document-models/document-editor/gen/object.d.ts.map +1 -1
  13. package/dist/document-models/document-editor/gen/object.js.map +1 -1
  14. package/dist/document-models/document-editor/gen/types.d.ts +2 -2
  15. package/dist/document-models/document-editor/gen/types.d.ts.map +1 -1
  16. package/dist/document-models/document-editor/gen/utils.d.ts.map +1 -1
  17. package/dist/document-models/document-editor/gen/utils.js +3 -6
  18. package/dist/document-models/document-editor/gen/utils.js.map +1 -1
  19. package/dist/document-models/document-editor/index.d.ts +0 -1
  20. package/dist/document-models/document-editor/index.d.ts.map +1 -1
  21. package/dist/document-models/processor-module/gen/object.d.ts +2 -2
  22. package/dist/document-models/processor-module/gen/object.d.ts.map +1 -1
  23. package/dist/document-models/processor-module/gen/object.js.map +1 -1
  24. package/dist/document-models/processor-module/gen/types.d.ts +2 -2
  25. package/dist/document-models/processor-module/gen/types.d.ts.map +1 -1
  26. package/dist/document-models/processor-module/gen/utils.d.ts.map +1 -1
  27. package/dist/document-models/processor-module/gen/utils.js +3 -6
  28. package/dist/document-models/processor-module/gen/utils.js.map +1 -1
  29. package/dist/document-models/processor-module/index.d.ts +0 -1
  30. package/dist/document-models/processor-module/index.d.ts.map +1 -1
  31. package/dist/document-models/subgraph-module/gen/object.d.ts +2 -2
  32. package/dist/document-models/subgraph-module/gen/object.d.ts.map +1 -1
  33. package/dist/document-models/subgraph-module/gen/object.js.map +1 -1
  34. package/dist/document-models/subgraph-module/gen/types.d.ts +2 -2
  35. package/dist/document-models/subgraph-module/gen/types.d.ts.map +1 -1
  36. package/dist/document-models/subgraph-module/gen/utils.d.ts.map +1 -1
  37. package/dist/document-models/subgraph-module/gen/utils.js +3 -6
  38. package/dist/document-models/subgraph-module/gen/utils.js.map +1 -1
  39. package/dist/document-models/subgraph-module/index.d.ts +0 -1
  40. package/dist/document-models/subgraph-module/index.d.ts.map +1 -1
  41. package/dist/document-models/vetra-package/gen/object.d.ts +2 -2
  42. package/dist/document-models/vetra-package/gen/object.d.ts.map +1 -1
  43. package/dist/document-models/vetra-package/gen/object.js.map +1 -1
  44. package/dist/document-models/vetra-package/gen/types.d.ts +2 -2
  45. package/dist/document-models/vetra-package/gen/types.d.ts.map +1 -1
  46. package/dist/document-models/vetra-package/gen/utils.d.ts.map +1 -1
  47. package/dist/document-models/vetra-package/gen/utils.js +3 -6
  48. package/dist/document-models/vetra-package/gen/utils.js.map +1 -1
  49. package/dist/document-models/vetra-package/index.d.ts +0 -1
  50. package/dist/document-models/vetra-package/index.d.ts.map +1 -1
  51. package/dist/editors/document-editor/components/DocumentEditorForm.d.ts.map +1 -1
  52. package/dist/editors/document-editor/components/DocumentEditorForm.js +18 -14
  53. package/dist/editors/document-editor/components/DocumentEditorForm.js.map +1 -1
  54. package/dist/processors/codegen/document-handlers/base-document-gen.d.ts +5 -0
  55. package/dist/processors/codegen/document-handlers/base-document-gen.d.ts.map +1 -1
  56. package/dist/processors/codegen/document-handlers/base-document-gen.js +16 -0
  57. package/dist/processors/codegen/document-handlers/base-document-gen.js.map +1 -1
  58. package/dist/processors/codegen/document-handlers/document-codegen-factory.d.ts +2 -2
  59. package/dist/processors/codegen/document-handlers/document-codegen-factory.d.ts.map +1 -1
  60. package/dist/processors/codegen/document-handlers/document-codegen-factory.js +4 -4
  61. package/dist/processors/codegen/document-handlers/document-codegen-factory.js.map +1 -1
  62. package/dist/processors/codegen/document-handlers/document-codegen-manager.d.ts +24 -1
  63. package/dist/processors/codegen/document-handlers/document-codegen-manager.d.ts.map +1 -1
  64. package/dist/processors/codegen/document-handlers/document-codegen-manager.js +121 -21
  65. package/dist/processors/codegen/document-handlers/document-codegen-manager.js.map +1 -1
  66. package/dist/processors/codegen/document-handlers/generators/app-generator.d.ts +4 -0
  67. package/dist/processors/codegen/document-handlers/generators/app-generator.d.ts.map +1 -1
  68. package/dist/processors/codegen/document-handlers/generators/app-generator.js +28 -5
  69. package/dist/processors/codegen/document-handlers/generators/app-generator.js.map +1 -1
  70. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.d.ts +4 -0
  71. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.d.ts.map +1 -1
  72. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.js +59 -48
  73. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.js.map +1 -1
  74. package/dist/processors/codegen/document-handlers/generators/document-model-generator.d.ts +4 -0
  75. package/dist/processors/codegen/document-handlers/generators/document-model-generator.d.ts.map +1 -1
  76. package/dist/processors/codegen/document-handlers/generators/document-model-generator.js +47 -31
  77. package/dist/processors/codegen/document-handlers/generators/document-model-generator.js.map +1 -1
  78. package/dist/processors/codegen/document-handlers/generators/package-generator.d.ts +4 -0
  79. package/dist/processors/codegen/document-handlers/generators/package-generator.d.ts.map +1 -1
  80. package/dist/processors/codegen/document-handlers/generators/package-generator.js +15 -0
  81. package/dist/processors/codegen/document-handlers/generators/package-generator.js.map +1 -1
  82. package/dist/processors/codegen/document-handlers/generators/processor-generator.d.ts +4 -0
  83. package/dist/processors/codegen/document-handlers/generators/processor-generator.d.ts.map +1 -1
  84. package/dist/processors/codegen/document-handlers/generators/processor-generator.js +42 -10
  85. package/dist/processors/codegen/document-handlers/generators/processor-generator.js.map +1 -1
  86. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.d.ts +4 -0
  87. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.d.ts.map +1 -1
  88. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.js +28 -5
  89. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.js.map +1 -1
  90. package/dist/processors/codegen/index.d.ts +5 -0
  91. package/dist/processors/codegen/index.d.ts.map +1 -1
  92. package/dist/processors/codegen/index.js +49 -6
  93. package/dist/processors/codegen/index.js.map +1 -1
  94. package/dist/processors/codegen/interactive-manager.d.ts +48 -0
  95. package/dist/processors/codegen/interactive-manager.d.ts.map +1 -0
  96. package/dist/processors/codegen/interactive-manager.js +150 -0
  97. package/dist/processors/codegen/interactive-manager.js.map +1 -0
  98. package/dist/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +13 -13
@@ -0,0 +1,48 @@
1
+ import { type InternalTransmitterUpdate } from "document-drive/server/listener/transmitter/internal";
2
+ import { type DocumentModelDocument } from "document-model";
3
+ export interface QueuedStrand {
4
+ strand: InternalTransmitterUpdate<DocumentModelDocument>;
5
+ timestamp: number;
6
+ }
7
+ /**
8
+ * InteractiveManager handles user interaction for code generation confirmation
9
+ * Supports both individual strand processing and queue-based batch processing
10
+ */
11
+ export declare class InteractiveManager {
12
+ private isInteractiveMode;
13
+ private processingConfirmation;
14
+ private strandQueue;
15
+ constructor(interactiveMode?: boolean);
16
+ private getDocumentKey;
17
+ /**
18
+ * Add a strand to the queue, replacing any existing strand for the same document
19
+ */
20
+ queueStrand(strand: InternalTransmitterUpdate<DocumentModelDocument>): void;
21
+ /**
22
+ * Get all queued strands
23
+ */
24
+ getQueuedStrands(): QueuedStrand[];
25
+ /**
26
+ * Clear and return all queued strands
27
+ */
28
+ clearQueue(): QueuedStrand[];
29
+ /**
30
+ * Get the current queue size
31
+ */
32
+ getQueueSize(): number;
33
+ private promptUserConfirmation;
34
+ /**
35
+ * Process generation with user confirmation (legacy single-strand method)
36
+ * This method assumes interactive mode is already enabled (checked by caller)
37
+ */
38
+ processWithConfirmation<T>(documentType: string, generator: () => Promise<T>): Promise<T | null>;
39
+ /**
40
+ * Process all queued strands with a single user confirmation
41
+ * This is the main method for queue-based interactive processing
42
+ */
43
+ processQueueWithConfirmation(processor: (strands: QueuedStrand[]) => Promise<void>): Promise<void>;
44
+ setInteractiveMode(enabled: boolean): void;
45
+ isInteractive(): boolean;
46
+ isProcessing(): boolean;
47
+ }
48
+ //# sourceMappingURL=interactive-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-manager.d.ts","sourceRoot":"","sources":["../../../processors/codegen/interactive-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AACrG,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAI5D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,WAAW,CAAmC;gBAE1C,eAAe,GAAE,OAAe;IAI5C,OAAO,CAAC,cAAc;IAItB;;OAEG;IACI,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,qBAAqB,CAAC,GAAG,IAAI;IAWlF;;OAEG;IACI,gBAAgB,IAAI,YAAY,EAAE;IAIzC;;OAEG;IACI,UAAU,IAAI,YAAY,EAAE;IAMnC;;OAEG;IACI,YAAY,IAAI,MAAM;YAIf,sBAAsB;IAqBpC;;;OAGG;IACU,uBAAuB,CAAC,CAAC,EACpC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkCpB;;;OAGG;IACU,4BAA4B,CACvC,SAAS,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GACpD,OAAO,CAAC,IAAI,CAAC;IA+CT,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK1C,aAAa,IAAI,OAAO;IAIxB,YAAY,IAAI,OAAO;CAG/B"}
@@ -0,0 +1,150 @@
1
+ import { createInterface } from "readline";
2
+ import { logger } from "./logger.js";
3
+ /**
4
+ * InteractiveManager handles user interaction for code generation confirmation
5
+ * Supports both individual strand processing and queue-based batch processing
6
+ */
7
+ export class InteractiveManager {
8
+ isInteractiveMode;
9
+ processingConfirmation = false;
10
+ strandQueue = new Map();
11
+ constructor(interactiveMode = false) {
12
+ this.isInteractiveMode = interactiveMode;
13
+ }
14
+ getDocumentKey(documentType, documentId) {
15
+ return `${documentType}:${documentId}`;
16
+ }
17
+ /**
18
+ * Add a strand to the queue, replacing any existing strand for the same document
19
+ */
20
+ queueStrand(strand) {
21
+ const documentKey = this.getDocumentKey(strand.documentType, strand.documentId);
22
+ this.strandQueue.set(documentKey, {
23
+ strand,
24
+ timestamp: Date.now(),
25
+ });
26
+ logger.debug(`>>> Queued strand for ${documentKey}, queue size: ${this.strandQueue.size}`);
27
+ }
28
+ /**
29
+ * Get all queued strands
30
+ */
31
+ getQueuedStrands() {
32
+ return Array.from(this.strandQueue.values());
33
+ }
34
+ /**
35
+ * Clear and return all queued strands
36
+ */
37
+ clearQueue() {
38
+ const queuedStrands = Array.from(this.strandQueue.values());
39
+ this.strandQueue.clear();
40
+ return queuedStrands;
41
+ }
42
+ /**
43
+ * Get the current queue size
44
+ */
45
+ getQueueSize() {
46
+ return this.strandQueue.size;
47
+ }
48
+ async promptUserConfirmation() {
49
+ return new Promise((resolve) => {
50
+ const rl = createInterface({
51
+ input: process.stdin,
52
+ output: process.stdout,
53
+ });
54
+ console.log("\n" + "=".repeat(50));
55
+ console.log("🔄 Code generation ready to run.");
56
+ console.log("=".repeat(50));
57
+ process.stdout.write("Do you want to proceed with code generation? (y/n): \n\n");
58
+ rl.on("line", (answer) => {
59
+ rl.close();
60
+ console.log(""); // Add blank line after user input
61
+ resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
62
+ });
63
+ });
64
+ }
65
+ /**
66
+ * Process generation with user confirmation (legacy single-strand method)
67
+ * This method assumes interactive mode is already enabled (checked by caller)
68
+ */
69
+ async processWithConfirmation(documentType, generator) {
70
+ if (this.processingConfirmation) {
71
+ logger.debug("Already processing confirmation, skipping");
72
+ return null;
73
+ }
74
+ this.processingConfirmation = true;
75
+ try {
76
+ // Always prompt user since this method only called in interactive mode
77
+ const shouldProceed = await this.promptUserConfirmation();
78
+ if (!shouldProceed) {
79
+ logger.info(`❌ Code generation cancelled by user for ${documentType}`);
80
+ return null;
81
+ }
82
+ logger.info(`✅ User approved code generation for ${documentType}`);
83
+ const result = await generator();
84
+ return result;
85
+ }
86
+ catch (error) {
87
+ logger.error(`❌ Error during interactive code generation for ${documentType}:`, error);
88
+ throw error;
89
+ }
90
+ finally {
91
+ this.processingConfirmation = false;
92
+ }
93
+ }
94
+ /**
95
+ * Process all queued strands with a single user confirmation
96
+ * This is the main method for queue-based interactive processing
97
+ */
98
+ async processQueueWithConfirmation(processor) {
99
+ if (this.processingConfirmation) {
100
+ logger.debug("Already processing confirmation, skipping queue processing");
101
+ return;
102
+ }
103
+ // Check if there are any strands to process
104
+ let queuedStrands = this.getQueuedStrands();
105
+ if (queuedStrands.length === 0) {
106
+ logger.debug("No strands in queue to process");
107
+ return;
108
+ }
109
+ this.processingConfirmation = true;
110
+ try {
111
+ // Prompt user for confirmation
112
+ const shouldProceed = await this.promptUserConfirmation();
113
+ if (!shouldProceed) {
114
+ logger.info("❌ Code generation cancelled by user");
115
+ // Clear the queue since user cancelled
116
+ this.clearQueue();
117
+ return;
118
+ }
119
+ // Get and clear the final queue state right before processing
120
+ // (in case new strands were added while waiting for user input)
121
+ queuedStrands = this.clearQueue();
122
+ if (queuedStrands.length === 0) {
123
+ logger.info("â„šī¸ No documents to process");
124
+ return;
125
+ }
126
+ logger.info(`✅ User approved code generation for ${queuedStrands.length} document(s)`);
127
+ // Process all queued strands
128
+ await processor(queuedStrands);
129
+ logger.info("✅ Code generation completed");
130
+ }
131
+ catch (error) {
132
+ logger.error("❌ Error during interactive queue processing:", error);
133
+ throw error;
134
+ }
135
+ finally {
136
+ this.processingConfirmation = false;
137
+ }
138
+ }
139
+ setInteractiveMode(enabled) {
140
+ this.isInteractiveMode = enabled;
141
+ logger.debug(`Interactive mode set to: ${enabled}`);
142
+ }
143
+ isInteractive() {
144
+ return this.isInteractiveMode;
145
+ }
146
+ isProcessing() {
147
+ return this.processingConfirmation;
148
+ }
149
+ }
150
+ //# sourceMappingURL=interactive-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-manager.js","sourceRoot":"","sources":["../../../processors/codegen/interactive-manager.ts"],"names":[],"mappings":"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"}