@vibesdotdev/infra-core 0.0.1

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 (133) hide show
  1. package/README.md +78 -0
  2. package/SPEC.md +169 -0
  3. package/dist/bootstrap/index.d.ts +5 -0
  4. package/dist/bootstrap/index.d.ts.map +1 -0
  5. package/dist/bootstrap/index.js +4 -0
  6. package/dist/bootstrap/index.js.map +1 -0
  7. package/dist/bootstrap/seed.descriptor.d.ts +31 -0
  8. package/dist/bootstrap/seed.descriptor.d.ts.map +1 -0
  9. package/dist/bootstrap/seed.descriptor.js +18 -0
  10. package/dist/bootstrap/seed.descriptor.js.map +1 -0
  11. package/dist/bootstrap/seed.impl-shape.d.ts +5 -0
  12. package/dist/bootstrap/seed.impl-shape.d.ts.map +1 -0
  13. package/dist/bootstrap/seed.impl-shape.js +2 -0
  14. package/dist/bootstrap/seed.impl-shape.js.map +1 -0
  15. package/dist/bootstrap/seed.kind.d.ts +5 -0
  16. package/dist/bootstrap/seed.kind.d.ts.map +1 -0
  17. package/dist/bootstrap/seed.kind.js +14 -0
  18. package/dist/bootstrap/seed.kind.js.map +1 -0
  19. package/dist/bootstrap/seed.runner.d.ts +18 -0
  20. package/dist/bootstrap/seed.runner.d.ts.map +1 -0
  21. package/dist/bootstrap/seed.runner.js +59 -0
  22. package/dist/bootstrap/seed.runner.js.map +1 -0
  23. package/dist/credentials/resolve.d.ts +80 -0
  24. package/dist/credentials/resolve.d.ts.map +1 -0
  25. package/dist/credentials/resolve.js +128 -0
  26. package/dist/credentials/resolve.js.map +1 -0
  27. package/dist/deployment.d.ts +9 -0
  28. package/dist/deployment.d.ts.map +1 -0
  29. package/dist/deployment.js +25 -0
  30. package/dist/deployment.js.map +1 -0
  31. package/dist/index.d.ts +32 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +21 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/infra.plugin.d.ts +18 -0
  36. package/dist/infra.plugin.d.ts.map +1 -0
  37. package/dist/infra.plugin.js +52 -0
  38. package/dist/infra.plugin.js.map +1 -0
  39. package/dist/kinds/alerts.kind.d.ts +192 -0
  40. package/dist/kinds/alerts.kind.d.ts.map +1 -0
  41. package/dist/kinds/alerts.kind.js +116 -0
  42. package/dist/kinds/alerts.kind.js.map +1 -0
  43. package/dist/kinds/artifact.kind.d.ts +96 -0
  44. package/dist/kinds/artifact.kind.d.ts.map +1 -0
  45. package/dist/kinds/artifact.kind.js +53 -0
  46. package/dist/kinds/artifact.kind.js.map +1 -0
  47. package/dist/kinds/cache.kind.d.ts +128 -0
  48. package/dist/kinds/cache.kind.d.ts.map +1 -0
  49. package/dist/kinds/cache.kind.js +90 -0
  50. package/dist/kinds/cache.kind.js.map +1 -0
  51. package/dist/kinds/database.kind.d.ts +141 -0
  52. package/dist/kinds/database.kind.d.ts.map +1 -0
  53. package/dist/kinds/database.kind.js +103 -0
  54. package/dist/kinds/database.kind.js.map +1 -0
  55. package/dist/kinds/discovery.d.ts +20 -0
  56. package/dist/kinds/discovery.d.ts.map +1 -0
  57. package/dist/kinds/discovery.js +25 -0
  58. package/dist/kinds/discovery.js.map +1 -0
  59. package/dist/kinds/git-hosting.kind.d.ts +98 -0
  60. package/dist/kinds/git-hosting.kind.d.ts.map +1 -0
  61. package/dist/kinds/git-hosting.kind.js +81 -0
  62. package/dist/kinds/git-hosting.kind.js.map +1 -0
  63. package/dist/kinds/index.d.ts +16 -0
  64. package/dist/kinds/index.d.ts.map +1 -0
  65. package/dist/kinds/index.js +16 -0
  66. package/dist/kinds/index.js.map +1 -0
  67. package/dist/kinds/logs.kind.d.ts +91 -0
  68. package/dist/kinds/logs.kind.d.ts.map +1 -0
  69. package/dist/kinds/logs.kind.js +73 -0
  70. package/dist/kinds/logs.kind.js.map +1 -0
  71. package/dist/kinds/object-storage.kind.d.ts +85 -0
  72. package/dist/kinds/object-storage.kind.d.ts.map +1 -0
  73. package/dist/kinds/object-storage.kind.js +81 -0
  74. package/dist/kinds/object-storage.kind.js.map +1 -0
  75. package/dist/kinds/observability.kind.d.ts +176 -0
  76. package/dist/kinds/observability.kind.d.ts.map +1 -0
  77. package/dist/kinds/observability.kind.js +120 -0
  78. package/dist/kinds/observability.kind.js.map +1 -0
  79. package/dist/kinds/package-registry.kind.d.ts +89 -0
  80. package/dist/kinds/package-registry.kind.d.ts.map +1 -0
  81. package/dist/kinds/package-registry.kind.js +78 -0
  82. package/dist/kinds/package-registry.kind.js.map +1 -0
  83. package/dist/kinds/queue.kind.d.ts +113 -0
  84. package/dist/kinds/queue.kind.d.ts.map +1 -0
  85. package/dist/kinds/queue.kind.js +86 -0
  86. package/dist/kinds/queue.kind.js.map +1 -0
  87. package/dist/kinds/rum.kind.d.ts +113 -0
  88. package/dist/kinds/rum.kind.d.ts.map +1 -0
  89. package/dist/kinds/rum.kind.js +80 -0
  90. package/dist/kinds/rum.kind.js.map +1 -0
  91. package/dist/kinds/sandbox.kind.d.ts +111 -0
  92. package/dist/kinds/sandbox.kind.d.ts.map +1 -0
  93. package/dist/kinds/sandbox.kind.js +94 -0
  94. package/dist/kinds/sandbox.kind.js.map +1 -0
  95. package/dist/kinds/web-app.kind.d.ts +99 -0
  96. package/dist/kinds/web-app.kind.d.ts.map +1 -0
  97. package/dist/kinds/web-app.kind.js +86 -0
  98. package/dist/kinds/web-app.kind.js.map +1 -0
  99. package/dist/kinds/worker.kind.d.ts +244 -0
  100. package/dist/kinds/worker.kind.d.ts.map +1 -0
  101. package/dist/kinds/worker.kind.js +171 -0
  102. package/dist/kinds/worker.kind.js.map +1 -0
  103. package/dist/schemas.d.ts +125 -0
  104. package/dist/schemas.d.ts.map +1 -0
  105. package/dist/schemas.js +102 -0
  106. package/dist/schemas.js.map +1 -0
  107. package/package.json +92 -0
  108. package/src/bootstrap/index.ts +15 -0
  109. package/src/bootstrap/seed.descriptor.ts +24 -0
  110. package/src/bootstrap/seed.impl-shape.ts +5 -0
  111. package/src/bootstrap/seed.kind.ts +26 -0
  112. package/src/bootstrap/seed.runner.ts +87 -0
  113. package/src/credentials/resolve.ts +205 -0
  114. package/src/deployment.ts +57 -0
  115. package/src/index.ts +149 -0
  116. package/src/infra.plugin.ts +54 -0
  117. package/src/kinds/alerts.kind.ts +164 -0
  118. package/src/kinds/artifact.kind.ts +96 -0
  119. package/src/kinds/cache.kind.ts +104 -0
  120. package/src/kinds/database.kind.ts +120 -0
  121. package/src/kinds/discovery.ts +26 -0
  122. package/src/kinds/git-hosting.kind.ts +100 -0
  123. package/src/kinds/index.ts +139 -0
  124. package/src/kinds/logs.kind.ts +104 -0
  125. package/src/kinds/object-storage.kind.ts +101 -0
  126. package/src/kinds/observability.kind.ts +178 -0
  127. package/src/kinds/package-registry.kind.ts +95 -0
  128. package/src/kinds/queue.kind.ts +102 -0
  129. package/src/kinds/rum.kind.ts +135 -0
  130. package/src/kinds/sandbox.kind.ts +115 -0
  131. package/src/kinds/web-app.kind.ts +103 -0
  132. package/src/kinds/worker.kind.ts +203 -0
  133. package/src/schemas.ts +127 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Kind: infra/queue
3
+ *
4
+ * Describes a message queue system.
5
+ *
6
+ * Schema shape: strict common base + `config` discriminated union.
7
+ *
8
+ * - The base defines fields universal across adapters: id/kind/name +
9
+ * the queue shape (engine, topics, maxBatchSize, maxRetries, deadLetterQueue).
10
+ * - Adapter-specific fields (namespace, storageSize, resources, …) live under
11
+ * `config`. Each adapter package defines its own concrete schema.
12
+ */
13
+ import * as z from 'zod/v4';
14
+ import type { RuntimeKindDescriptorRecord } from '@vibesdotdev/runtime/schemas/kind';
15
+ import type { RuntimeDescriptor } from '@vibesdotdev/runtime/schemas/descriptor';
16
+ export declare const QueueTopicSchema: z.ZodObject<{
17
+ name: z.ZodString;
18
+ partitions: z.ZodOptional<z.ZodNumber>;
19
+ retention: z.ZodOptional<z.ZodString>;
20
+ replication: z.ZodOptional<z.ZodNumber>;
21
+ }, z.core.$strip>;
22
+ export type QueueTopic = z.infer<typeof QueueTopicSchema>;
23
+ export declare const DoksQueueConfigSchema: z.ZodObject<{
24
+ namespace: z.ZodDefault<z.ZodString>;
25
+ storageSize: z.ZodDefault<z.ZodString>;
26
+ resources: z.ZodOptional<z.ZodObject<{
27
+ requests: z.ZodOptional<z.ZodObject<{
28
+ cpu: z.ZodString;
29
+ memory: z.ZodString;
30
+ }, z.core.$strip>>;
31
+ limits: z.ZodOptional<z.ZodObject<{
32
+ cpu: z.ZodString;
33
+ memory: z.ZodString;
34
+ }, z.core.$strip>>;
35
+ }, z.core.$strip>>;
36
+ }, z.core.$strip>;
37
+ export declare const CloudflareQueuesConfigSchema: z.ZodObject<{
38
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
39
+ maxRetries: z.ZodDefault<z.ZodNumber>;
40
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
41
+ }, z.core.$strip>;
42
+ export declare const QueueConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
43
+ namespace: z.ZodDefault<z.ZodString>;
44
+ storageSize: z.ZodDefault<z.ZodString>;
45
+ resources: z.ZodOptional<z.ZodObject<{
46
+ requests: z.ZodOptional<z.ZodObject<{
47
+ cpu: z.ZodString;
48
+ memory: z.ZodString;
49
+ }, z.core.$strip>>;
50
+ limits: z.ZodOptional<z.ZodObject<{
51
+ cpu: z.ZodString;
52
+ memory: z.ZodString;
53
+ }, z.core.$strip>>;
54
+ }, z.core.$strip>>;
55
+ adapter: z.ZodLiteral<"doks-statefulset">;
56
+ }, z.core.$strip>, z.ZodObject<{
57
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
58
+ maxRetries: z.ZodDefault<z.ZodNumber>;
59
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
60
+ adapter: z.ZodLiteral<"cloudflare-queues">;
61
+ }, z.core.$strip>]>;
62
+ export declare const QueueDescriptorSchema: z.ZodObject<{
63
+ id: z.ZodString;
64
+ name: z.ZodOptional<z.ZodString>;
65
+ description: z.ZodOptional<z.ZodString>;
66
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
67
+ hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
68
+ enabled: z.ZodOptional<z.ZodBoolean>;
69
+ priority: z.ZodOptional<z.ZodNumber>;
70
+ requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
71
+ optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
72
+ kind: z.ZodLiteral<"infra/queue">;
73
+ engine: z.ZodOptional<z.ZodString>;
74
+ topics: z.ZodOptional<z.ZodArray<z.ZodObject<{
75
+ name: z.ZodString;
76
+ partitions: z.ZodOptional<z.ZodNumber>;
77
+ retention: z.ZodOptional<z.ZodString>;
78
+ replication: z.ZodOptional<z.ZodNumber>;
79
+ }, z.core.$strip>>>;
80
+ maxBatchSize: z.ZodOptional<z.ZodNumber>;
81
+ maxRetries: z.ZodOptional<z.ZodNumber>;
82
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
83
+ config: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
84
+ namespace: z.ZodDefault<z.ZodString>;
85
+ storageSize: z.ZodDefault<z.ZodString>;
86
+ resources: z.ZodOptional<z.ZodObject<{
87
+ requests: z.ZodOptional<z.ZodObject<{
88
+ cpu: z.ZodString;
89
+ memory: z.ZodString;
90
+ }, z.core.$strip>>;
91
+ limits: z.ZodOptional<z.ZodObject<{
92
+ cpu: z.ZodString;
93
+ memory: z.ZodString;
94
+ }, z.core.$strip>>;
95
+ }, z.core.$strip>>;
96
+ adapter: z.ZodLiteral<"doks-statefulset">;
97
+ }, z.core.$strip>, z.ZodObject<{
98
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
99
+ maxRetries: z.ZodDefault<z.ZodNumber>;
100
+ deadLetterQueue: z.ZodOptional<z.ZodString>;
101
+ adapter: z.ZodLiteral<"cloudflare-queues">;
102
+ }, z.core.$strip>]>>;
103
+ }, z.core.$strip>;
104
+ export type QueueDescriptor = z.infer<typeof QueueDescriptorSchema>;
105
+ declare class DefaultQueueImplementation {
106
+ readonly descriptor: RuntimeDescriptor;
107
+ readonly context: unknown;
108
+ constructor(descriptor: RuntimeDescriptor, context: unknown);
109
+ get config(): QueueDescriptor;
110
+ }
111
+ export declare const queueKind: RuntimeKindDescriptorRecord<DefaultQueueImplementation>;
112
+ export {};
113
+ //# sourceMappingURL=queue.kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/queue.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAGjF,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB1D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;iBAYhC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;iBAOvC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;mBAG5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,cAAM,0BAA0B;aAEd,UAAU,EAAE,iBAAiB;aAC7B,OAAO,EAAE,OAAO;gBADhB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,OAAO;IAGjC,IAAI,MAAM,IAAI,eAAe,CAE5B;CACD;AAED,eAAO,MAAM,SAAS,yDAMpB,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Kind: infra/queue
3
+ *
4
+ * Describes a message queue system.
5
+ *
6
+ * Schema shape: strict common base + `config` discriminated union.
7
+ *
8
+ * - The base defines fields universal across adapters: id/kind/name +
9
+ * the queue shape (engine, topics, maxBatchSize, maxRetries, deadLetterQueue).
10
+ * - Adapter-specific fields (namespace, storageSize, resources, …) live under
11
+ * `config`. Each adapter package defines its own concrete schema.
12
+ */
13
+ import * as z from 'zod/v4';
14
+ import { createRuntimeKind } from '@vibesdotdev/runtime/factory/kind';
15
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
16
+ import { INFRA_DISCOVERY_PATTERN, extractStem } from "./discovery.js";
17
+ export const QueueTopicSchema = z.object({
18
+ name: z.string().min(1),
19
+ partitions: z.number().int().positive().optional(),
20
+ retention: z.string().optional(),
21
+ replication: z.number().int().positive().optional()
22
+ });
23
+ const QueueBaseSchema = RuntimeDescriptorSchema.extend({
24
+ kind: z.literal('infra/queue'),
25
+ /** Queue engine (e.g., 'cloudflare-queues', 'redpanda'). */
26
+ engine: z.string().min(1).optional(),
27
+ /** Topic / queue declarations. */
28
+ topics: z.array(QueueTopicSchema).optional(),
29
+ /** Maximum batch size. */
30
+ maxBatchSize: z.number().int().positive().optional(),
31
+ /** Maximum retry count. */
32
+ maxRetries: z.number().int().nonnegative().optional(),
33
+ /** Dead-letter queue id. */
34
+ deadLetterQueue: z.string().optional()
35
+ });
36
+ export const DoksQueueConfigSchema = z.object({
37
+ /** Kubernetes namespace (default: vibes). */
38
+ namespace: z.string().min(1).default('vibes'),
39
+ /** Storage size for data volume (default: 10Gi). */
40
+ storageSize: z.string().min(1).default('10Gi'),
41
+ /** Container resources. */
42
+ resources: z
43
+ .object({
44
+ requests: z.object({ cpu: z.string().min(1), memory: z.string().min(1) }).optional(),
45
+ limits: z.object({ cpu: z.string().min(1), memory: z.string().min(1) }).optional()
46
+ })
47
+ .optional()
48
+ });
49
+ export const CloudflareQueuesConfigSchema = z.object({
50
+ /** Maximum batch size per message. */
51
+ maxBatchSize: z.number().int().positive().default(10),
52
+ /** Maximum retry count. */
53
+ maxRetries: z.number().int().nonnegative().default(3),
54
+ /** Dead-letter queue id. */
55
+ deadLetterQueue: z.string().min(1).optional()
56
+ });
57
+ export const QueueConfigSchema = z.union([
58
+ DoksQueueConfigSchema.extend({ adapter: z.literal('doks-statefulset') }),
59
+ CloudflareQueuesConfigSchema.extend({ adapter: z.literal('cloudflare-queues') })
60
+ ]);
61
+ export const QueueDescriptorSchema = QueueBaseSchema.extend({
62
+ /**
63
+ * Adapter-specific configuration. Discriminated union — each adapter
64
+ * package defines its own config schema under its discriminator key.
65
+ */
66
+ config: QueueConfigSchema.optional()
67
+ });
68
+ class DefaultQueueImplementation {
69
+ descriptor;
70
+ context;
71
+ constructor(descriptor, context) {
72
+ this.descriptor = descriptor;
73
+ this.context = context;
74
+ }
75
+ get config() {
76
+ return this.descriptor;
77
+ }
78
+ }
79
+ export const queueKind = createRuntimeKind({
80
+ id: 'infra/queue',
81
+ descriptorSchema: QueueDescriptorSchema,
82
+ defaultImplementation: DefaultQueueImplementation,
83
+ discoveryPattern: INFRA_DISCOVERY_PATTERN,
84
+ extractStem
85
+ });
86
+ //# sourceMappingURL=queue.kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.kind.js","sourceRoot":"","sources":["../../src/kinds/queue.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAGH,MAAM,eAAe,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAE9B,4DAA4D;IAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAEpC,kCAAkC;IAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;IAE5C,0BAA0B;IAC1B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAEpD,2BAA2B;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAErD,4BAA4B;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,6CAA6C;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7C,oDAAoD;IACpD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9C,2BAA2B;IAC3B,SAAS,EAAE,CAAC;SACV,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KAClF,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,sCAAsC;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrD,2BAA2B;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,4BAA4B;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC;IACxC,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACxE,4BAA4B,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;CAChF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,MAAM,CAAC;IAC3D;;;OAGG;IACH,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAIH,MAAM,0BAA0B;IAEd;IACA;IAFjB,YACiB,UAA6B,EAC7B,OAAgB;QADhB,eAAU,GAAV,UAAU,CAAmB;QAC7B,YAAO,GAAP,OAAO,CAAS;IAC9B,CAAC;IAEJ,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,UAA6B,CAAC;IAC3C,CAAC;CACD;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,iBAAiB,CAA8C;IACvF,EAAE,EAAE,aAAa;IACjB,gBAAgB,EAAE,qBAAqB;IACvC,qBAAqB,EAAE,0BAA0B;IACjD,gBAAgB,EAAE,uBAAuB;IACzC,WAAW;CACX,CAAC,CAAC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Infra RUM (Real User Monitoring) Kind
3
+ *
4
+ * Provider-agnostic schema for beacon-based front-end telemetry —
5
+ * page-load timing, Core Web Vitals, navigation timing. Provider impls
6
+ * map this shape onto native services:
7
+ *
8
+ * cloudflare-web-analytics → CF Web Analytics (sites + auto-injection rules)
9
+ * sentry-replay → Sentry Performance + Session Replay
10
+ * plausible → Plausible Analytics
11
+ *
12
+ * The kind decouples *configuration* (which hostnames, which token,
13
+ * which privacy mode) from *delivery* (how the beacon `<script>` tag
14
+ * lands in the HTML). For SvelteKit apps, the
15
+ * `@vibesdotdev/cloudflare-web-analytics` package provides a `handle`
16
+ * hook that injects the beacon via `transformPageChunk` — no
17
+ * per-app `app.html` edits required once the kind is wired in.
18
+ */
19
+ import * as z from 'zod/v4';
20
+ declare const RumPrivacySchema: z.ZodObject<{
21
+ excludeEU: z.ZodDefault<z.ZodBoolean>;
22
+ respectDoNotTrack: z.ZodDefault<z.ZodBoolean>;
23
+ stripQueryParams: z.ZodDefault<z.ZodBoolean>;
24
+ }, z.core.$strip>;
25
+ export type RumPrivacy = z.infer<typeof RumPrivacySchema>;
26
+ /**
27
+ * Where + how the beacon `<script>` lands in the served HTML.
28
+ *
29
+ * app-html → bake the snippet into app.html (manual; pre-Phase 3)
30
+ * sveltekit-hook → injected via `transformPageChunk` in handle hook (preferred)
31
+ * provider-auto → provider auto-injection (CF: only works on non-Worker traffic)
32
+ * custom → caller injects however they want; we just track config
33
+ */
34
+ declare const RumInjectionSchema: z.ZodEnum<{
35
+ "app-html": "app-html";
36
+ "sveltekit-hook": "sveltekit-hook";
37
+ "provider-auto": "provider-auto";
38
+ custom: "custom";
39
+ }>;
40
+ export type RumInjection = z.infer<typeof RumInjectionSchema>;
41
+ declare const RumBaseSchema: z.ZodObject<{
42
+ id: z.ZodString;
43
+ name: z.ZodOptional<z.ZodString>;
44
+ description: z.ZodOptional<z.ZodString>;
45
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
46
+ hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
47
+ priority: z.ZodOptional<z.ZodNumber>;
48
+ requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
51
+ kind: z.ZodLiteral<"infra/rum">;
52
+ adapter: z.ZodString;
53
+ adapterConfig: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
54
+ environment: z.ZodDefault<z.ZodString>;
55
+ siteToken: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
56
+ source: z.ZodLiteral<"secret">;
57
+ key: z.ZodString;
58
+ }, z.core.$strip>]>;
59
+ hostnames: z.ZodDefault<z.ZodArray<z.ZodString>>;
60
+ injection: z.ZodDefault<z.ZodEnum<{
61
+ "app-html": "app-html";
62
+ "sveltekit-hook": "sveltekit-hook";
63
+ "provider-auto": "provider-auto";
64
+ custom: "custom";
65
+ }>>;
66
+ privacy: z.ZodDefault<z.ZodObject<{
67
+ excludeEU: z.ZodDefault<z.ZodBoolean>;
68
+ respectDoNotTrack: z.ZodDefault<z.ZodBoolean>;
69
+ stripQueryParams: z.ZodDefault<z.ZodBoolean>;
70
+ }, z.core.$strip>>;
71
+ enabled: z.ZodDefault<z.ZodBoolean>;
72
+ }, z.core.$strip>;
73
+ export type InfraRumDescriptor = z.infer<typeof RumBaseSchema>;
74
+ export type InfraRumDescriptorInput = z.input<typeof RumBaseSchema>;
75
+ /**
76
+ * Snapshot of a single configured RUM site on the provider. Returned
77
+ * by `listSites`; consumed by the CLI for table rendering and drift
78
+ * detection.
79
+ */
80
+ export interface RumSiteSnapshot {
81
+ /** Provider-assigned site id (CF: site_tag). */
82
+ siteTag: string;
83
+ /** Friendly name (often the apex hostname). */
84
+ name?: string;
85
+ hostnames: string[];
86
+ enabled: boolean;
87
+ injection?: RumInjection;
88
+ /** Page-views captured in the last 24h (when available). */
89
+ pageViews24h?: number;
90
+ createdAt?: string;
91
+ }
92
+ export interface RumImplementation {
93
+ /** Enumerate the configured RUM sites on the provider. */
94
+ listSites(): Promise<RumSiteSnapshot[]>;
95
+ /** Look up a single site by siteTag. */
96
+ getSite(siteTag: string): Promise<RumSiteSnapshot | null>;
97
+ /**
98
+ * Ensure a site exists matching the descriptor; returns the
99
+ * siteTag (provider-assigned id) and whether it was created or
100
+ * already existed.
101
+ */
102
+ ensureSite(descriptor: InfraRumDescriptor): Promise<{
103
+ siteTag: string;
104
+ created: boolean;
105
+ }>;
106
+ /** Toggle enabled state. */
107
+ setEnabled(siteTag: string, enabled: boolean): Promise<void>;
108
+ }
109
+ export declare const rumKind: import("@vibesdotdev/runtime").RuntimeKindDescriptorRecord<RumImplementation>;
110
+ export type InfraRumKind = InfraRumDescriptor;
111
+ export type InfraRumKindInput = InfraRumDescriptorInput;
112
+ export { RumBaseSchema as InfraRumDescriptorSchema, RumPrivacySchema, RumInjectionSchema };
113
+ //# sourceMappingURL=rum.kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rum.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/rum.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAK5B,QAAA,MAAM,gBAAgB;;;;iBAOpB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;GAOG;AACH,QAAA,MAAM,kBAAkB;;;;;EAKtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BjB,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC/D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,0DAA0D;IAC1D,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,wCAAwC;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC1D;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC;QACnD,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KACjB,CAAC,CAAC;IACH,4BAA4B;IAC5B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,OAAO,+EAKlB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAC9C,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD,OAAO,EACN,aAAa,IAAI,wBAAwB,EACzC,gBAAgB,EAChB,kBAAkB,EAClB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Infra RUM (Real User Monitoring) Kind
3
+ *
4
+ * Provider-agnostic schema for beacon-based front-end telemetry —
5
+ * page-load timing, Core Web Vitals, navigation timing. Provider impls
6
+ * map this shape onto native services:
7
+ *
8
+ * cloudflare-web-analytics → CF Web Analytics (sites + auto-injection rules)
9
+ * sentry-replay → Sentry Performance + Session Replay
10
+ * plausible → Plausible Analytics
11
+ *
12
+ * The kind decouples *configuration* (which hostnames, which token,
13
+ * which privacy mode) from *delivery* (how the beacon `<script>` tag
14
+ * lands in the HTML). For SvelteKit apps, the
15
+ * `@vibesdotdev/cloudflare-web-analytics` package provides a `handle`
16
+ * hook that injects the beacon via `transformPageChunk` — no
17
+ * per-app `app.html` edits required once the kind is wired in.
18
+ */
19
+ import * as z from 'zod/v4';
20
+ import { createRuntimeKind } from '@vibesdotdev/runtime/factory/kind';
21
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
22
+ import { INFRA_DISCOVERY_PATTERN, extractStem } from "./discovery.js";
23
+ const RumPrivacySchema = z.object({
24
+ /** Drop EU visitor data at the beacon level (GDPR fast path). */
25
+ excludeEU: z.boolean().default(false),
26
+ /** Honor Do-Not-Track / Global Privacy Control headers. */
27
+ respectDoNotTrack: z.boolean().default(true),
28
+ /** Strip PII (query params, fragments) from reported URLs. */
29
+ stripQueryParams: z.boolean().default(false)
30
+ });
31
+ /**
32
+ * Where + how the beacon `<script>` lands in the served HTML.
33
+ *
34
+ * app-html → bake the snippet into app.html (manual; pre-Phase 3)
35
+ * sveltekit-hook → injected via `transformPageChunk` in handle hook (preferred)
36
+ * provider-auto → provider auto-injection (CF: only works on non-Worker traffic)
37
+ * custom → caller injects however they want; we just track config
38
+ */
39
+ const RumInjectionSchema = z.enum([
40
+ 'app-html',
41
+ 'sveltekit-hook',
42
+ 'provider-auto',
43
+ 'custom'
44
+ ]);
45
+ const RumBaseSchema = RuntimeDescriptorSchema.extend({
46
+ kind: z.literal('infra/rum'),
47
+ adapter: z.string().min(1),
48
+ adapterConfig: z.record(z.string(), z.unknown()).optional(),
49
+ environment: z.string().default('local'),
50
+ /**
51
+ * Public site token (a.k.a. site_tag / beacon token / measurement
52
+ * id). Provider-specific format; safe to commit because it's
53
+ * embedded in client-side HTML for every visitor to see.
54
+ *
55
+ * Pass `{ source: 'secret', key: 'NAME' }` only when the provider
56
+ * explicitly wants a private token — most don't.
57
+ */
58
+ siteToken: z.union([
59
+ z.string().min(1),
60
+ z.object({ source: z.literal('secret'), key: z.string().min(1) })
61
+ ]),
62
+ /** Hostnames the beacon should report from. `*` matches all subdomains. */
63
+ hostnames: z.array(z.string().min(1)).default(['*']),
64
+ injection: RumInjectionSchema.default('sveltekit-hook'),
65
+ privacy: RumPrivacySchema.default(() => ({
66
+ excludeEU: false,
67
+ respectDoNotTrack: true,
68
+ stripQueryParams: false
69
+ })),
70
+ /** Whether the site is currently enabled. Provider impls read+write this. */
71
+ enabled: z.boolean().default(true)
72
+ });
73
+ export const rumKind = createRuntimeKind({
74
+ id: 'infra/rum',
75
+ descriptorSchema: RumBaseSchema,
76
+ discoveryPattern: INFRA_DISCOVERY_PATTERN,
77
+ extractStem
78
+ });
79
+ export { RumBaseSchema as InfraRumDescriptorSchema, RumPrivacySchema, RumInjectionSchema };
80
+ //# sourceMappingURL=rum.kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rum.kind.js","sourceRoot":"","sources":["../../src/kinds/rum.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEtE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,iEAAiE;IACjE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,2DAA2D;IAC3D,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,8DAA8D;IAC9D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC5C,CAAC,CAAC;AAIH;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,QAAQ;CACR,CAAC,CAAC;AAIH,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACpD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC;;;;;;;OAOG;IACH,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;IACF,2EAA2E;IAC3E,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACvD,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,IAAI;QACvB,gBAAgB,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,6EAA6E;IAC7E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAClC,CAAC,CAAC;AAyCH,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAwC;IAC/E,EAAE,EAAE,WAAW;IACf,gBAAgB,EAAE,aAAa;IAC/B,gBAAgB,EAAE,uBAAuB;IACzC,WAAW;CACX,CAAC,CAAC;AAKH,OAAO,EACN,aAAa,IAAI,wBAAwB,EACzC,gBAAgB,EAChB,kBAAkB,EAClB,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Kind: infra/sandbox
3
+ *
4
+ * Persistent isolated execution environment with shell, filesystem, and
5
+ * subprocess capabilities. Used for agent code execution, tool sandboxing,
6
+ * and long-running background tasks.
7
+ *
8
+ * Schema shape: strict common base + `config` discriminated union.
9
+ *
10
+ * - The base defines fields universal across every adapter:
11
+ * id/kind/name + the sandbox shape (entrypoint, image, limits,
12
+ * outboundProxy, liveView, persistent, env).
13
+ * - Adapter-specific fields live under `config`. Each adapter package
14
+ * defines its own concrete schema under its discriminator key.
15
+ */
16
+ import * as z from 'zod/v4';
17
+ import type { RuntimeKindDescriptorRecord } from '@vibesdotdev/runtime/schemas/kind';
18
+ import type { RuntimeDescriptor } from '@vibesdotdev/runtime/schemas/descriptor';
19
+ export declare const SandboxOutboundProxySchema: z.ZodObject<{
20
+ binding: z.ZodString;
21
+ workerPath: z.ZodOptional<z.ZodString>;
22
+ allowedHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
23
+ }, z.core.$strip>;
24
+ export type SandboxOutboundProxy = z.infer<typeof SandboxOutboundProxySchema>;
25
+ export declare const SandboxResourceLimitsSchema: z.ZodObject<{
26
+ cpu: z.ZodOptional<z.ZodString>;
27
+ memory: z.ZodOptional<z.ZodString>;
28
+ disk: z.ZodOptional<z.ZodString>;
29
+ maxSubprocesses: z.ZodOptional<z.ZodNumber>;
30
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
31
+ }, z.core.$strip>;
32
+ export type SandboxResourceLimits = z.infer<typeof SandboxResourceLimitsSchema>;
33
+ export declare const CloudflareSandboxConfigSchema: z.ZodObject<{
34
+ image: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>;
36
+ export declare const DockerSandboxConfigSchema: z.ZodObject<{
37
+ image: z.ZodString;
38
+ volumes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
39
+ }, z.core.$strip>;
40
+ export declare const DigitalOceanDropletSandboxConfigSchema: z.ZodObject<{
41
+ dropletSize: z.ZodString;
42
+ }, z.core.$strip>;
43
+ export declare const SandboxConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
44
+ image: z.ZodOptional<z.ZodString>;
45
+ adapter: z.ZodLiteral<"cloudflare-sandbox">;
46
+ }, z.core.$strip>, z.ZodObject<{
47
+ image: z.ZodString;
48
+ volumes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
49
+ adapter: z.ZodLiteral<"docker">;
50
+ }, z.core.$strip>, z.ZodObject<{
51
+ dropletSize: z.ZodString;
52
+ adapter: z.ZodLiteral<"digitalocean-droplet">;
53
+ }, z.core.$strip>]>;
54
+ export declare const SandboxDescriptorSchema: z.ZodObject<{
55
+ id: z.ZodString;
56
+ name: z.ZodOptional<z.ZodString>;
57
+ description: z.ZodOptional<z.ZodString>;
58
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
59
+ hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
60
+ enabled: z.ZodOptional<z.ZodBoolean>;
61
+ priority: z.ZodOptional<z.ZodNumber>;
62
+ requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
63
+ optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
64
+ kind: z.ZodLiteral<"infra/sandbox">;
65
+ entrypoint: z.ZodOptional<z.ZodString>;
66
+ image: z.ZodOptional<z.ZodString>;
67
+ limits: z.ZodOptional<z.ZodObject<{
68
+ cpu: z.ZodOptional<z.ZodString>;
69
+ memory: z.ZodOptional<z.ZodString>;
70
+ disk: z.ZodOptional<z.ZodString>;
71
+ maxSubprocesses: z.ZodOptional<z.ZodNumber>;
72
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
73
+ }, z.core.$strip>>;
74
+ outboundProxy: z.ZodOptional<z.ZodObject<{
75
+ binding: z.ZodString;
76
+ workerPath: z.ZodOptional<z.ZodString>;
77
+ allowedHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
78
+ }, z.core.$strip>>;
79
+ liveView: z.ZodOptional<z.ZodBoolean>;
80
+ persistent: z.ZodOptional<z.ZodBoolean>;
81
+ env: z.ZodOptional<z.ZodArray<z.ZodObject<{
82
+ name: z.ZodString;
83
+ public: z.ZodOptional<z.ZodBoolean>;
84
+ required: z.ZodOptional<z.ZodBoolean>;
85
+ value: z.ZodOptional<z.ZodString>;
86
+ secret: z.ZodOptional<z.ZodBoolean>;
87
+ description: z.ZodOptional<z.ZodString>;
88
+ storeKey: z.ZodOptional<z.ZodString>;
89
+ }, z.core.$strip>>>;
90
+ config: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
91
+ image: z.ZodOptional<z.ZodString>;
92
+ adapter: z.ZodLiteral<"cloudflare-sandbox">;
93
+ }, z.core.$strip>, z.ZodObject<{
94
+ image: z.ZodString;
95
+ volumes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
96
+ adapter: z.ZodLiteral<"docker">;
97
+ }, z.core.$strip>, z.ZodObject<{
98
+ dropletSize: z.ZodString;
99
+ adapter: z.ZodLiteral<"digitalocean-droplet">;
100
+ }, z.core.$strip>]>>;
101
+ }, z.core.$strip>;
102
+ export type SandboxDescriptor = z.infer<typeof SandboxDescriptorSchema>;
103
+ declare class DefaultSandboxImplementation {
104
+ readonly descriptor: RuntimeDescriptor;
105
+ readonly context: unknown;
106
+ constructor(descriptor: RuntimeDescriptor, context: unknown);
107
+ get config(): SandboxDescriptor;
108
+ }
109
+ export declare const sandboxKind: RuntimeKindDescriptorRecord<DefaultSandboxImplementation>;
110
+ export {};
111
+ //# sourceMappingURL=sandbox.kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/sandbox.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAIjF,eAAO,MAAM,0BAA0B;;;;iBAIrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;iBAMtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AA2BhF,eAAO,MAAM,6BAA6B;;iBAGxC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;iBAKpC,CAAC;AAEH,eAAO,MAAM,sCAAsC;;iBAGjD,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;mBAI9B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,cAAM,4BAA4B;aAEhB,UAAU,EAAE,iBAAiB;aAC7B,OAAO,EAAE,OAAO;gBADhB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,OAAO;IAGjC,IAAI,MAAM,IAAI,iBAAiB,CAE9B;CACD;AAED,eAAO,MAAM,WAAW,2DAMtB,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Kind: infra/sandbox
3
+ *
4
+ * Persistent isolated execution environment with shell, filesystem, and
5
+ * subprocess capabilities. Used for agent code execution, tool sandboxing,
6
+ * and long-running background tasks.
7
+ *
8
+ * Schema shape: strict common base + `config` discriminated union.
9
+ *
10
+ * - The base defines fields universal across every adapter:
11
+ * id/kind/name + the sandbox shape (entrypoint, image, limits,
12
+ * outboundProxy, liveView, persistent, env).
13
+ * - Adapter-specific fields live under `config`. Each adapter package
14
+ * defines its own concrete schema under its discriminator key.
15
+ */
16
+ import * as z from 'zod/v4';
17
+ import { createRuntimeKind } from '@vibesdotdev/runtime/factory/kind';
18
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
19
+ import { deploymentEnvRequirementSchema } from "../schemas.js";
20
+ import { INFRA_DISCOVERY_PATTERN, extractStem } from "./discovery.js";
21
+ export const SandboxOutboundProxySchema = z.object({
22
+ binding: z.string().min(1),
23
+ workerPath: z.string().min(1).optional(),
24
+ allowedHosts: z.array(z.string()).default([])
25
+ });
26
+ export const SandboxResourceLimitsSchema = z.object({
27
+ cpu: z.string().optional(),
28
+ memory: z.string().optional(),
29
+ disk: z.string().optional(),
30
+ maxSubprocesses: z.number().int().positive().optional(),
31
+ timeoutSeconds: z.number().int().positive().optional()
32
+ });
33
+ const SandboxBaseSchema = RuntimeDescriptorSchema.extend({
34
+ kind: z.literal('infra/sandbox'),
35
+ /** Shell or script to run on sandbox start. */
36
+ entrypoint: z.string().optional(),
37
+ /** Container image or template snapshot. */
38
+ image: z.string().optional(),
39
+ /** Resource limits. */
40
+ limits: SandboxResourceLimitsSchema.optional(),
41
+ /** Outbound egress proxy (CF Outbound Workers for Sandboxes). */
42
+ outboundProxy: SandboxOutboundProxySchema.optional(),
43
+ /** Enable Live View for human-in-loop debugging. */
44
+ liveView: z.boolean().optional(),
45
+ /** Persist state between sessions. */
46
+ persistent: z.boolean().optional(),
47
+ /** Environment variable requirements. */
48
+ env: z.array(deploymentEnvRequirementSchema).optional()
49
+ });
50
+ export const CloudflareSandboxConfigSchema = z.object({
51
+ /** Container image or template snapshot. */
52
+ image: z.string().optional()
53
+ });
54
+ export const DockerSandboxConfigSchema = z.object({
55
+ /** Container image. */
56
+ image: z.string(),
57
+ /** Volume mounts (hostPath: containerPath). */
58
+ volumes: z.record(z.string(), z.string()).optional()
59
+ });
60
+ export const DigitalOceanDropletSandboxConfigSchema = z.object({
61
+ /** Droplet size slug (e.g., 's-2vcpu-2gb'). */
62
+ dropletSize: z.string().min(1)
63
+ });
64
+ export const SandboxConfigSchema = z.union([
65
+ CloudflareSandboxConfigSchema.extend({ adapter: z.literal('cloudflare-sandbox') }),
66
+ DockerSandboxConfigSchema.extend({ adapter: z.literal('docker') }),
67
+ DigitalOceanDropletSandboxConfigSchema.extend({ adapter: z.literal('digitalocean-droplet') })
68
+ ]);
69
+ export const SandboxDescriptorSchema = SandboxBaseSchema.extend({
70
+ /**
71
+ * Adapter-specific configuration. Discriminated union — each adapter
72
+ * package defines its own config schema under its discriminator key.
73
+ */
74
+ config: SandboxConfigSchema.optional()
75
+ });
76
+ class DefaultSandboxImplementation {
77
+ descriptor;
78
+ context;
79
+ constructor(descriptor, context) {
80
+ this.descriptor = descriptor;
81
+ this.context = context;
82
+ }
83
+ get config() {
84
+ return this.descriptor;
85
+ }
86
+ }
87
+ export const sandboxKind = createRuntimeKind({
88
+ id: 'infra/sandbox',
89
+ descriptorSchema: SandboxDescriptorSchema,
90
+ defaultImplementation: DefaultSandboxImplementation,
91
+ discoveryPattern: INFRA_DISCOVERY_PATTERN,
92
+ extractStem
93
+ });
94
+ //# sourceMappingURL=sandbox.kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.kind.js","sourceRoot":"","sources":["../../src/kinds/sandbox.kind.ts"],"names":[],"mappings":"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"}