chore: import upstream snapshot with attribution
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
/**
|
||||
* Shared constants for the Sim workspace-event trigger.
|
||||
*
|
||||
* This module is imported from both client code (trigger/block definitions)
|
||||
* and server code (the event emitter), so it must stay free of server-only
|
||||
* dependencies such as the database client.
|
||||
*/
|
||||
|
||||
/** Provider string recorded on webhook rows and execution logs for Sim trigger runs. */
|
||||
export const SIM_TRIGGER_PROVIDER = 'sim'
|
||||
|
||||
/** Trigger ID in the trigger registry. Must equal the block type for pure trigger blocks. */
|
||||
export const SIM_WORKSPACE_EVENT_TRIGGER_ID = 'sim_workspace_event'
|
||||
|
||||
/** Events that fire 1:1 with their source occurrence (no rule evaluation, no cooldown). */
|
||||
export const SIM_PLAIN_EVENT_TYPES = [
|
||||
'execution_success',
|
||||
'execution_error',
|
||||
'workflow_deployed',
|
||||
'workflow_undeployed',
|
||||
] as const
|
||||
|
||||
/** Rule-based events ported from the legacy notification alert rules. */
|
||||
export const SIM_RULE_EVENT_TYPES = [
|
||||
'consecutive_failures',
|
||||
'failure_rate',
|
||||
'latency_threshold',
|
||||
'latency_spike',
|
||||
'cost_threshold',
|
||||
'error_count',
|
||||
'no_activity',
|
||||
] as const
|
||||
|
||||
export const SIM_EVENT_TYPES = [...SIM_PLAIN_EVENT_TYPES, ...SIM_RULE_EVENT_TYPES] as const
|
||||
|
||||
export type SimPlainEventType = (typeof SIM_PLAIN_EVENT_TYPES)[number]
|
||||
export type SimRuleEventType = (typeof SIM_RULE_EVENT_TYPES)[number]
|
||||
export type SimEventType = (typeof SIM_EVENT_TYPES)[number]
|
||||
|
||||
/**
|
||||
* Plain events that ARE a run completing. These carry the run summary fields
|
||||
* (runId, durationMs, cost, finalOutput) at the top level.
|
||||
*/
|
||||
const SIM_PLAIN_RUN_EVENT_TYPES = ['execution_success', 'execution_error'] as const
|
||||
|
||||
/**
|
||||
* Rule events tripped by a run completing. The run is evidence for the
|
||||
* condition rather than the event itself, so its summary nests under
|
||||
* `triggeringRun`. no_activity is excluded — it has no triggering run.
|
||||
*/
|
||||
const SIM_RUN_BACKED_RULE_EVENT_TYPES = SIM_RULE_EVENT_TYPES.filter(
|
||||
(eventType) => eventType !== 'no_activity'
|
||||
)
|
||||
|
||||
export function isSimRuleEventType(eventType: string): eventType is SimRuleEventType {
|
||||
return (SIM_RULE_EVENT_TYPES as readonly string[]).includes(eventType)
|
||||
}
|
||||
|
||||
/** Cooldown between firings of the same rule-based subscription. */
|
||||
export const SIM_RULE_COOLDOWN_HOURS = 1
|
||||
|
||||
/** Minimum executions in the window before rate-based rules can fire. */
|
||||
export const SIM_MIN_EXECUTIONS_FOR_RATE_RULES = 5
|
||||
|
||||
/** Default values for rule configuration subblocks, ported from the legacy alert rules. */
|
||||
export const SIM_RULE_DEFAULTS = {
|
||||
consecutiveFailures: 3,
|
||||
failureRatePercent: 50,
|
||||
windowHours: 24,
|
||||
durationThresholdMs: 30000,
|
||||
latencySpikePercent: 100,
|
||||
/** 200 credits = $1 (1 credit = $0.005). */
|
||||
costThresholdCredits: 200,
|
||||
errorCountThreshold: 10,
|
||||
inactivityHours: 24,
|
||||
} as const
|
||||
|
||||
/** Maximum serialized size of the finalOutput payload field. */
|
||||
export const SIM_FINAL_OUTPUT_MAX_BYTES = 64 * 1024
|
||||
|
||||
interface SimEventPayloadFieldCondition {
|
||||
field: 'eventType'
|
||||
value: SimEventType | SimEventType[]
|
||||
}
|
||||
|
||||
interface SimEventPayloadField {
|
||||
type: 'string' | 'number' | 'json' | 'boolean'
|
||||
description: string
|
||||
/** Restricts which event types surface this field in the tag dropdown. */
|
||||
condition?: SimEventPayloadFieldCondition
|
||||
/** Nested fields for json outputs, surfaced as dotted paths in the tag dropdown. */
|
||||
properties?: Record<string, { type: 'string' | 'number' | 'json'; description: string }>
|
||||
}
|
||||
|
||||
/** Run summary fields shared by top-level plain events and the nested triggeringRun. */
|
||||
const RUN_SUMMARY_FIELDS = {
|
||||
runId: {
|
||||
type: 'string',
|
||||
description: 'The source run ID',
|
||||
},
|
||||
durationMs: {
|
||||
type: 'number',
|
||||
description: 'Source run duration in milliseconds',
|
||||
},
|
||||
cost: {
|
||||
type: 'number',
|
||||
description: 'Source run cost in credits',
|
||||
},
|
||||
finalOutput: {
|
||||
type: 'json',
|
||||
description: 'Final output of the source run (truncated when large)',
|
||||
},
|
||||
} as const
|
||||
|
||||
/**
|
||||
* Canonical payload shape delivered to Sim trigger workflows.
|
||||
*
|
||||
* The trigger's declared outputs and the runtime payload builder both derive
|
||||
* from this map so the tag dropdown and the actual payload can never drift
|
||||
* (enforced by tests on both sides). Conditions narrow the tag dropdown to
|
||||
* the fields that are meaningful for the selected event type; the runtime
|
||||
* payload always carries every key (null where not applicable).
|
||||
*/
|
||||
export const SIM_EVENT_PAYLOAD_FIELDS = {
|
||||
event: {
|
||||
type: 'string',
|
||||
description: 'The workspace event type that fired this trigger',
|
||||
},
|
||||
timestamp: {
|
||||
type: 'string',
|
||||
description: 'Event timestamp in ISO format',
|
||||
},
|
||||
workflowId: {
|
||||
type: 'string',
|
||||
description: 'The source workflow ID',
|
||||
},
|
||||
workflowName: {
|
||||
type: 'string',
|
||||
description: 'The source workflow name',
|
||||
},
|
||||
runId: {
|
||||
...RUN_SUMMARY_FIELDS.runId,
|
||||
condition: { field: 'eventType', value: [...SIM_PLAIN_RUN_EVENT_TYPES] },
|
||||
},
|
||||
durationMs: {
|
||||
...RUN_SUMMARY_FIELDS.durationMs,
|
||||
condition: { field: 'eventType', value: [...SIM_PLAIN_RUN_EVENT_TYPES] },
|
||||
},
|
||||
cost: {
|
||||
...RUN_SUMMARY_FIELDS.cost,
|
||||
condition: { field: 'eventType', value: [...SIM_PLAIN_RUN_EVENT_TYPES] },
|
||||
},
|
||||
finalOutput: {
|
||||
...RUN_SUMMARY_FIELDS.finalOutput,
|
||||
condition: { field: 'eventType', value: [...SIM_PLAIN_RUN_EVENT_TYPES] },
|
||||
},
|
||||
triggeringRun: {
|
||||
type: 'json',
|
||||
description: 'The run that tripped this condition',
|
||||
condition: { field: 'eventType', value: [...SIM_RUN_BACKED_RULE_EVENT_TYPES] },
|
||||
properties: RUN_SUMMARY_FIELDS,
|
||||
},
|
||||
version: {
|
||||
type: 'number',
|
||||
description: 'The deployment version number that was activated',
|
||||
condition: { field: 'eventType', value: 'workflow_deployed' },
|
||||
},
|
||||
} as const satisfies Record<string, SimEventPayloadField>
|
||||
|
||||
export type SimEventPayloadFieldKey = keyof typeof SIM_EVENT_PAYLOAD_FIELDS
|
||||
Reference in New Issue
Block a user