| /** | ||
| * fromClaudeDir — Claude Code memory store → knowledge Soul. | ||
| * Cite: claude-fafm-sdk 1.0 / fafm-engine serialize_memory approach. | ||
| * Not the proof convert_md_to_fafm (entries/v1.0 anti-pattern). | ||
| */ | ||
| import { Soul } from './soul.js'; | ||
| export declare const DEFAULT_SKIP: Set<string>; | ||
| /** | ||
| * Convert a Claude Code memory directory into a knowledge Soul. | ||
| */ | ||
| export declare function fromClaudeDir(path: string, opts?: { | ||
| namepoint?: string; | ||
| skip?: Set<string>; | ||
| }): Soul; |
| /** .fafm knowledge-profile library (TS) — INTEROP with claude-fafm-sdk 1.0 */ | ||
| export { PRIORITY_ORDER, PRIORITY_RANK, KNOWLEDGE_TYPES, type Fact, type Priority, type Profile, type SoulDoc, } from './types.js'; | ||
| export { Soul, utcNow, canonicalPriority, factFromObj, factToObj, } from './soul.js'; | ||
| export { fromClaudeDir, DEFAULT_SKIP } from './from-claude-dir.js'; |
| /** | ||
| * Soul — local .fafm model (TS mirror of claude-fafm-sdk 1.0 Soul). | ||
| * INTEROP: load/save fidelity, residual preserve, recall SoT. | ||
| */ | ||
| import { type Fact, type SoulDoc } from './types.js'; | ||
| export declare function utcNow(): string; | ||
| export declare function canonicalPriority(p: string | null | undefined): string; | ||
| export declare function factFromObj(obj: unknown): Fact; | ||
| export declare function factToObj(f: Fact): unknown; | ||
| export declare class Soul { | ||
| namepoint: string; | ||
| profile: string; | ||
| retention: string; | ||
| created: string; | ||
| last_etched: string; | ||
| private _facts; | ||
| private _byId; | ||
| private _index; | ||
| private _sessions; | ||
| private _preferences; | ||
| private _custom; | ||
| private _extra; | ||
| private _memoryExtra; | ||
| constructor(namepoint: string, opts?: { | ||
| profile?: string; | ||
| facts?: Fact[]; | ||
| retention?: string; | ||
| created?: string | null; | ||
| index?: string[]; | ||
| sessions?: unknown[]; | ||
| preferences?: Record<string, unknown>; | ||
| custom?: Record<string, unknown>; | ||
| extra?: Record<string, unknown>; | ||
| memoryExtra?: Record<string, unknown>; | ||
| }); | ||
| get facts(): Fact[]; | ||
| get index(): string[]; | ||
| get sessions(): unknown[]; | ||
| get preferences(): Record<string, unknown>; | ||
| get custom(): Record<string, unknown>; | ||
| get extra(): Record<string, unknown>; | ||
| get memoryExtra(): Record<string, unknown>; | ||
| static load(path: string): Soul; | ||
| static fromFile(path: string): Soul; | ||
| toDoc(): SoulDoc; | ||
| toYaml(): string; | ||
| rebuildIndex(width?: number): string[]; | ||
| save(path: string, opts?: { | ||
| reindex?: boolean; | ||
| }): string; | ||
| toFile(path: string, opts?: { | ||
| reindex?: boolean; | ||
| }): string; | ||
| add(fact: Fact): Fact; | ||
| etch(text: string, opts?: { | ||
| id?: string; | ||
| type?: string; | ||
| priority?: string; | ||
| tags?: string[]; | ||
| links?: string[]; | ||
| source?: string; | ||
| }): Fact; | ||
| recall(query?: string | null, opts?: { | ||
| tags?: string[]; | ||
| type?: string; | ||
| minPriority?: string; | ||
| limit?: number | null; | ||
| }): Fact[]; | ||
| getFact(id: string): Fact | null; | ||
| deleteFact(id: string): boolean; | ||
| } |
| /** | ||
| * .fafm types — INTEROP-aligned with claude-fafm-sdk 1.0.0 | ||
| * application/vnd.fafm+yaml v1.1 | ||
| */ | ||
| export declare const PRIORITY_ORDER: readonly ["ephemeral", "standard", "high", "critical"]; | ||
| export type Priority = (typeof PRIORITY_ORDER)[number]; | ||
| export declare const PRIORITY_RANK: Record<string, number>; | ||
| export declare const KNOWLEDGE_TYPES: Set<string>; | ||
| export declare const KNOWN_DOC_KEYS: Set<string>; | ||
| export declare const KNOWN_MEMORY_KEYS: Set<string>; | ||
| export declare const LEGACY_PRIORITY: Record<string, Priority>; | ||
| export interface Fact { | ||
| text: string; | ||
| id?: string | null; | ||
| type?: string | null; | ||
| priority: Priority | string; | ||
| tags: string[]; | ||
| links: string[]; | ||
| timestamp?: string | null; | ||
| source?: string | null; | ||
| /** Unknown fact fields (INTEROP §4) */ | ||
| extra: Record<string, unknown>; | ||
| } | ||
| export type Profile = 'voice' | 'knowledge'; | ||
| export interface SoulDoc { | ||
| version: string; | ||
| profile: string; | ||
| namepoint: string; | ||
| created: string; | ||
| last_etched: string; | ||
| retention: string; | ||
| index: string[]; | ||
| memory: { | ||
| facts: unknown[]; | ||
| sessions: unknown[]; | ||
| preferences: Record<string, unknown>; | ||
| custom: Record<string, unknown>; | ||
| [key: string]: unknown; | ||
| }; | ||
| [key: string]: unknown; | ||
| } |
+2
-0
@@ -11,2 +11,4 @@ export type { SlotState, SlotCategory, SlotDef, KernelScoreResult, ScoreResult, TierInfo, FafData, FafbInfo, DetectedFramework, FrameworkSignature, Signal, SignalType, } from './core/types.js'; | ||
| export type { ServerCardOptions } from './interop/servercard.js'; | ||
| export { Soul as FafmSoul, fromClaudeDir, canonicalPriority, utcNow, PRIORITY_ORDER, PRIORITY_RANK, KNOWLEDGE_TYPES, } from './fafm/index.js'; | ||
| export type { Fact as FafmFact, SoulDoc, Profile as FafmProfile } from './fafm/index.js'; | ||
| export type { InterviewQuestion, InterviewOption, HumanSlotPath, SourcedSlotPath, GoalSeed, TableOf8, TableOf8Row, BoxStatus } from './core/interview.js'; | ||
@@ -13,0 +15,0 @@ export { INTERVIEW, SIX_WS_INTERVIEW, STACK_INTERVIEW, INTERVIEW_BY_PATH, INTERVIEW_PATHS, INTERVIEW_VERSION, questionForSlot, interviewForMissing, seedSixWsFromGoal, buildTableOf8, } from './core/interview.js'; |
+6
-3
| { | ||
| "name": "faf-cli", | ||
| "version": "7.1.4", | ||
| "description": "Persistent AI Context Standard — project DNA for AI. IANA-registered. Anthropic-merged.", | ||
| "version": "7.2.0", | ||
| "description": "Persistent AI context + memory — .faf and .fafm, IANA-registered. Anthropic-merged.", | ||
| "type": "module", | ||
@@ -56,3 +56,6 @@ "icon": "https://faf.one/orange-smiley.svg", | ||
| "codex", | ||
| "windsurf" | ||
| "windsurf", | ||
| "fafm", | ||
| "ai-memory", | ||
| "agents" | ||
| ], | ||
@@ -59,0 +62,0 @@ "author": "wolfejam <wolfejam@faf.one>", |
+15
-0
@@ -108,2 +108,3 @@ <!-- faf: faf-cli | TypeScript | cli | CLI for the .faf and .fafm IANA-registered formats — AI context + memory that versions with your code --> | ||
| | `faf sync` | Bi-directional `.faf` ↔ `CLAUDE.md` | | ||
| | `faf memory` | `.fafm` soul ops — convert Claude memory, etch, recall, ls, show | | ||
| | `faf diff` / `log` | Semantic context diff + score timeline across git history | | ||
@@ -119,2 +120,16 @@ | `faf hooks --install` | Pre-commit guard against context regression | | ||
| ### Memory (`.fafm`) — new in 7.2.0 | ||
| Portable agent memory in the IANA-registered [`.fafm`](https://www.iana.org/assignments/media-types/application/vnd.fafm+yaml) format. Same INTEROP as [claude-fafm-sdk 1.0](https://pypi.org/project/claude-fafm-sdk/). | ||
| ```bash | ||
| # Claude Code memory dir → soul.fafm | ||
| faf memory convert ~/.claude/projects/.../memory -o soul.fafm | ||
| faf memory ls # ranked facts | ||
| faf memory recall "your query" # deterministic filter + rank | ||
| faf memory etch "a durable fact" --id my-fact | ||
| faf memory show | ||
| ``` | ||
| --- | ||
@@ -121,0 +136,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
3083137
3.03%39
11.43%4206
5.28%298
5.3%10
-9.09%