@viccy123/tapcli 1.0.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 (97) hide show
  1. package/dist/a2ui/index.d.ts +5 -0
  2. package/dist/a2ui/index.d.ts.map +1 -0
  3. package/dist/a2ui/index.js +4 -0
  4. package/dist/a2ui/index.js.map +1 -0
  5. package/dist/a2ui/schemas.d.ts +1953 -0
  6. package/dist/a2ui/schemas.d.ts.map +1 -0
  7. package/dist/a2ui/schemas.js +107 -0
  8. package/dist/a2ui/schemas.js.map +1 -0
  9. package/dist/a2ui/surface-manager.d.ts +21 -0
  10. package/dist/a2ui/surface-manager.d.ts.map +1 -0
  11. package/dist/a2ui/surface-manager.js +71 -0
  12. package/dist/a2ui/surface-manager.js.map +1 -0
  13. package/dist/a2ui/types.d.ts +50 -0
  14. package/dist/a2ui/types.d.ts.map +1 -0
  15. package/dist/a2ui/types.js +2 -0
  16. package/dist/a2ui/types.js.map +1 -0
  17. package/dist/ai/analyzer.d.ts +19 -0
  18. package/dist/ai/analyzer.d.ts.map +1 -0
  19. package/dist/ai/analyzer.js +87 -0
  20. package/dist/ai/analyzer.js.map +1 -0
  21. package/dist/ai/index.d.ts +6 -0
  22. package/dist/ai/index.d.ts.map +1 -0
  23. package/dist/ai/index.js +4 -0
  24. package/dist/ai/index.js.map +1 -0
  25. package/dist/ai/prompts.d.ts +5 -0
  26. package/dist/ai/prompts.d.ts.map +1 -0
  27. package/dist/ai/prompts.js +81 -0
  28. package/dist/ai/prompts.js.map +1 -0
  29. package/dist/ai/ui-generator.d.ts +14 -0
  30. package/dist/ai/ui-generator.d.ts.map +1 -0
  31. package/dist/ai/ui-generator.js +172 -0
  32. package/dist/ai/ui-generator.js.map +1 -0
  33. package/dist/auth/index.d.ts +2 -0
  34. package/dist/auth/index.d.ts.map +1 -0
  35. package/dist/auth/index.js +2 -0
  36. package/dist/auth/index.js.map +1 -0
  37. package/dist/auth/pairing.d.ts +18 -0
  38. package/dist/auth/pairing.d.ts.map +1 -0
  39. package/dist/auth/pairing.js +59 -0
  40. package/dist/auth/pairing.js.map +1 -0
  41. package/dist/config/index.d.ts +7 -0
  42. package/dist/config/index.d.ts.map +1 -0
  43. package/dist/config/index.js +31 -0
  44. package/dist/config/index.js.map +1 -0
  45. package/dist/config/schema.d.ts +89 -0
  46. package/dist/config/schema.d.ts.map +1 -0
  47. package/dist/config/schema.js +22 -0
  48. package/dist/config/schema.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +34 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/protocol/index.d.ts +3 -0
  54. package/dist/protocol/index.d.ts.map +1 -0
  55. package/dist/protocol/index.js +3 -0
  56. package/dist/protocol/index.js.map +1 -0
  57. package/dist/protocol/schemas.d.ts +77 -0
  58. package/dist/protocol/schemas.d.ts.map +1 -0
  59. package/dist/protocol/schemas.js +18 -0
  60. package/dist/protocol/schemas.js.map +1 -0
  61. package/dist/protocol/types.d.ts +74 -0
  62. package/dist/protocol/types.d.ts.map +1 -0
  63. package/dist/protocol/types.js +2 -0
  64. package/dist/protocol/types.js.map +1 -0
  65. package/dist/pty/index.d.ts +5 -0
  66. package/dist/pty/index.d.ts.map +1 -0
  67. package/dist/pty/index.js +3 -0
  68. package/dist/pty/index.js.map +1 -0
  69. package/dist/pty/session.d.ts +17 -0
  70. package/dist/pty/session.d.ts.map +1 -0
  71. package/dist/pty/session.js +71 -0
  72. package/dist/pty/session.js.map +1 -0
  73. package/dist/pty/terminal-query-interceptor.d.ts +27 -0
  74. package/dist/pty/terminal-query-interceptor.d.ts.map +1 -0
  75. package/dist/pty/terminal-query-interceptor.js +63 -0
  76. package/dist/pty/terminal-query-interceptor.js.map +1 -0
  77. package/dist/pty/types.d.ts +13 -0
  78. package/dist/pty/types.d.ts.map +1 -0
  79. package/dist/pty/types.js +2 -0
  80. package/dist/pty/types.js.map +1 -0
  81. package/dist/server.d.ts +60 -0
  82. package/dist/server.d.ts.map +1 -0
  83. package/dist/server.js +524 -0
  84. package/dist/server.js.map +1 -0
  85. package/dist/transport/client.d.ts +26 -0
  86. package/dist/transport/client.d.ts.map +1 -0
  87. package/dist/transport/client.js +68 -0
  88. package/dist/transport/client.js.map +1 -0
  89. package/dist/transport/index.d.ts +5 -0
  90. package/dist/transport/index.d.ts.map +1 -0
  91. package/dist/transport/index.js +3 -0
  92. package/dist/transport/index.js.map +1 -0
  93. package/dist/transport/websocket.d.ts +25 -0
  94. package/dist/transport/websocket.d.ts.map +1 -0
  95. package/dist/transport/websocket.js +61 -0
  96. package/dist/transport/websocket.js.map +1 -0
  97. package/package.json +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/a2ui/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ // Action schema
3
+ export const A2UIActionSchema = z.object({
4
+ type: z.string(),
5
+ value: z.string().optional(),
6
+ valuePath: z.string().optional(),
7
+ });
8
+ // Button properties schema
9
+ export const ButtonPropertiesSchema = z.object({
10
+ label: z.string(),
11
+ variant: z.enum(['filled', 'elevated', 'outlined', 'text']).optional(),
12
+ disabled: z.boolean().optional(),
13
+ action: A2UIActionSchema,
14
+ });
15
+ // TextField check schema
16
+ export const TextFieldCheckSchema = z.object({
17
+ type: z.enum(['required', 'minLength', 'maxLength', 'pattern']),
18
+ value: z.union([z.string(), z.number()]).optional(),
19
+ message: z.string().optional(),
20
+ });
21
+ // TextField properties schema
22
+ export const TextFieldPropertiesSchema = z.object({
23
+ label: z.string().optional(),
24
+ placeholder: z.string().optional(),
25
+ value: z.string().optional(),
26
+ bindTo: z.string().optional(),
27
+ multiline: z.boolean().optional(),
28
+ maxLines: z.number().optional(),
29
+ checks: z.array(TextFieldCheckSchema).optional(),
30
+ });
31
+ // Choice option schema
32
+ export const ChoiceOptionSchema = z.object({
33
+ id: z.string(),
34
+ label: z.string(),
35
+ description: z.string().optional(),
36
+ });
37
+ // ChoicePicker properties schema
38
+ export const ChoicePickerPropertiesSchema = z.object({
39
+ label: z.string().optional(),
40
+ options: z.array(ChoiceOptionSchema),
41
+ mode: z.enum(['single', 'multiple']),
42
+ selectedIds: z.array(z.string()).optional(),
43
+ bindTo: z.string().optional(),
44
+ });
45
+ // Text properties schema
46
+ export const TextPropertiesSchema = z.object({
47
+ text: z.string(),
48
+ style: z.enum(['headline', 'title', 'body', 'label', 'caption']).optional(),
49
+ align: z.enum(['left', 'center', 'right']).optional(),
50
+ markdown: z.boolean().optional(),
51
+ });
52
+ // Card properties schema
53
+ export const CardPropertiesSchema = z.object({
54
+ title: z.string().optional(),
55
+ subtitle: z.string().optional(),
56
+ });
57
+ // Component properties discriminated by component type
58
+ export const ComponentPropertiesMap = {
59
+ button: ButtonPropertiesSchema,
60
+ textField: TextFieldPropertiesSchema,
61
+ choicePicker: ChoicePickerPropertiesSchema,
62
+ text: TextPropertiesSchema,
63
+ card: CardPropertiesSchema,
64
+ };
65
+ // A2UI component schema
66
+ export const A2UIComponentSchema = z.object({
67
+ id: z.string(),
68
+ component: z.enum(['button', 'textField', 'choicePicker', 'text', 'card']),
69
+ parentId: z.string().optional(),
70
+ properties: z.union([
71
+ ButtonPropertiesSchema,
72
+ TextFieldPropertiesSchema,
73
+ ChoicePickerPropertiesSchema,
74
+ TextPropertiesSchema,
75
+ CardPropertiesSchema,
76
+ ]),
77
+ });
78
+ // A2UI payload schemas (server → client)
79
+ export const CreateSurfacePayloadSchema = z.object({
80
+ action: z.literal('createSurface'),
81
+ catalogId: z.string(),
82
+ components: z.array(A2UIComponentSchema).optional(),
83
+ });
84
+ export const UpdateComponentsPayloadSchema = z.object({
85
+ action: z.literal('updateComponents'),
86
+ components: z.array(A2UIComponentSchema),
87
+ });
88
+ export const UpdateDataModelPayloadSchema = z.object({
89
+ action: z.literal('updateDataModel'),
90
+ path: z.string().optional(),
91
+ data: z.unknown(),
92
+ });
93
+ export const DeleteSurfacePayloadSchema = z.object({
94
+ action: z.literal('deleteSurface'),
95
+ });
96
+ export const A2UIPayloadSchema = z.discriminatedUnion('action', [
97
+ CreateSurfacePayloadSchema,
98
+ UpdateComponentsPayloadSchema,
99
+ UpdateDataModelPayloadSchema,
100
+ DeleteSurfacePayloadSchema,
101
+ ]);
102
+ // Action data from client → server
103
+ export const ActionDataSchema = z.object({
104
+ actionId: z.string(),
105
+ data: z.record(z.unknown()),
106
+ });
107
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/a2ui/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { A2UIPayload, A2UIComponent } from '../protocol/types.js';
2
+ export interface Surface {
3
+ readonly id: string;
4
+ readonly catalogId: string;
5
+ readonly components: readonly A2UIComponent[];
6
+ readonly dataModel: Record<string, unknown>;
7
+ }
8
+ export declare class SurfaceManager {
9
+ private surfaces;
10
+ createSurface(catalogId: string, components?: A2UIComponent[]): {
11
+ surface: Surface;
12
+ payload: A2UIPayload;
13
+ };
14
+ updateComponents(surfaceId: string, components: A2UIComponent[]): A2UIPayload | null;
15
+ updateDataModel(surfaceId: string, path: string | undefined, data: unknown): A2UIPayload | null;
16
+ deleteSurface(surfaceId: string): A2UIPayload | null;
17
+ getSurface(surfaceId: string): Surface | undefined;
18
+ getAllSurfaces(): readonly Surface[];
19
+ getActiveSurfaceCount(): number;
20
+ }
21
+ //# sourceMappingURL=surface-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-manager.d.ts","sourceRoot":"","sources":["../../src/a2ui/surface-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IAEnD,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,aAAa,EAAE,GAC3B;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE;IAoB7C,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,EAAE,GAC1B,WAAW,GAAG,IAAI;IAmBrB,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,OAAO,GACZ,WAAW,GAAG,IAAI;IAwBrB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAYpD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIlD,cAAc,IAAI,SAAS,OAAO,EAAE;IAIpC,qBAAqB,IAAI,MAAM;CAGhC"}
@@ -0,0 +1,71 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ export class SurfaceManager {
3
+ surfaces = new Map();
4
+ createSurface(catalogId, components) {
5
+ const id = uuidv4();
6
+ const surface = {
7
+ id,
8
+ catalogId,
9
+ components: components ?? [],
10
+ dataModel: {},
11
+ };
12
+ this.surfaces = new Map(this.surfaces).set(id, surface);
13
+ const payload = {
14
+ action: 'createSurface',
15
+ catalogId,
16
+ components: components,
17
+ };
18
+ return { surface, payload };
19
+ }
20
+ updateComponents(surfaceId, components) {
21
+ const existing = this.surfaces.get(surfaceId);
22
+ if (!existing) {
23
+ return null;
24
+ }
25
+ const updated = {
26
+ ...existing,
27
+ components,
28
+ };
29
+ this.surfaces = new Map(this.surfaces).set(surfaceId, updated);
30
+ return {
31
+ action: 'updateComponents',
32
+ components,
33
+ };
34
+ }
35
+ updateDataModel(surfaceId, path, data) {
36
+ const existing = this.surfaces.get(surfaceId);
37
+ if (!existing) {
38
+ return null;
39
+ }
40
+ const newDataModel = path
41
+ ? { ...existing.dataModel, [path]: data }
42
+ : data;
43
+ const updated = {
44
+ ...existing,
45
+ dataModel: newDataModel,
46
+ };
47
+ this.surfaces = new Map(this.surfaces).set(surfaceId, updated);
48
+ return {
49
+ action: 'updateDataModel',
50
+ path,
51
+ data,
52
+ };
53
+ }
54
+ deleteSurface(surfaceId) {
55
+ if (!this.surfaces.has(surfaceId)) {
56
+ return null;
57
+ }
58
+ this.surfaces = new Map([...this.surfaces].filter(([id]) => id !== surfaceId));
59
+ return { action: 'deleteSurface' };
60
+ }
61
+ getSurface(surfaceId) {
62
+ return this.surfaces.get(surfaceId);
63
+ }
64
+ getAllSurfaces() {
65
+ return [...this.surfaces.values()];
66
+ }
67
+ getActiveSurfaceCount() {
68
+ return this.surfaces.size;
69
+ }
70
+ }
71
+ //# sourceMappingURL=surface-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-manager.js","sourceRoot":"","sources":["../../src/a2ui/surface-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAUpC,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;IAEnD,aAAa,CACX,SAAiB,EACjB,UAA4B;QAE5B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,OAAO,GAAY;YACvB,EAAE;YACF,SAAS;YACT,UAAU,EAAE,UAAU,IAAI,EAAE;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAExD,MAAM,OAAO,GAAgB;YAC3B,MAAM,EAAE,eAAe;YACvB,SAAS;YACT,UAAU,EAAE,UAAU;SACvB,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,gBAAgB,CACd,SAAiB,EACjB,UAA2B;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAY;YACvB,GAAG,QAAQ;YACX,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/D,OAAO;YACL,MAAM,EAAE,kBAAkB;YAC1B,UAAU;SACX,CAAC;IACJ,CAAC;IAED,eAAe,CACb,SAAiB,EACjB,IAAwB,EACxB,IAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,IAAI;YACvB,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;YACzC,CAAC,CAAE,IAAgC,CAAC;QAEtC,MAAM,OAAO,GAAY;YACvB,GAAG,QAAQ;YACX,SAAS,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/D,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,IAAI;YACJ,IAAI;SACL,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CACrB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CACtD,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ export type A2UIComponentType = 'button' | 'textField' | 'choicePicker' | 'text' | 'card';
2
+ export interface A2UIAction {
3
+ readonly type: string;
4
+ readonly value?: string;
5
+ readonly valuePath?: string;
6
+ }
7
+ export interface ButtonProperties {
8
+ readonly label: string;
9
+ readonly variant?: 'filled' | 'elevated' | 'outlined' | 'text';
10
+ readonly disabled?: boolean;
11
+ readonly action: A2UIAction;
12
+ }
13
+ export interface TextFieldCheck {
14
+ readonly type: 'required' | 'minLength' | 'maxLength' | 'pattern';
15
+ readonly value?: string | number;
16
+ readonly message?: string;
17
+ }
18
+ export interface TextFieldProperties {
19
+ readonly label?: string;
20
+ readonly placeholder?: string;
21
+ readonly value?: string;
22
+ readonly bindTo?: string;
23
+ readonly multiline?: boolean;
24
+ readonly maxLines?: number;
25
+ readonly checks?: readonly TextFieldCheck[];
26
+ }
27
+ export interface ChoiceOption {
28
+ readonly id: string;
29
+ readonly label: string;
30
+ readonly description?: string;
31
+ }
32
+ export interface ChoicePickerProperties {
33
+ readonly label?: string;
34
+ readonly options: readonly ChoiceOption[];
35
+ readonly mode: 'single' | 'multiple';
36
+ readonly selectedIds?: readonly string[];
37
+ readonly bindTo?: string;
38
+ }
39
+ export interface TextProperties {
40
+ readonly text: string;
41
+ readonly style?: 'headline' | 'title' | 'body' | 'label' | 'caption';
42
+ readonly align?: 'left' | 'center' | 'right';
43
+ readonly markdown?: boolean;
44
+ }
45
+ export interface CardProperties {
46
+ readonly title?: string;
47
+ readonly subtitle?: string;
48
+ }
49
+ export type ComponentProperties = ButtonProperties | TextFieldProperties | ChoicePickerProperties | TextProperties | CardProperties;
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/a2ui/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,WAAW,GACX,cAAc,GACd,MAAM,GACN,MAAM,CAAC;AAGX,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AAGD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAGD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,mBAAmB,GACnB,sBAAsB,GACtB,cAAc,GACd,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/a2ui/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ export interface AIAnalyzerConfig {
2
+ readonly apiUrl: string;
3
+ readonly model: string;
4
+ readonly apiKey: string;
5
+ }
6
+ export interface AnalysisResult {
7
+ readonly waiting: boolean;
8
+ readonly question?: string;
9
+ readonly inputType?: 'confirm' | 'select' | 'multiSelect' | 'text';
10
+ readonly options?: readonly string[];
11
+ }
12
+ export declare class AIAnalyzer {
13
+ private readonly config;
14
+ constructor(config: AIAnalyzerConfig);
15
+ analyze(output: string): Promise<AnalysisResult>;
16
+ private parseResponse;
17
+ private validateInputType;
18
+ }
19
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/ai/analyzer.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;gBAE9B,MAAM,EAAE,gBAAgB;IAI9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuDtD,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,iBAAiB;CAS1B"}
@@ -0,0 +1,87 @@
1
+ import { SYSTEM_PROMPT, buildAnalyzePrompt } from './prompts.js';
2
+ const DEFAULT_TIMEOUT_MS = 10_000;
3
+ export class AIAnalyzer {
4
+ config;
5
+ constructor(config) {
6
+ this.config = config;
7
+ }
8
+ async analyze(output) {
9
+ if (!this.config.apiKey) {
10
+ return { waiting: false };
11
+ }
12
+ const prompt = buildAnalyzePrompt(output);
13
+ const body = {
14
+ model: this.config.model,
15
+ messages: [
16
+ { role: 'system', content: SYSTEM_PROMPT },
17
+ { role: 'user', content: prompt },
18
+ ],
19
+ temperature: 0.1,
20
+ max_tokens: 256,
21
+ };
22
+ const controller = new AbortController();
23
+ const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS);
24
+ try {
25
+ const response = await fetch(this.config.apiUrl, {
26
+ method: 'POST',
27
+ headers: {
28
+ 'Content-Type': 'application/json',
29
+ 'Authorization': `Bearer ${this.config.apiKey}`,
30
+ },
31
+ body: JSON.stringify(body),
32
+ signal: controller.signal,
33
+ });
34
+ if (!response.ok) {
35
+ throw new Error(`AI API returned ${response.status}: ${response.statusText}`);
36
+ }
37
+ const data = (await response.json());
38
+ const content = data.choices?.[0]?.message?.content;
39
+ if (!content) {
40
+ return { waiting: false };
41
+ }
42
+ return this.parseResponse(content);
43
+ }
44
+ catch (error) {
45
+ if (error instanceof Error && error.name === 'AbortError') {
46
+ throw new Error('AI API request timed out');
47
+ }
48
+ throw error;
49
+ }
50
+ finally {
51
+ clearTimeout(timeoutId);
52
+ }
53
+ }
54
+ parseResponse(content) {
55
+ try {
56
+ // Strip markdown code fences if present
57
+ const cleaned = content
58
+ .replace(/^```(?:json)?\s*/m, '')
59
+ .replace(/\s*```\s*$/m, '')
60
+ .trim();
61
+ const parsed = JSON.parse(cleaned);
62
+ const waiting = parsed['waiting'] === true;
63
+ if (!waiting) {
64
+ return { waiting: false };
65
+ }
66
+ const question = typeof parsed['question'] === 'string'
67
+ ? parsed['question']
68
+ : undefined;
69
+ const inputType = this.validateInputType(parsed['inputType']);
70
+ const options = Array.isArray(parsed['options'])
71
+ ? parsed['options'].filter((o) => typeof o === 'string')
72
+ : undefined;
73
+ return { waiting, question, inputType, options };
74
+ }
75
+ catch {
76
+ return { waiting: false };
77
+ }
78
+ }
79
+ validateInputType(value) {
80
+ const validTypes = ['confirm', 'select', 'multiSelect', 'text'];
81
+ if (typeof value === 'string' && validTypes.includes(value)) {
82
+ return value;
83
+ }
84
+ return undefined;
85
+ }
86
+ }
87
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/ai/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAejE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,OAAO,UAAU;IACJ,MAAM,CAAmB;IAE1C,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE1C,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;gBAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC;YACD,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC/C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;iBAChD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAe;QACnC,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,OAAO,GAAG,OAAO;iBACpB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;iBAChC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;iBAC1B,IAAI,EAAE,CAAC;YAEV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAE9D,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ;gBACrD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;gBACpB,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YAE9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC9C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACrE,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,KAAc;QAEd,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAU,CAAC;QACzE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAkC,CAAC,EAAE,CAAC;YACzF,OAAO,KAAoC,CAAC;QAC9C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export { AIAnalyzer } from './analyzer.js';
2
+ export type { AIAnalyzerConfig, AnalysisResult } from './analyzer.js';
3
+ export { A2UIGenerator } from './ui-generator.js';
4
+ export type { GenerateResult } from './ui-generator.js';
5
+ export { SYSTEM_PROMPT, buildAnalyzePrompt } from './prompts.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AIAnalyzer } from './analyzer.js';
2
+ export { A2UIGenerator } from './ui-generator.js';
3
+ export { SYSTEM_PROMPT, buildAnalyzePrompt } from './prompts.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function stripAnsiCodes(text: string): string;
2
+ export declare const SYSTEM_PROMPT = "You are a CLI output analyzer. Your job is to detect whether a CLI tool is waiting for user input.\n\nAnalyze the terminal output and determine:\n1. Is the CLI waiting for user input? (waiting: true/false)\n2. If waiting, what is the question being asked? (question)\n3. What type of input is expected? (inputType: \"confirm\" | \"select\" | \"multiSelect\" | \"text\")\n4. If there are predefined options, list them (options)\n\n## Claude Code Specific Patterns\n\nClaude Code (Anthropic's CLI) has specific interactive patterns:\n\n### AskUserQuestion (select)\nClaude Code presents questions with numbered options like:\n Question text here\n 1. Option A (description)\n 2. Option B (description)\n 3. Option C (description)\n > Other\n\nWhen you see a numbered list of options below a question, this is inputType: \"select\".\nExtract each option's LABEL (the short text, not the description in parentheses).\n\n### Permission prompts (confirm)\nClaude Code asks permission with patterns like:\n Allow [action]? (Y/n)\n Do you want to proceed? (Y/n)\n\nThese are inputType: \"confirm\".\n\n### Text input prompts\nClaude Code may ask for free-form input:\n Enter your response:\n > _\n\nThese are inputType: \"text\".\n\n## Important Rules\n\n- ONLY set waiting: true if the CLI is ACTIVELY waiting for user input right now\n- Do NOT set waiting: true for:\n - Progress output (loading, processing, building, downloading)\n - Status messages or log lines\n - Code output or file contents being displayed\n - Tool execution results\n - Streaming text responses (AI generating text)\n- If you see a cursor blinking indicator or prompt character (>, $, %) at the end WITHOUT a question, it's likely just a shell prompt, NOT a waiting state\n- If the output ends with ongoing text generation or code output, set waiting: false\n\nRespond ONLY with valid JSON, no markdown fences or extra text.";
3
+ export declare const ANALYZE_PROMPT = "Analyze this CLI output and determine if it's waiting for user input.\n\nCLI Output (last portion):\n---\n{output}\n---\n\nRespond with JSON:\n{\n \"waiting\": boolean,\n \"question\": \"the question being asked (if waiting)\",\n \"inputType\": \"confirm\" | \"select\" | \"multiSelect\" | \"text\",\n \"options\": [\"option1\", \"option2\"] // only if select/multiSelect, extract the short label for each option\n}";
4
+ export declare function buildAnalyzePrompt(output: string): string;
5
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,eAAO,MAAM,aAAa,w3DAiDsC,CAAC;AAEjE,eAAO,MAAM,cAAc,waAazB,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD"}
@@ -0,0 +1,81 @@
1
+ export function stripAnsiCodes(text) {
2
+ // Remove ANSI escape sequences: CSI sequences, OSC sequences, and other control codes
3
+ return text
4
+ .replace(/\x1b\[[0-9;?]*[a-zA-Z@`]/g, '') // CSI sequences (colors, cursor, private modes, etc.)
5
+ .replace(/\x1b\].*?(?:\x07|\x1b\\)/g, '') // OSC sequences
6
+ .replace(/\x1b[()][AB012]/g, '') // Character set selection
7
+ .replace(/\x1b[>=<]/g, '') // Keypad/cursor modes
8
+ .replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, ''); // Other control chars (keep \n \r \t)
9
+ }
10
+ export const SYSTEM_PROMPT = `You are a CLI output analyzer. Your job is to detect whether a CLI tool is waiting for user input.
11
+
12
+ Analyze the terminal output and determine:
13
+ 1. Is the CLI waiting for user input? (waiting: true/false)
14
+ 2. If waiting, what is the question being asked? (question)
15
+ 3. What type of input is expected? (inputType: "confirm" | "select" | "multiSelect" | "text")
16
+ 4. If there are predefined options, list them (options)
17
+
18
+ ## Claude Code Specific Patterns
19
+
20
+ Claude Code (Anthropic's CLI) has specific interactive patterns:
21
+
22
+ ### AskUserQuestion (select)
23
+ Claude Code presents questions with numbered options like:
24
+ Question text here
25
+ 1. Option A (description)
26
+ 2. Option B (description)
27
+ 3. Option C (description)
28
+ > Other
29
+
30
+ When you see a numbered list of options below a question, this is inputType: "select".
31
+ Extract each option's LABEL (the short text, not the description in parentheses).
32
+
33
+ ### Permission prompts (confirm)
34
+ Claude Code asks permission with patterns like:
35
+ Allow [action]? (Y/n)
36
+ Do you want to proceed? (Y/n)
37
+
38
+ These are inputType: "confirm".
39
+
40
+ ### Text input prompts
41
+ Claude Code may ask for free-form input:
42
+ Enter your response:
43
+ > _
44
+
45
+ These are inputType: "text".
46
+
47
+ ## Important Rules
48
+
49
+ - ONLY set waiting: true if the CLI is ACTIVELY waiting for user input right now
50
+ - Do NOT set waiting: true for:
51
+ - Progress output (loading, processing, building, downloading)
52
+ - Status messages or log lines
53
+ - Code output or file contents being displayed
54
+ - Tool execution results
55
+ - Streaming text responses (AI generating text)
56
+ - If you see a cursor blinking indicator or prompt character (>, $, %) at the end WITHOUT a question, it's likely just a shell prompt, NOT a waiting state
57
+ - If the output ends with ongoing text generation or code output, set waiting: false
58
+
59
+ Respond ONLY with valid JSON, no markdown fences or extra text.`;
60
+ export const ANALYZE_PROMPT = `Analyze this CLI output and determine if it's waiting for user input.
61
+
62
+ CLI Output (last portion):
63
+ ---
64
+ {output}
65
+ ---
66
+
67
+ Respond with JSON:
68
+ {
69
+ "waiting": boolean,
70
+ "question": "the question being asked (if waiting)",
71
+ "inputType": "confirm" | "select" | "multiSelect" | "text",
72
+ "options": ["option1", "option2"] // only if select/multiSelect, extract the short label for each option
73
+ }`;
74
+ export function buildAnalyzePrompt(output) {
75
+ // Strip ANSI escape codes for clean text analysis
76
+ const cleaned = stripAnsiCodes(output);
77
+ // Take last 2000 chars to avoid sending too much data
78
+ const trimmed = cleaned.length > 2000 ? cleaned.slice(-2000) : cleaned;
79
+ return ANALYZE_PROMPT.replace('{output}', trimmed);
80
+ }
81
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,sFAAsF;IACtF,OAAO,IAAI;SACR,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,sDAAsD;SAC/F,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,gBAAgB;SACzD,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAW,0BAA0B;SACpE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAiB,sBAAsB;SAChE,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;AACzF,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAiDmC,CAAC;AAEjE,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;EAa5B,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,kDAAkD;IAClD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,sDAAsD;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,OAAO,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { A2UIComponent } from '../protocol/types.js';
2
+ import type { AnalysisResult } from './analyzer.js';
3
+ export interface GenerateResult {
4
+ readonly catalogId: string;
5
+ readonly components: A2UIComponent[];
6
+ }
7
+ export declare class A2UIGenerator {
8
+ generate(analysis: AnalysisResult): GenerateResult;
9
+ private generateConfirm;
10
+ private generateSelect;
11
+ private generateMultiSelect;
12
+ private generateText;
13
+ }
14
+ //# sourceMappingURL=ui-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-generator.d.ts","sourceRoot":"","sources":["../../src/ai/ui-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;CACtC;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IAmBlD,OAAO,CAAC,eAAe;IA6CvB,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,mBAAmB;IA0C3B,OAAO,CAAC,YAAY;CAmCrB"}