- Dark Provenance whitepaper: complete sections 2-6 (What Is Dark Provenance, The Speckl Approach, Semantic Preservation & SA-11, Implications, Call to Action) - README: public launch-ready with architecture, roadmap, getting started - SpeckDL SPEC.md: v0.1 language specification with EBNF grammar, type system, compilation pipeline, 5 example Specks - Reference agent: TypeScript scaffold with Orchestrator, TeamLead, SMEs (VerificationSME, CodegenSME), TillDone condition tracking, ProvenanceGraph, and CLI with example Specks
157 lines
No EOL
4.1 KiB
TypeScript
157 lines
No EOL
4.1 KiB
TypeScript
/**
|
|
* Speckl Reference Agent Architecture
|
|
*
|
|
* Core types and protocols for the tiered agent harness.
|
|
* Orchestrator → Team Lead → SME hierarchy with TillDone condition tracking.
|
|
*/
|
|
|
|
// ─── Speck Types ────────────────────────────────────────────
|
|
|
|
export interface SpeckDefinition {
|
|
name: string;
|
|
input: Record<string, SpeckType>;
|
|
output: SpeckType;
|
|
constraints: Constraint[];
|
|
verify: VerifyCondition[];
|
|
events?: EventDef[];
|
|
imports?: ImportRef[];
|
|
interface?: string;
|
|
}
|
|
|
|
export type SpeckType =
|
|
| PrimitiveType
|
|
| RecordType
|
|
| ListType
|
|
| NamedType;
|
|
|
|
export type PrimitiveType = "Nat" | "Int" | "Real" | "Bool" | "String" | "Bytes";
|
|
|
|
export interface RecordType {
|
|
kind: "record";
|
|
fields: Record<string, SpeckType>;
|
|
}
|
|
|
|
export interface ListType {
|
|
kind: "list";
|
|
element: SpeckType;
|
|
}
|
|
|
|
export interface NamedType {
|
|
kind: "named";
|
|
name: string;
|
|
typeArgs?: SpeckType[];
|
|
}
|
|
|
|
export interface Constraint {
|
|
id: string;
|
|
expression: string; // SpeckDL expression text
|
|
compiledToZ3?: string; // SMT-LIB2 assertion
|
|
}
|
|
|
|
export interface VerifyCondition {
|
|
id: string;
|
|
kind: "always" | "eventually" | "implies";
|
|
expression: string;
|
|
proven?: boolean;
|
|
counterexample?: Record<string, unknown>;
|
|
}
|
|
|
|
export interface EventDef {
|
|
name: string;
|
|
fields: Record<string, SpeckType>;
|
|
}
|
|
|
|
export interface ImportRef {
|
|
path: string;
|
|
alias?: string;
|
|
}
|
|
|
|
// ─── Agent Protocol ─────────────────────────────────────────
|
|
|
|
export type TaskStatus = "pending" | "in_progress" | "blocked" | "completed" | "failed";
|
|
|
|
export interface TaskMessage {
|
|
id: string;
|
|
type: "task_assign" | "task_result" | "task_blocked" | "task_failed";
|
|
from: AgentId;
|
|
to: AgentId;
|
|
payload: TaskPayload;
|
|
timestamp: string; // ISO 8601
|
|
provenance: ProvenanceEdge[];
|
|
}
|
|
|
|
export interface TaskPayload {
|
|
task: Task;
|
|
speck?: SpeckDefinition;
|
|
context?: Record<string, unknown>;
|
|
}
|
|
|
|
export interface Task {
|
|
id: string;
|
|
speckName: string;
|
|
taskType: TaskType;
|
|
description: string;
|
|
priority: number;
|
|
parentTaskId?: string;
|
|
createdAt: string;
|
|
}
|
|
|
|
export type TaskType =
|
|
| "verify_speck" // Run Z3 verification on a Speck
|
|
| "compile_to_dst" // Compile verified Speck to DST
|
|
| "compile_to_wasm" // Compile DST to WASM
|
|
| "generate_code" // Generate code from verified Speck
|
|
| "generate_docs" // Generate documentation from provenance graph
|
|
| "integrate" // Integration/glue code
|
|
| "review" // Human review checkpoint
|
|
;
|
|
|
|
export interface AgentId {
|
|
type: "orchestrator" | "team_lead" | "sme";
|
|
name: string;
|
|
specialization?: string;
|
|
}
|
|
|
|
export interface ProvenanceEdge {
|
|
source: string; // URI or ID of the source artifact
|
|
target: string; // URI or ID of the derived artifact
|
|
relation: string; // "compiled_to" | "verified_by" | "generated_from" | "derived_from"
|
|
tool: string; // Tool that created this edge
|
|
timestamp: string;
|
|
metadata?: Record<string, unknown>;
|
|
}
|
|
|
|
// ─── TillDone Condition Tracking ─────────────────────────────
|
|
|
|
export interface TillDoneCondition {
|
|
taskId: string;
|
|
description: string;
|
|
predicate: (result: TaskResult) => boolean;
|
|
isDone: boolean;
|
|
}
|
|
|
|
export interface TaskResult {
|
|
taskId: string;
|
|
status: "success" | "failure";
|
|
output?: unknown;
|
|
provenance: ProvenanceEdge[];
|
|
completedAt: string;
|
|
}
|
|
|
|
// ─── Provenance Graph ───────────────────────────────────────
|
|
|
|
export interface ProvenanceNode {
|
|
id: string;
|
|
type: "speck" | "z3_assertion" | "dst" | "wasm" | "code" | "docs" | "event";
|
|
label: string;
|
|
metadata: Record<string, unknown>;
|
|
}
|
|
|
|
export interface ProvenanceGraph {
|
|
nodes: Map<string, ProvenanceNode>;
|
|
edges: ProvenanceEdge[];
|
|
addNode(node: ProvenanceNode): void;
|
|
addEdge(edge: ProvenanceEdge): void;
|
|
query(source?: string, relation?: string, target?: string): ProvenanceEdge[];
|
|
toJSON(): object;
|
|
} |