tasq/node_modules/@claude-flow/guidance/dist/temporal.d.ts

426 lines
16 KiB
TypeScript

/**
* Temporal Assertions and Validity Windows
*
* Bitemporal semantics for knowledge: distinguishes *assertion time* (when
* something was recorded) from *validity time* (when the fact is/was/will be
* true in the real world).
*
* The system tracks two independent timelines:
* - Assertion time: when the assertion was recorded and when it was retracted
* - Validity time: when the fact becomes true (validFrom) and stops being true
* (validUntil)
*
* Every assertion carries `validFrom`, `validUntil`, `assertedAt`, and
* `supersededBy` fields. Status is computed dynamically from the current clock
* and the assertion's lifecycle flags (retraction, supersession, expiration).
*
* TemporalStore:
* - Creates assertions with explicit validity windows
* - Retrieves assertions active at any point in time (past, present, future)
* - Supports supersession chains (old fact replaced by new fact)
* - Soft-delete via retraction (preserves full history)
* - Conflict detection: finds multiple active assertions in the same namespace
* - Export/import for persistence
*
* TemporalReasoner:
* - High-level queries: whatWasTrue, whatIsTrue, whatWillBeTrue
* - Change detection since a given timestamp
* - Conflict detection at a point in time
* - Forward projection of assertion validity
*
* @module @claude-flow/guidance/temporal
*/
/**
* Computed lifecycle status of a temporal assertion.
*
* - future: the validity window has not yet opened (validFrom > now)
* - active: the assertion is currently valid (validFrom <= now < validUntil)
* - expired: the validity window has closed (validUntil <= now)
* - superseded: replaced by a newer assertion
* - retracted: explicitly withdrawn (soft-deleted, history preserved)
*/
export type TemporalStatus = 'future' | 'active' | 'expired' | 'superseded' | 'retracted';
/**
* The temporal window describing when a fact is valid and when it was recorded.
*/
export interface ValidityWindow {
/** Unix timestamp (ms) when the fact becomes true in the real world */
validFrom: number;
/** Unix timestamp (ms) when the fact stops being true, or null for indefinite */
validUntil: number | null;
/** Unix timestamp (ms) when the assertion was recorded in the system */
assertedAt: number;
/** Unix timestamp (ms) when the assertion was retracted, or null if still standing */
retractedAt: number | null;
}
/**
* A single temporal assertion: a claim with an explicit validity window,
* supersession chain, confidence, and provenance metadata.
*/
export interface TemporalAssertion {
/** Unique assertion identifier (UUID v4) */
id: string;
/** The claim being asserted, in natural language */
claim: string;
/** Namespace for grouping related assertions */
namespace: string;
/** The temporal validity window */
window: ValidityWindow;
/** Computed lifecycle status (derived from window + retraction + supersession) */
status: TemporalStatus;
/** ID of the assertion that replaced this one, or null */
supersededBy: string | null;
/** ID of the assertion that this one replaces, or null */
supersedes: string | null;
/** Confidence in the assertion (0.0 - 1.0) */
confidence: number;
/** Who or what made this assertion */
source: string;
/** Searchable tags */
tags: string[];
/** Arbitrary metadata */
metadata: Record<string, unknown>;
}
/**
* Query options for filtering temporal assertions.
*/
export interface TemporalQuery {
/** Filter by namespace */
namespace?: string;
/** Return only assertions active at this point in time */
pointInTime?: number;
/** Filter by status (any match) */
status?: TemporalStatus[];
/** Filter by source */
source?: string;
/** Filter by tags (all must be present) */
tags?: string[];
}
/**
* Configuration for the TemporalStore.
*/
export interface TemporalConfig {
/** Maximum number of assertions to store (default 100000) */
maxAssertions: number;
/** Interval (ms) for auto-expire status checks (default 60000) */
autoExpireCheckIntervalMs: number;
}
/**
* A full timeline for an assertion: its predecessors and successors in the
* supersession chain.
*/
export interface TemporalTimeline {
/** The assertion at the center of the timeline */
assertion: TemporalAssertion;
/** Assertions that were replaced leading up to this one (oldest first) */
predecessors: TemporalAssertion[];
/** Assertions that replaced this one (newest last) */
successors: TemporalAssertion[];
}
/**
* A detected change in the temporal store since a given timestamp.
*/
export interface TemporalChange {
/** The assertion that changed */
assertion: TemporalAssertion;
/** The kind of change */
changeType: 'asserted' | 'superseded' | 'retracted' | 'expired';
/** When the change occurred (assertion time, retraction time, etc.) */
changedAt: number;
}
/**
* Optional parameters when creating a new assertion.
*/
export interface AssertOptions {
/** Custom assertion ID (default: auto-generated UUID) */
id?: string;
/** Confidence in the assertion (0.0 - 1.0, default 1.0) */
confidence?: number;
/** Who or what is making this assertion (default 'system') */
source?: string;
/** Searchable tags */
tags?: string[];
/** Arbitrary metadata */
metadata?: Record<string, unknown>;
}
/**
* Serializable representation for export/import.
*/
export interface SerializedTemporalStore {
/** All assertions */
assertions: TemporalAssertion[];
/** When the export was created */
createdAt: string;
/** Schema version */
version: number;
}
/**
* In-memory store for temporal assertions with bitemporal semantics.
*
* Assertions are indexed by ID and support supersession chains, retraction,
* temporal queries (what was active at time T), and conflict detection.
* Status is computed dynamically from the assertion's window and lifecycle
* flags; callers never set status directly.
*/
export declare class TemporalStore {
private readonly config;
private readonly assertions;
constructor(config?: Partial<TemporalConfig>);
/**
* Create a new temporal assertion.
*
* Records a claim with an explicit validity window. The assertion's status
* is computed automatically from the window and the current time.
*
* @param claim - The fact being asserted
* @param namespace - Grouping namespace
* @param window - Validity window (validFrom and validUntil)
* @param opts - Optional parameters (confidence, source, tags, metadata)
* @returns The newly created TemporalAssertion
*/
assert(claim: string, namespace: string, window: {
validFrom: number;
validUntil: number | null;
}, opts?: AssertOptions): TemporalAssertion;
/**
* Retrieve an assertion by ID.
*
* The returned assertion has its status recomputed against the current time.
*
* @param id - The assertion ID
* @returns The assertion, or undefined if not found
*/
get(id: string): TemporalAssertion | undefined;
/**
* Get all assertions that were active at a specific point in time.
*
* An assertion is considered "active at time T" if:
* - Its validity window contains T (validFrom <= T and (validUntil is null or T < validUntil))
* - It has not been retracted
* - It has not been superseded
*
* @param pointInTime - The reference time (ms epoch)
* @param namespace - Optional namespace filter
* @returns Active assertions at the specified time
*/
getActiveAt(pointInTime: number, namespace?: string): TemporalAssertion[];
/**
* Get all assertions active right now.
*
* Convenience wrapper around `getActiveAt(Date.now())`.
*
* @param namespace - Optional namespace filter
* @returns Currently active assertions
*/
getCurrentTruth(namespace?: string): TemporalAssertion[];
/**
* Get the full history of a claim: all assertions (past and present) that
* share the same claim text and namespace, regardless of status.
*
* Results are ordered by assertedAt ascending (oldest first), giving a
* timeline of how the claim evolved.
*
* @param claim - The claim text to search for
* @param namespace - The namespace to search in
* @returns All matching assertions, oldest first
*/
getHistory(claim: string, namespace: string): TemporalAssertion[];
/**
* Query assertions with multiple optional filters.
*
* All specified filters are ANDed together. Results are ordered by
* assertedAt descending (newest first).
*
* @param opts - Query filter options
* @returns Matching assertions
*/
query(opts?: TemporalQuery): TemporalAssertion[];
/**
* Supersede an existing assertion with a new one.
*
* Marks the old assertion as superseded and creates a new assertion that
* declares it replaces the old one. The supersession chain is bidirectional:
* oldAssertion.supersededBy = newAssertion.id
* newAssertion.supersedes = oldAssertion.id
*
* @param oldId - ID of the assertion to supersede
* @param newClaim - The replacement claim text
* @param newWindow - The validity window for the replacement
* @param opts - Optional parameters for the new assertion
* @returns The new assertion, or undefined if the old one was not found
*/
supersede(oldId: string, newClaim: string, newWindow: {
validFrom: number;
validUntil: number | null;
}, opts?: AssertOptions): TemporalAssertion | undefined;
/**
* Retract an assertion (soft delete).
*
* The assertion is marked with a retractedAt timestamp and its status
* becomes 'retracted'. The assertion remains in the store for historical
* queries but is excluded from active truth queries.
*
* @param id - The assertion to retract
* @param _reason - Optional reason for retraction (stored in metadata)
* @returns The retracted assertion, or undefined if not found
*/
retract(id: string, _reason?: string): TemporalAssertion | undefined;
/**
* Get the full supersession timeline for an assertion.
*
* Follows the supersedes/supersededBy chain in both directions to build
* the complete lineage: all predecessors (oldest first) and all successors
* (newest last). Handles cycles by tracking visited IDs.
*
* @param id - The assertion to build a timeline for
* @returns The timeline, or undefined if not found
*/
getTimeline(id: string): TemporalTimeline | undefined;
/**
* Detect conflicting assertions: multiple assertions active at the same
* time in the same namespace.
*
* Returns groups of assertions that are simultaneously active, which may
* indicate contradictions that need resolution.
*
* @param namespace - The namespace to check
* @param pointInTime - The reference time (defaults to now)
* @returns Array of assertions that are concurrently active (empty if no conflicts)
*/
reconcile(namespace: string, pointInTime?: number): TemporalAssertion[];
/**
* Export all assertions for persistence.
*
* @returns Serializable store representation
*/
exportAssertions(): SerializedTemporalStore;
/**
* Import previously exported assertions, replacing all current contents.
*
* @param data - Serialized store data
* @throws If the version is unsupported
*/
importAssertions(data: SerializedTemporalStore): void;
/**
* Remove expired assertions whose validity ended before the given timestamp.
*
* Only assertions with status 'expired' and validUntil before the cutoff
* are removed. Retracted and superseded assertions are preserved for
* historical traceability.
*
* @param beforeTimestamp - Remove assertions that expired before this time
* @returns Number of assertions pruned
*/
pruneExpired(beforeTimestamp: number): number;
/**
* Get the number of stored assertions.
*/
get size(): number;
/**
* Get the current configuration.
*/
getConfig(): TemporalConfig;
/**
* Remove all assertions from the store.
*/
clear(): void;
/**
* Enforce the maximum assertion capacity by pruning the oldest expired
* assertions first.
*/
private enforceCapacity;
}
/**
* High-level temporal reasoning over a TemporalStore.
*
* Provides semantic queries like "what was true at time T", "what will be
* true at time T", change detection, conflict detection, and forward
* projection of assertion validity.
*/
export declare class TemporalReasoner {
private readonly store;
constructor(store: TemporalStore);
/**
* What was true at a past point in time?
*
* Returns all assertions that were active (valid, not retracted, not
* superseded) at the specified historical moment.
*
* @param namespace - The namespace to query
* @param pointInTime - The historical moment (ms epoch)
* @returns Assertions that were active at that time
*/
whatWasTrue(namespace: string, pointInTime: number): TemporalAssertion[];
/**
* What is true right now?
*
* Returns all currently active assertions in the given namespace.
*
* @param namespace - The namespace to query
* @returns Currently active assertions
*/
whatIsTrue(namespace: string): TemporalAssertion[];
/**
* What will be true at a future point in time?
*
* Returns assertions whose validity window includes the specified future
* time and that have not been retracted or superseded.
*
* @param namespace - The namespace to query
* @param futureTime - The future moment (ms epoch)
* @returns Assertions that will be active at that time
*/
whatWillBeTrue(namespace: string, futureTime: number): TemporalAssertion[];
/**
* Detect changes in a namespace since a given timestamp.
*
* Returns a list of changes ordered by their change time, including:
* - New assertions created after the timestamp
* - Assertions superseded after the timestamp
* - Assertions retracted after the timestamp
* - Assertions that expired after the timestamp
*
* @param namespace - The namespace to check
* @param sinceTimestamp - Only include changes after this time (ms epoch)
* @returns List of detected changes
*/
hasChanged(namespace: string, sinceTimestamp: number): TemporalChange[];
/**
* Detect conflicting (contradictory) assertions active at the same time
* in the same namespace.
*
* Returns all concurrently active assertions if there are two or more.
* An empty array means no conflicts.
*
* @param namespace - The namespace to check
* @param pointInTime - The reference time (defaults to now)
* @returns Conflicting assertions, or empty if no conflicts
*/
conflictsAt(namespace: string, pointInTime?: number): TemporalAssertion[];
/**
* Project an assertion forward: will it still be valid at a future time?
*
* Checks whether the assertion's validity window includes the future
* timestamp and the assertion has not been retracted or superseded.
*
* @param assertionId - The assertion to project
* @param futureTimestamp - The future time to check (ms epoch)
* @returns true if the assertion will be active at the future time
*/
projectForward(assertionId: string, futureTimestamp: number): boolean;
}
/**
* Create a TemporalStore with optional configuration.
*
* @param config - Partial configuration; unspecified values use defaults
* @returns A fresh TemporalStore
*/
export declare function createTemporalStore(config?: Partial<TemporalConfig>): TemporalStore;
/**
* Create a TemporalReasoner backed by the given store.
*
* @param store - The TemporalStore to reason over
* @returns A fresh TemporalReasoner
*/
export declare function createTemporalReasoner(store: TemporalStore): TemporalReasoner;
//# sourceMappingURL=temporal.d.ts.map