planning
Interfaces
Section titled “Interfaces”AssemblyPolicy
Section titled “AssemblyPolicy”Defined in: packages/sage/src/planning/assembly.ts:49
Policy for assembling an unsigned transaction from one Plan.
Example
Section titled “Example”declare const feePayer: Address;const policy: AssemblyPolicy = { feePayer, computeUnitLimit: 400_000 };Properties
Section titled “Properties”commitment?
Section titled “commitment?”readonly optional commitment?: Commitment;Defined in: packages/sage/src/planning/assembly.ts:53
computeUnitLimit?
Section titled “computeUnitLimit?”readonly optional computeUnitLimit?: number;Defined in: packages/sage/src/planning/assembly.ts:51
feePayer
Section titled “feePayer”readonly feePayer: Address;Defined in: packages/sage/src/planning/assembly.ts:50
priorityFeeMicroLamports?
Section titled “priorityFeeMicroLamports?”readonly optional priorityFeeMicroLamports?: bigint;Defined in: packages/sage/src/planning/assembly.ts:52
ConfirmedPlanExecution
Section titled “ConfirmedPlanExecution”Defined in: packages/sage/src/planning/execution.ts:73
A transaction confirmed at the requested commitment.
Example
Section titled “Example”declare const result: ConfirmedPlanExecution;console.log(result.signature, result.slot);Properties
Section titled “Properties”commitment
Section titled “commitment”readonly commitment: Commitment;Defined in: packages/sage/src/planning/execution.ts:77
signature
Section titled “signature”readonly signature: Signature;Defined in: packages/sage/src/planning/execution.ts:75
readonly slot: bigint;Defined in: packages/sage/src/planning/execution.ts:76
status
Section titled “status”readonly status: "confirmed";Defined in: packages/sage/src/planning/execution.ts:74
CreatePlanInput
Section titled “CreatePlanInput”Defined in: packages/sage/src/planning/index.ts:205
Caller-owned fields accepted by the Plan factory.
affected and requiredSigners are intentionally absent because the
factory derives them from writable metas and ordered step signers.
Example
Section titled “Example”declare const step: PlanStep;const input: CreatePlanInput = { kind: 'fleet.move', summary: 'Move the fleet.', steps: [step], preconditions: [],};Properties
Section titled “Properties”readonly kind: string;Defined in: packages/sage/src/planning/index.ts:206
preconditions
Section titled “preconditions”readonly preconditions: readonly PlanPrecondition[];Defined in: packages/sage/src/planning/index.ts:209
readonly steps: readonly PlanStep[];Defined in: packages/sage/src/planning/index.ts:208
summary
Section titled “summary”readonly summary: string;Defined in: packages/sage/src/planning/index.ts:207
CreatePlanSequenceInput
Section titled “CreatePlanSequenceInput”Defined in: packages/sage/src/planning/plan-sequence.ts:111
Exact caller-owned input accepted by createPlanSequence.
Example
Section titled “Example”declare const step: PlanSequenceStep;const input: CreatePlanSequenceInput = { cluster: 'zink-ptr', sequenceId: 'fleet-round-trip', revision: 0, steps: [step],};Properties
Section titled “Properties”cluster
Section titled “cluster”readonly cluster: ClusterIdentity;Defined in: packages/sage/src/planning/plan-sequence.ts:112
revision
Section titled “revision”readonly revision: number;Defined in: packages/sage/src/planning/plan-sequence.ts:114
sequenceId
Section titled “sequenceId”readonly sequenceId: string;Defined in: packages/sage/src/planning/plan-sequence.ts:113
readonly steps: readonly PlanSequenceStep[];Defined in: packages/sage/src/planning/plan-sequence.ts:115
ExecutePlanOptions
Section titled “ExecutePlanOptions”Defined in: packages/sage/src/planning/execution.ts:55
Options for signing, submitting, confirming, and reconciling one Plan.
Example
Section titled “Example”import type { TransactionSigner } from '@solana/kit';
declare const feePayer: TransactionSigner;const options: ExecutePlanOptions = { feePayer };Properties
Section titled “Properties”commitment?
Section titled “commitment?”readonly optional commitment?: Commitment;Defined in: packages/sage/src/planning/execution.ts:60
computeUnitLimit?
Section titled “computeUnitLimit?”readonly optional computeUnitLimit?: number;Defined in: packages/sage/src/planning/execution.ts:58
feePayer
Section titled “feePayer”readonly feePayer: TransactionSigner;Defined in: packages/sage/src/planning/execution.ts:56
pollIntervalMs?
Section titled “pollIntervalMs?”readonly optional pollIntervalMs?: number;Defined in: packages/sage/src/planning/execution.ts:62
priorityFeeMicroLamports?
Section titled “priorityFeeMicroLamports?”readonly optional priorityFeeMicroLamports?: bigint;Defined in: packages/sage/src/planning/execution.ts:59
signers?
Section titled “signers?”readonly optional signers?: readonly TransactionSigner[];Defined in: packages/sage/src/planning/execution.ts:57
timeoutMs?
Section titled “timeoutMs?”readonly optional timeoutMs?: number;Defined in: packages/sage/src/planning/execution.ts:61
ExecutePlanSequenceOptions
Section titled “ExecutePlanSequenceOptions”Defined in: packages/sage/src/planning/plan-sequence-execution.ts:74
Inputs for one fail-closed PlanSequence execution or resume invocation.
The commitment is restricted to rollback-safe confirmed or finalized
evidence. Cancellation is observed only between steps.
Example
Section titled “Example”declare const feePayer: ExecutePlanSequenceOptions['feePayer'];declare const store: PlanSequenceStore;const options: ExecutePlanSequenceOptions = { feePayer, store };Extends
Section titled “Extends”Omit<ExecutePlanOptions,"commitment">
Properties
Section titled “Properties”commitment?
Section titled “commitment?”readonly optional commitment?: "confirmed" | "finalized";Defined in: packages/sage/src/planning/plan-sequence-execution.ts:78
computeUnitLimit?
Section titled “computeUnitLimit?”readonly optional computeUnitLimit?: number;Defined in: packages/sage/src/planning/execution.ts:58
Inherited from
Section titled “Inherited from”ExecutePlanOptions.computeUnitLimit
feePayer
Section titled “feePayer”readonly feePayer: TransactionSigner;Defined in: packages/sage/src/planning/execution.ts:56
Inherited from
Section titled “Inherited from”onBeforeSign?
Section titled “onBeforeSign?”readonly optional onBeforeSign?: (presentation) => Promise<void>;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:81
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
presentation | PlanSequencePresentation |
Returns
Section titled “Returns”Promise<void>
pollIntervalMs?
Section titled “pollIntervalMs?”readonly optional pollIntervalMs?: number;Defined in: packages/sage/src/planning/execution.ts:62
Inherited from
Section titled “Inherited from”ExecutePlanOptions.pollIntervalMs
priorityFeeMicroLamports?
Section titled “priorityFeeMicroLamports?”readonly optional priorityFeeMicroLamports?: bigint;Defined in: packages/sage/src/planning/execution.ts:59
Inherited from
Section titled “Inherited from”ExecutePlanOptions.priorityFeeMicroLamports
signal?
Section titled “signal?”readonly optional signal?: AbortSignal;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:80
signers?
Section titled “signers?”readonly optional signers?: readonly TransactionSigner[];Defined in: packages/sage/src/planning/execution.ts:57
Inherited from
Section titled “Inherited from”readonly store: PlanSequenceStore;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:79
timeoutMs?
Section titled “timeoutMs?”readonly optional timeoutMs?: number;Defined in: packages/sage/src/planning/execution.ts:61
Inherited from
Section titled “Inherited from”Defined in: packages/sage/src/planning/index.ts:177
Inert, inspectable action data built only through planning factories.
Example
Section titled “Example”declare const plan: Plan;console.log(plan.summary);console.log(plan.describe());Properties
Section titled “Properties”[PLAN_BRAND]
Section titled “[PLAN_BRAND]”readonly [PLAN_BRAND]: true;Defined in: packages/sage/src/planning/index.ts:186
affected
Section titled “affected”readonly affected: readonly Address[];Defined in: packages/sage/src/planning/index.ts:182
readonly kind: string;Defined in: packages/sage/src/planning/index.ts:178
preconditions
Section titled “preconditions”readonly preconditions: readonly PlanPrecondition[];Defined in: packages/sage/src/planning/index.ts:181
requiredSigners
Section titled “requiredSigners”readonly requiredSigners: readonly Address[];Defined in: packages/sage/src/planning/index.ts:183
readonly steps: readonly PlanStep[];Defined in: packages/sage/src/planning/index.ts:180
summary
Section titled “summary”readonly summary: string;Defined in: packages/sage/src/planning/index.ts:179
Methods
Section titled “Methods”describe()
Section titled “describe()”describe(): readonly string[];Defined in: packages/sage/src/planning/index.ts:184
Returns
Section titled “Returns”readonly string[]
toJSON()
Section titled “toJSON()”toJSON(): | PlanJsonV1 | PlanJsonV2;Defined in: packages/sage/src/planning/index.ts:185
Returns
Section titled “Returns”| PlanJsonV1
| PlanJsonV2
PlanJsonV1
Section titled “PlanJsonV1”Defined in: packages/sage/src/planning/index.ts:101
The complete persistent wire representation of a Plan.
Example
Section titled “Example”declare const wire: PlanJsonV1;console.log(wire.v); // 1Properties
Section titled “Properties”affected
Section titled “affected”readonly affected: readonly string[];Defined in: packages/sage/src/planning/index.ts:124
readonly kind: string;Defined in: packages/sage/src/planning/index.ts:103
preconditions
Section titled “preconditions”readonly preconditions: readonly { address: string; dataHash: string; describes: string; kind: "account-state";}[];Defined in: packages/sage/src/planning/index.ts:118
requiredSigners
Section titled “requiredSigners”readonly requiredSigners: readonly string[];Defined in: packages/sage/src/planning/index.ts:125
readonly steps: readonly { describes: string; instruction: { accounts?: readonly { address: string; role: AccountRole; }[]; data?: string; programAddress: string; }; signers: readonly string[];}[];Defined in: packages/sage/src/planning/index.ts:105
summary
Section titled “summary”readonly summary: string;Defined in: packages/sage/src/planning/index.ts:104
readonly v: 1;Defined in: packages/sage/src/planning/index.ts:102
PlanJsonV2
Section titled “PlanJsonV2”Defined in: packages/sage/src/planning/index.ts:140
The version-two Plan wire representation for semantic-bearing steps.
Version two retains every version-one top-level field and adds optional normalized semantic facts to individual steps.
Example
Section titled “Example”declare const plan: Plan;const wire: PlanJsonV1 | PlanJsonV2 = plan.toJSON();if (wire.v === 2) console.log(wire.steps[0]?.semantics);Properties
Section titled “Properties”affected
Section titled “affected”readonly affected: readonly string[];Defined in: packages/sage/src/planning/index.ts:164
readonly kind: string;Defined in: packages/sage/src/planning/index.ts:142
preconditions
Section titled “preconditions”readonly preconditions: readonly { address: string; dataHash: string; describes: string; kind: "account-state";}[];Defined in: packages/sage/src/planning/index.ts:158
requiredSigners
Section titled “requiredSigners”readonly requiredSigners: readonly string[];Defined in: packages/sage/src/planning/index.ts:165
readonly steps: readonly { describes: string; instruction: { accounts?: readonly { address: string; role: AccountRole; }[]; data?: string; programAddress: string; }; semantics?: readonly PlanSemanticFact[]; signers: readonly string[];}[];Defined in: packages/sage/src/planning/index.ts:144
summary
Section titled “summary”readonly summary: string;Defined in: packages/sage/src/planning/index.ts:143
readonly v: 2;Defined in: packages/sage/src/planning/index.ts:141
PlanPrecondition
Section titled “PlanPrecondition”Defined in: packages/sage/src/planning/index.ts:86
A closure-free whole-account freshness guard recorded at planning time.
Example
Section titled “Example”declare const precondition: PlanPrecondition;console.log(precondition.address, precondition.dataHash);Properties
Section titled “Properties”address
Section titled “address”readonly address: Address;Defined in: packages/sage/src/planning/index.ts:88
dataHash
Section titled “dataHash”readonly dataHash: string;Defined in: packages/sage/src/planning/index.ts:89
describes
Section titled “describes”readonly describes: string;Defined in: packages/sage/src/planning/index.ts:90
readonly kind: "account-state";Defined in: packages/sage/src/planning/index.ts:87
PlanSequence
Section titled “PlanSequence”Defined in: packages/sage/src/planning/plan-sequence.ts:129
Inert, immutable itinerary with cluster-bound resume identity.
describe() names stable step identities only. Each actual Plan remains
lazy and must be presented separately when fresh authorization is requested.
Example
Section titled “Example”declare const sequence: PlanSequence;console.log(sequence.fingerprint, sequence.describe());Properties
Section titled “Properties”cluster
Section titled “cluster”readonly cluster: ClusterIdentity;Defined in: packages/sage/src/planning/plan-sequence.ts:130
fingerprint
Section titled “fingerprint”readonly fingerprint: PlanSequenceFingerprint;Defined in: packages/sage/src/planning/plan-sequence.ts:134
revision
Section titled “revision”readonly revision: number;Defined in: packages/sage/src/planning/plan-sequence.ts:132
sequenceId
Section titled “sequenceId”readonly sequenceId: string;Defined in: packages/sage/src/planning/plan-sequence.ts:131
readonly steps: readonly PlanSequenceStep[];Defined in: packages/sage/src/planning/plan-sequence.ts:133
Methods
Section titled “Methods”describe()
Section titled “describe()”describe(): readonly string[];Defined in: packages/sage/src/planning/plan-sequence.ts:135
Returns
Section titled “Returns”readonly string[]
PlanSequenceCheckpointV1
Section titled “PlanSequenceCheckpointV1”Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:85
Version-one caller-persisted Plan sequence checkpoint.
The value is exact-key, recursively frozen, and JSON-safe. It contains only stable sequence identity, confirmed public evidence, current write-ahead state, and caller-supplied local observation time.
Example
Section titled “Example”declare const sequence: PlanSequence;declare const callerOwnedStore: { save(value: string): Promise<void> };const checkpoint: PlanSequenceCheckpointV1 = createPlanSequenceCheckpoint( sequence, '2026-08-28T12:00:00.000Z',);await callerOwnedStore.save(stringifyPlanSequenceCheckpoint(checkpoint));Properties
Section titled “Properties”attempt?
Section titled “attempt?”readonly optional attempt?: PlanSequenceCheckpointAttemptV1;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:94
cluster
Section titled “cluster”readonly cluster: ClusterIdentity;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:88
confirmed
Section titled “confirmed”readonly confirmed: readonly PlanSequenceConfirmedStepV1[];Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:93
fingerprint
Section titled “fingerprint”readonly fingerprint: PlanSequenceFingerprint;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:87
nextStepIndex
Section titled “nextStepIndex”readonly nextStepIndex: number;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:92
observedAt
Section titled “observedAt”readonly observedAt: string;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:95
revision
Section titled “revision”readonly revision: number;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:90
sequenceId
Section titled “sequenceId”readonly sequenceId: string;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:89
stepIds
Section titled “stepIds”readonly stepIds: readonly string[];Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:91
readonly v: 1;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:86
PlanSequenceConfirmedStepV1
Section titled “PlanSequenceConfirmedStepV1”Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:28
Persisted public confirmation evidence for one completed sequence step.
Slots use canonical unsigned decimal strings so checkpoint values remain directly JSON-serializable without losing integer precision.
Example
Section titled “Example”declare const confirmed: PlanSequenceConfirmedStepV1;console.log(confirmed.stepId, confirmed.slot);Properties
Section titled “Properties”commitment
Section titled “commitment”readonly commitment: "confirmed" | "finalized";Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:33
readonly index: number;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:30
signature
Section titled “signature”readonly signature: Signature;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:31
readonly slot: string;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:32
stepId
Section titled “stepId”readonly stepId: string;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:29
PlanSequencePresentation
Section titled “PlanSequencePresentation”Defined in: packages/sage/src/planning/plan-sequence-execution.ts:55
Fresh single-transaction authorization detail presented before signing.
Example
Section titled “Example”declare const presentation: PlanSequencePresentation;console.log(presentation.stepId, presentation.description);Properties
Section titled “Properties”description
Section titled “description”readonly description: readonly string[];Defined in: packages/sage/src/planning/plan-sequence-execution.ts:59
readonly index: number;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:57
readonly plan: Plan;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:58
stepId
Section titled “stepId”readonly stepId: string;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:56
PlanSequenceStep
Section titled “PlanSequenceStep”Defined in: packages/sage/src/planning/plan-sequence.ts:93
One stable lazy step in a Plan sequence.
The callback may close over capability context. It creates no Plan until the caller reaches this step and invokes it with current progress.
Example
Section titled “Example”declare const plan: Plan;const step: PlanSequenceStep = { id: 'undock', prepare: async () => ({ status: 'ready', plan }),};Properties
Section titled “Properties”readonly id: string;Defined in: packages/sage/src/planning/plan-sequence.ts:94
Methods
Section titled “Methods”prepare()
Section titled “prepare()”prepare(context): Promise<PlanSequenceReadiness>;Defined in: packages/sage/src/planning/plan-sequence.ts:95
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
context | PlanSequenceStepContext |
Returns
Section titled “Returns”Promise<PlanSequenceReadiness>
PlanSequenceStore
Section titled “PlanSequenceStore”Defined in: packages/sage/src/planning/plan-sequence-execution.ts:43
Caller-owned durable checkpoint boundary.
Resolution of save() acknowledges that the checkpoint is durable. The SDK
never signs or enters a submission boundary until the required save resolves.
Example
Section titled “Example”const store: PlanSequenceStore = { save: async (checkpoint) => localStorage.setItem('journey', JSON.stringify(checkpoint)),};Methods
Section titled “Methods”save()
Section titled “save()”save(checkpoint): Promise<void>;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:44
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
checkpoint | PlanSequenceCheckpointV1 |
Returns
Section titled “Returns”Promise<void>
PlanStep
Section titled “PlanStep”Defined in: packages/sage/src/planning/index.ts:71
One ordered instruction and its game-language signer requirements.
Example
Section titled “Example”declare const step: PlanStep;console.log(step.describes, step.signers);Properties
Section titled “Properties”describes
Section titled “describes”readonly describes: string;Defined in: packages/sage/src/planning/index.ts:73
instruction
Section titled “instruction”readonly instruction: Instruction<string, readonly AccountMeta<string>[]>;Defined in: packages/sage/src/planning/index.ts:72
semantics?
Section titled “semantics?”readonly optional semantics?: readonly PlanSemanticFact[];Defined in: packages/sage/src/planning/index.ts:74
signers
Section titled “signers”readonly signers: readonly Address[];Defined in: packages/sage/src/planning/index.ts:75
SimulationResult
Section titled “SimulationResult”Defined in: packages/sage/src/planning/simulation.ts:39
Node-provenance result from simulating one unsigned Plan.
Example
Section titled “Example”declare const result: SimulationResult;console.log(result.slot, result.replacementBlockhash.blockhash);Properties
Section titled “Properties”readonly logs: readonly string[];Defined in: packages/sage/src/planning/simulation.ts:42
replacementBlockhash
Section titled “replacementBlockhash”readonly replacementBlockhash: Readonly<{ blockhash: string; lastValidBlockHeight: bigint;}>;Defined in: packages/sage/src/planning/simulation.ts:44
returnData?
Section titled “returnData?”readonly optional returnData?: SimulationReturnData;Defined in: packages/sage/src/planning/simulation.ts:43
readonly slot: bigint;Defined in: packages/sage/src/planning/simulation.ts:40
unitsConsumed
Section titled “unitsConsumed”readonly unitsConsumed: bigint | undefined;Defined in: packages/sage/src/planning/simulation.ts:41
SimulationReturnData
Section titled “SimulationReturnData”Defined in: packages/sage/src/planning/simulation.ts:26
Return data emitted by the last program to set it during simulation.
Example
Section titled “Example”declare const returnData: SimulationReturnData;console.log(returnData.programAddress, returnData.data);Properties
Section titled “Properties”readonly data: string;Defined in: packages/sage/src/planning/simulation.ts:28
programAddress
Section titled “programAddress”readonly programAddress: Address;Defined in: packages/sage/src/planning/simulation.ts:27
Type Aliases
Section titled “Type Aliases”ConfirmedStep
Section titled “ConfirmedStep”type ConfirmedStep = Readonly<{ commitment: "confirmed" | "finalized"; index: number; signature: Signature; slot: bigint; stepId: string;}>;Defined in: packages/sage/src/planning/plan-sequence.ts:37
Public confirmation evidence available to later lazy step preparation.
Example
Section titled “Example”declare const confirmed: ConfirmedStep;console.log(confirmed.stepId, confirmed.signature);PlanExecutionResult
Section titled “PlanExecutionResult”type PlanExecutionResult = | ConfirmedPlanExecution | UnknownPlanExecution;Defined in: packages/sage/src/planning/execution.ts:113
Every non-throwing terminal outcome from executePlan.
Example
Section titled “Example”declare const result: PlanExecutionResult;if (result.status === 'unknown') console.log(result.signature);PlanSemanticFact
Section titled “PlanSemanticFact”type PlanSemanticFact = | { fact: string; kind: "requires"; resource: string;} | { fact: string; kind: "invalidates"; resource: string;} | { from: string; kind: "transition"; resource: string; to: string;};Defined in: packages/sage/src/planning/index.ts:45
One capability-authored opaque fact used to review Plan composition.
The planning core preserves these exact strings without interpreting capability vocabulary or inferring negation conventions.
Example
Section titled “Example”const fact: PlanSemanticFact = { kind: 'requires', resource: 'fleet:Ravager', fact: 'idle',};PlanSequenceCheckpointAttemptV1
Section titled “PlanSequenceCheckpointAttemptV1”type PlanSequenceCheckpointAttemptV1 = | Readonly<{ index: number; phase: "prepared"; signerMode: "observable" | "opaque"; stepId: string;}> | Readonly<{ index: number; phase: "signed"; signature: Signature; signerMode: "observable"; stepId: string;}> | Readonly<{ index: number; phase: "invoking"; signerMode: "opaque"; stepId: string;}>;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:47
One durable write-ahead attempt at the checkpoint’s next step.
Observable signers persist signed with their public signature. Opaque
combined sign/send signers persist invoking before entering that boundary.
Example
Section titled “Example”declare const attempt: PlanSequenceCheckpointAttemptV1;console.log(attempt.stepId, attempt.phase);PlanSequenceErrorCode
Section titled “PlanSequenceErrorCode”type PlanSequenceErrorCode = | "SEQUENCE_IDENTITY_MISMATCH" | "SEQUENCE_CHECKPOINT_INVALID" | "SEQUENCE_CONFIRMATION_UNVERIFIABLE" | "SEQUENCE_ATTEMPT_UNRESOLVED" | "SEQUENCE_PREPARATION_FAILED" | "SEQUENCE_PERSISTENCE_FAILED" | "SEQUENCE_PRESENTATION_FAILED";Defined in: packages/sage/src/planning/plan-sequence.ts:181
Sequence-owned failure codes that never carry raw callback diagnostics.
Example
Section titled “Example”const code: PlanSequenceErrorCode = 'SEQUENCE_PREPARATION_FAILED';PlanSequenceFingerprint
Section titled “PlanSequenceFingerprint”type PlanSequenceFingerprint = string & { [PLAN_SEQUENCE_FINGERPRINT_BRAND]: true;};Defined in: packages/sage/src/planning/plan-sequence.ts:25
Stable SHA-256 identity for one cluster-bound ordered Plan sequence.
Type Declaration
Section titled “Type Declaration”[PLAN_SEQUENCE_FINGERPRINT_BRAND]
Section titled “[PLAN_SEQUENCE_FINGERPRINT_BRAND]”readonly [PLAN_SEQUENCE_FINGERPRINT_BRAND]: true;Example
Section titled “Example”declare const fingerprint: PlanSequenceFingerprint;console.log(fingerprint.length); // 64PlanSequencePhase
Section titled “PlanSequencePhase”type PlanSequencePhase = | "preparing" | "prepared" | "signing" | "signed" | "invoking" | "submitted" | "confirmed";Defined in: packages/sage/src/planning/plan-sequence.ts:165
Finite lifecycle phase safe to expose in a sequence result.
Example
Section titled “Example”const phase: PlanSequencePhase = 'preparing';PlanSequenceReadiness
Section titled “PlanSequenceReadiness”type PlanSequenceReadiness = | Readonly<{ plan: Plan; status: "ready";}> | Readonly<{ notBefore?: string; reason: string; status: "waiting";}>;Defined in: packages/sage/src/planning/plan-sequence.ts:71
Exact result of freshly preparing one sequence step.
A waiting timestamp is a canonical UTC ISO-8601 string. It is advisory; the planning core neither interprets it nor polls automatically.
Example
Section titled “Example”declare const readiness: PlanSequenceReadiness;if (readiness.status === 'ready') console.log(readiness.plan.describe());PlanSequenceResult
Section titled “PlanSequenceResult”type PlanSequenceResult<Checkpoint> = | Readonly<{ checkpoint: Checkpoint; index: number; notBefore?: string; phase: "preparing"; reason: string; status: "waiting"; stepId: string;}> | Readonly<{ checkpoint: Checkpoint; index: number; phase: "preparing" | "confirmed"; status: "paused"; stepId: string;}> | Readonly<{ checkpoint: Checkpoint; code: PlanSequenceResultCode; index: number; message: string; phase: "preparing" | "prepared" | "signing"; status: "failed"; stepId: string;}> | Readonly<{ checkpoint: Checkpoint; code: "SEQUENCE_PERSISTENCE_FAILED"; index: number; message: string; phase: "signed"; signature: Signature; status: "failed"; stepId: string;}> | Readonly<{ checkpoint: Checkpoint; code: PlanSequenceResultCode; index: number; message: string; phase: "signed" | "invoking" | "submitted"; signature?: Signature; status: "unknown"; stepId: string;}> | Readonly<{ checkpoint: Checkpoint; index: number; phase: "confirmed"; signature?: Signature; status: "completed"; stepId: string;}>;Defined in: packages/sage/src/planning/plan-sequence.ts:216
Finite safe result envelope for future checkpoint-backed coordination.
The checkpoint codec supplies the generic checkpoint value. Raw errors,
signers, transactions, blockhashes, and callback values are never fields.
A boundary pause is preparing before the first step or confirmed after a
completed step. If saving an observable signed attempt fails before
submission, the result remains a signature-bearing failed outcome.
Type Parameters
Section titled “Type Parameters”| Type Parameter | Default type |
|---|---|
Checkpoint | unknown |
Example
Section titled “Example”declare const result: PlanSequenceResult<{ readonly v: 1 }>;if (result.status === 'failed') console.log(result.code, result.message);PlanSequenceResultCode
Section titled “PlanSequenceResultCode”type PlanSequenceResultCode = | PlanSequenceErrorCode | SageSdkErrorCode;Defined in: packages/sage/src/planning/plan-sequence.ts:200
Finite error code carried by a failed or unknown sequence result.
Existing planning and execution errors retain their public SDK code; errors crossing callback or persistence boundaries use a sequence-owned code.
Example
Section titled “Example”const code: PlanSequenceResultCode = 'INVALID_ACTION_INPUT';PlanSequenceStatus
Section titled “PlanSequenceStatus”type PlanSequenceStatus = "waiting" | "paused" | "failed" | "unknown" | "completed";Defined in: packages/sage/src/planning/plan-sequence.ts:155
Every public sequence coordination status.
completed is the only successful terminal status.
Example
Section titled “Example”const status: PlanSequenceStatus = 'waiting';PlanSequenceStepContext
Section titled “PlanSequenceStepContext”type PlanSequenceStepContext = Readonly<{ confirmed: readonly ConfirmedStep[]; index: number; sequenceId: string; stepId: string;}>;Defined in: packages/sage/src/planning/plan-sequence.ts:53
Stable sequence progress supplied to one capability-owned step callback.
Example
Section titled “Example”declare const context: PlanSequenceStepContext;console.log(context.sequenceId, context.stepId, context.confirmed.length);UnknownPlanExecution
Section titled “UnknownPlanExecution”type UnknownPlanExecution = | Readonly<{ lastCheckedBlockHeight: bigint; lastValidBlockHeight: bigint | null; reason: "timeout"; signature: Signature; status: "unknown";}> | Readonly<{ lastCheckedBlockHeight: bigint | null; lastValidBlockHeight: bigint | null; operation: "submission" | "signature-status" | "block-height"; reason: "transport-error"; signature: Signature; status: "unknown";}>;Defined in: packages/sage/src/planning/execution.ts:88
A submitted transaction whose terminal state remains unknown.
Example
Section titled “Example”declare const result: UnknownPlanExecution;console.log(result.signature, result.lastValidBlockHeight);Functions
Section titled “Functions”assemblePlan()
Section titled “assemblePlan()”function assemblePlan( context, plan, policy): Promise<Readonly<{ messageBytes: TransactionMessageBytes; signatures: SignaturesMap;}> & TransactionWithBlockhashLifetime>;Defined in: packages/sage/src/planning/assembly.ts:244
Assembles one Plan into an unsigned blockhash-lifetime transaction.
Assembly validates compute and priority-fee policy before RPC, fetches one latest blockhash, and never signs, simulates, or submits the transaction.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
context | SageContext |
plan | Plan |
policy | AssemblyPolicy |
Returns
Section titled “Returns”Promise<Readonly<{
messageBytes: TransactionMessageBytes;
signatures: SignaturesMap;
}> & TransactionWithBlockhashLifetime>
Example
Section titled “Example”declare const ctx: SageContext;declare const plan: Plan;declare const feePayer: Address;const transaction = await assemblePlan(ctx, plan, { feePayer });combinePlans()
Section titled “combinePlans()”function combinePlans(...plans): Plan;Defined in: packages/sage/src/planning/index.ts:734
Combines one or more Plans with deterministic associative flattening.
Semantic validation is eager. Conflict indices are relative to the flattened
inputs of the combinePlans call that rejects them.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
…plans | readonly Plan[] |
Returns
Section titled “Returns”Example
Section titled “Example”declare const undock: Plan;declare const warp: Plan;const movement = combinePlans(undock, warp);console.log(movement.summary);confirmPlanSequenceCheckpointStep()
Section titled “confirmPlanSequenceCheckpointStep()”function confirmPlanSequenceCheckpointStep( checkpoint, evidence, observedAt): PlanSequenceCheckpointV1;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:717
Appends public confirmation evidence and advances exactly one sequence step.
A step can advance only from its matching durable signed or invoking
attempt. The attempt is cleared in the returned checkpoint.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
checkpoint | PlanSequenceCheckpointV1 |
evidence | ConfirmedStep |
observedAt | string |
Returns
Section titled “Returns”Example
Section titled “Example”declare const checkpoint: PlanSequenceCheckpointV1;declare const confirmed: ConfirmedStep;const advanced = confirmPlanSequenceCheckpointStep( checkpoint, confirmed, '2026-08-28T12:00:00.000Z',);createPlan()
Section titled “createPlan()”function createPlan(input): Plan;Defined in: packages/sage/src/planning/index.ts:530
Creates an inert branded Plan while deriving every aggregate field.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
input | CreatePlanInput |
Returns
Section titled “Returns”Example
Section titled “Example”declare const step: PlanStep;const plan = createPlan({ kind: 'fleet.move', summary: 'Move the fleet.', steps: [step], preconditions: [],});console.log(plan.affected);createPlanSequence()
Section titled “createPlanSequence()”function createPlanSequence(input): Promise<PlanSequence>;Defined in: packages/sage/src/planning/plan-sequence.ts:571
Creates an inert Plan sequence and its canonical cluster-bound fingerprint.
Construction invokes no step callback and performs no context, wallet, signer, or network work. The only asynchronous operation is WebCrypto SHA-256 over the accepted canonical identity bytes.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
input | CreatePlanSequenceInput |
Returns
Section titled “Returns”Promise<PlanSequence>
Example
Section titled “Example”declare const step: PlanSequenceStep;const sequence = await createPlanSequence({ cluster: 'zink-ptr', sequenceId: 'fleet-round-trip', revision: 0, steps: [step],});console.log(sequence.fingerprint);createPlanSequenceCheckpoint()
Section titled “createPlanSequenceCheckpoint()”function createPlanSequenceCheckpoint(sequence, observedAt): PlanSequenceCheckpointV1;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:508
Creates an empty checkpoint bound to one exact Plan sequence.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
sequence | PlanSequence |
observedAt | string |
Returns
Section titled “Returns”Example
Section titled “Example”declare const sequence: PlanSequence;const checkpoint = createPlanSequenceCheckpoint( sequence, '2026-08-28T12:00:00.000Z',);console.log(checkpoint.nextStepIndex); // 0executePlan()
Section titled “executePlan()”function executePlan( context, plan,options): Promise<PlanExecutionResult>;Defined in: packages/sage/src/planning/execution.ts:891
Executes one Plan through local signer matching, freshness re-check, one submission, terminal confirmation, and confirmed-only cache invalidation.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
context | SageContext |
plan | Plan |
options | ExecutePlanOptions |
Returns
Section titled “Returns”Promise<PlanExecutionResult>
Example
Section titled “Example”import type { TransactionSigner } from '@solana/kit';
declare const ctx: SageContext;declare const plan: Plan;declare const feePayer: TransactionSigner;const result = await executePlan(ctx, plan, { feePayer });console.log(result.status, result.signature);executePlanSequence()
Section titled “executePlanSequence()”function executePlanSequence( context, sequence, checkpointSource,options): Promise<SequenceResult>;Defined in: packages/sage/src/planning/plan-sequence-execution.ts:345
Executes or resumes one PlanSequence invocation without polling or retrying.
The checkpoint may be an SDK-created object, caller-owned decoded JSON, or a JSON string. It is strictly parsed against the exact sequence before any RPC, preparation, presentation, or signer work begins.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
context | SageContext |
sequence | PlanSequence |
checkpointSource | unknown |
options | ExecutePlanSequenceOptions |
Returns
Section titled “Returns”Promise<SequenceResult>
Example
Section titled “Example”declare const ctx: SageContext;declare const sequence: PlanSequence;declare const checkpointJson: string;declare const options: ExecutePlanSequenceOptions;const result = await executePlanSequence(ctx, sequence, checkpointJson, options);console.log(result.status, result.checkpoint.nextStepIndex);parsePlanSequenceCheckpoint()
Section titled “parsePlanSequenceCheckpoint()”function parsePlanSequenceCheckpoint(sequence, source): PlanSequenceCheckpointV1;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:537
Parses and validates a checkpoint against one exact Plan sequence.
The source may be a JSON string or a caller-owned parsed JSON value.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
sequence | PlanSequence |
source | unknown |
Returns
Section titled “Returns”Example
Section titled “Example”declare const sequence: PlanSequence;declare const storedJson: string;const checkpoint = parsePlanSequenceCheckpoint(sequence, storedJson);console.log(checkpoint.nextStepIndex);planFromJSON()
Section titled “planFromJSON()”function planFromJSON(json): Plan;Defined in: packages/sage/src/planning/index.ts:614
Rehydrates and validates a complete versioned Plan wire value.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
json | unknown |
Returns
Section titled “Returns”Example
Section titled “Example”declare const wire: PlanJsonV1 | PlanJsonV2;const plan = planFromJSON(wire);console.log(plan.describe());setPlanSequenceCheckpointAttempt()
Section titled “setPlanSequenceCheckpointAttempt()”function setPlanSequenceCheckpointAttempt( checkpoint, attempt, observedAt): PlanSequenceCheckpointV1;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:649
Replaces the current write-ahead attempt without advancing sequence progress.
The first attempt must be prepared. An observable attempt may then become
signed; an opaque attempt may become invoking.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
checkpoint | PlanSequenceCheckpointV1 |
attempt | PlanSequenceCheckpointAttemptV1 |
observedAt | string |
Returns
Section titled “Returns”Example
Section titled “Example”declare const checkpoint: PlanSequenceCheckpointV1;const prepared = setPlanSequenceCheckpointAttempt( checkpoint, { stepId: checkpoint.stepIds[checkpoint.nextStepIndex]!, index: checkpoint.nextStepIndex, phase: 'prepared', signerMode: 'observable', }, '2026-08-28T12:00:00.000Z',);simulatePlan()
Section titled “simulatePlan()”function simulatePlan( context, plan,policy): Promise<SimulationResult>;Defined in: packages/sage/src/planning/simulation.ts:84
Simulates one Plan without receiving or invoking a signer.
The same assembly policy used for execution produces the unsigned transaction. The node replaces its recent blockhash and verifies no signatures.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
context | SageContext |
plan | Plan |
policy | AssemblyPolicy |
Returns
Section titled “Returns”Promise<SimulationResult>
Example
Section titled “Example”declare const ctx: SageContext;declare const plan: Plan;declare const feePayer: Address;const result = await simulatePlan(ctx, plan, { feePayer });console.log(result.logs, result.unitsConsumed);stringifyPlanSequenceCheckpoint()
Section titled “stringifyPlanSequenceCheckpoint()”function stringifyPlanSequenceCheckpoint(checkpoint): string;Defined in: packages/sage/src/planning/plan-sequence-checkpoint.ts:801
Serializes one SDK-created checkpoint to canonical compact JSON.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
checkpoint | PlanSequenceCheckpointV1 |
Returns
Section titled “Returns”string
Example
Section titled “Example”declare const checkpoint: PlanSequenceCheckpointV1;declare const callerOwnedStore: { save(value: string): Promise<void> };const storedJson = stringifyPlanSequenceCheckpoint(checkpoint);await callerOwnedStore.save(storedJson);