diff --git a/CLAUDE.md b/CLAUDE.md index af30ad8..ad6f9cf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,7 @@ This monorepo implements a stateless workflow engine driven by a single-step CLI | **Role** | A named actor within a workflow. Each role has a system prompt and a JSON Schema `outputSchema`. | | **Moderator** | Status-based graph evaluator — determines the next role (or `$END`) with zero LLM cost. | | **Agent** | An external CLI command (`uwf-hermes`, etc.) spawned by `uwf thread step`. Produces frontmatter markdown output. | -| **CAS** | Content-Addressed Storage via `@uncaged/json-cas` — all workflow definitions, thread nodes, and outputs are immutable CAS nodes. | +| **CAS** | Content-Addressed Storage via `@ocas/core` — all workflow definitions, thread nodes, and outputs are immutable CAS nodes. | | **Registry** | `~/.uncaged/workflow/registry.yaml` — maps workflow names to current CAS hashes. | ### Monorepo Structure @@ -35,7 +35,7 @@ workflow/ - Dependency layers: `workflow-protocol` → `workflow-util` → `workflow-util-agent` → `workflow-agent-hermes` / `cli-workflow` - Packages use `workspace:^` protocol (resolves to `^x.y.z` on publish) -- External CAS: `@uncaged/json-cas` (store API, hashing, schema validation) + `@uncaged/json-cas-fs` (filesystem backend) +- External CAS: `@ocas/core` (store API, hashing, schema validation) + `@ocas/fs` (filesystem backend) ## Language & Paradigm diff --git a/packages/cli-workflow/package.json b/packages/cli-workflow/package.json index 311e630..c6d693c 100644 --- a/packages/cli-workflow/package.json +++ b/packages/cli-workflow/package.json @@ -11,8 +11,8 @@ "uwf": "./dist/cli.js" }, "dependencies": { - "@uncaged/json-cas": "^0.5.3", - "@uncaged/json-cas-fs": "^0.5.3", + "@ocas/core": "^0.1.1", + "@ocas/fs": "^0.1.1", "@uncaged/workflow-protocol": "workspace:^", "@uncaged/workflow-util": "workspace:^", "@uncaged/workflow-util-agent": "workspace:^", diff --git a/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts b/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts index 711ddb7..23538af 100644 --- a/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts +++ b/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts @@ -2,8 +2,8 @@ import { execFileSync } from "node:child_process"; import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, StepNodePayload, ThreadId } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/__tests__/current-role.test.ts b/packages/cli-workflow/src/__tests__/current-role.test.ts index 3a4d9bd..25f206c 100644 --- a/packages/cli-workflow/src/__tests__/current-role.test.ts +++ b/packages/cli-workflow/src/__tests__/current-role.test.ts @@ -1,7 +1,7 @@ import { mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { putSchema } from "@uncaged/json-cas"; +import { putSchema } from "@ocas/core"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { describe, expect, test } from "vitest"; import { createMarker, deleteMarker } from "../background/index.js"; diff --git a/packages/cli-workflow/src/__tests__/step-read.test.ts b/packages/cli-workflow/src/__tests__/step-read.test.ts index 2e9fae9..0212c2d 100644 --- a/packages/cli-workflow/src/__tests__/step-read.test.ts +++ b/packages/cli-workflow/src/__tests__/step-read.test.ts @@ -1,8 +1,8 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { bootstrap, putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { bootstrap, putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepRead } from "../commands/step.js"; @@ -40,7 +40,7 @@ const DETAIL_SCHEMA = { turnCount: { type: "integer" as const }, turns: { type: "array" as const, - items: { type: "string" as const, format: "cas_ref" }, + items: { type: "string" as const, format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/cli-workflow/src/__tests__/step-show-json.test.ts b/packages/cli-workflow/src/__tests__/step-show-json.test.ts index 26eeaaf..168367f 100644 --- a/packages/cli-workflow/src/__tests__/step-show-json.test.ts +++ b/packages/cli-workflow/src/__tests__/step-show-json.test.ts @@ -1,8 +1,8 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { bootstrap, type Hash, type JSONSchema, putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { bootstrap, type Hash, type JSONSchema, putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, StepNodePayload } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepShow } from "../commands/step.js"; @@ -45,7 +45,7 @@ const DETAIL_SCHEMA: JSONSchema = { properties: { turns: { type: "array", - items: { type: "string", format: "cas_ref" }, + items: { type: "string", format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/cli-workflow/src/__tests__/step-timing.test.ts b/packages/cli-workflow/src/__tests__/step-timing.test.ts index 24ae758..bfc38b2 100644 --- a/packages/cli-workflow/src/__tests__/step-timing.test.ts +++ b/packages/cli-workflow/src/__tests__/step-timing.test.ts @@ -1,8 +1,8 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { bootstrap, putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { bootstrap, putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { STEP_NODE_SCHEMA } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; @@ -43,7 +43,7 @@ const DETAIL_SCHEMA = { turnCount: { type: "integer" as const }, turns: { type: "array" as const, - items: { type: "string" as const, format: "cas_ref" }, + items: { type: "string" as const, format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts b/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts index 17b8585..6387ac7 100644 --- a/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts @@ -1,8 +1,8 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { bootstrap, putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { bootstrap, putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdThreadRead } from "../commands/thread.js"; @@ -41,7 +41,7 @@ const DETAIL_SCHEMA = { turnCount: { type: "integer" as const }, turns: { type: "array" as const, - items: { type: "string" as const, format: "cas_ref" }, + items: { type: "string" as const, format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts b/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts index f28f323..cfadb89 100644 --- a/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts @@ -1,8 +1,8 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { bootstrap, putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { bootstrap, putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdThreadRead, THREAD_READ_DEFAULT_QUOTA } from "../commands/thread.js"; @@ -42,7 +42,7 @@ const DETAIL_SCHEMA = { turnCount: { type: "integer" as const }, turns: { type: "array" as const, - items: { type: "string" as const, format: "cas_ref" }, + items: { type: "string" as const, format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/cli-workflow/src/__tests__/thread.test.ts b/packages/cli-workflow/src/__tests__/thread.test.ts index d93b34b..00b1a16 100644 --- a/packages/cli-workflow/src/__tests__/thread.test.ts +++ b/packages/cli-workflow/src/__tests__/thread.test.ts @@ -1,8 +1,8 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { bootstrap, putSchema } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { bootstrap, putSchema } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepList, cmdStepShow } from "../commands/step.js"; @@ -47,7 +47,7 @@ const DETAIL_SCHEMA = { turnCount: { type: "integer" as const }, turns: { type: "array" as const, - items: { type: "string" as const, format: "cas_ref" }, + items: { type: "string" as const, format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts b/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts index 664c265..52aa71c 100644 --- a/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts +++ b/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts @@ -1,7 +1,7 @@ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, WorkflowPayload } from "@uncaged/workflow-protocol"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { stringify } from "yaml"; diff --git a/packages/cli-workflow/src/commands/cas.ts b/packages/cli-workflow/src/commands/cas.ts index 8f9dbeb..689e64a 100644 --- a/packages/cli-workflow/src/commands/cas.ts +++ b/packages/cli-workflow/src/commands/cas.ts @@ -1,9 +1,9 @@ import { readFileSync } from "node:fs"; import { join } from "node:path"; -import type { JSONSchema, Store } from "@uncaged/json-cas"; -import { bootstrap, getSchema, putSchema, refs, walk } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import type { JSONSchema, Store } from "@ocas/core"; +import { bootstrap, getSchema, putSchema, refs, walk } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import { TEXT_SCHEMA } from "../schemas.js"; @@ -85,13 +85,17 @@ export type SchemaListEntry = { export async function cmdCasSchemaList(storageRoot: string): Promise { const store = openStore(storageRoot); - const metaHash = await bootstrap(store); + const aliases = await bootstrap(store); + const metaHash = aliases["@ocas/schema"]; + if (metaHash === undefined) { + throw new Error("Meta-schema not found in bootstrap result"); + } const entries: SchemaListEntry[] = []; // Include meta-schema itself entries.push({ hash: metaHash, title: "(meta-schema)" }); - for (const hash of store.listByType(metaHash)) { + for (const { hash } of store.listByType(metaHash)) { if (hash === metaHash) continue; const node = store.get(hash); if (node !== null) { diff --git a/packages/cli-workflow/src/commands/shared.ts b/packages/cli-workflow/src/commands/shared.ts index b01139c..fbb3df9 100644 --- a/packages/cli-workflow/src/commands/shared.ts +++ b/packages/cli-workflow/src/commands/shared.ts @@ -1,5 +1,5 @@ -import type { Store as CasStore, JSONSchema } from "@uncaged/json-cas"; -import { getSchema } from "@uncaged/json-cas"; +import type { Store as CasStore, JSONSchema } from "@ocas/core"; +import { getSchema } from "@ocas/core"; import type { CasRef, StartNodePayload, @@ -88,7 +88,7 @@ function expandOutput(uwf: UwfStore, outputRef: CasRef): unknown { } /** - * Recursively expand all cas_ref fields in a CAS node's payload, + * Recursively expand all ocas_ref fields in a CAS node's payload, * replacing hash strings with the referenced node's expanded payload. */ function expandDeep(store: CasStore, hash: CasRef, visited?: Set): unknown { @@ -120,7 +120,7 @@ function expandAnyOfField( ): unknown { if (!Array.isArray(schema.anyOf)) return value; for (const sub of schema.anyOf as JSONSchema[]) { - if (sub.format === "cas_ref" && typeof value === "string") { + if (sub.format === "ocas_ref" && typeof value === "string") { return expandDeep(store, value as CasRef, visited); } } @@ -163,7 +163,7 @@ function expandValue( value: unknown, visited: Set, ): unknown { - if (schema.format === "cas_ref") return expandCasRefField(store, value, visited); + if (schema.format === "ocas_ref") return expandCasRefField(store, value, visited); if (Array.isArray(schema.anyOf)) return expandAnyOfField(store, schema, value, visited); if (schema.type === "array") return expandArrayField(store, schema, value, visited); return expandObjectField(store, schema, value, visited); diff --git a/packages/cli-workflow/src/commands/step.ts b/packages/cli-workflow/src/commands/step.ts index c0c1ec5..e304c79 100644 --- a/packages/cli-workflow/src/commands/step.ts +++ b/packages/cli-workflow/src/commands/step.ts @@ -1,4 +1,4 @@ -import type { BootstrapCapableStore } from "@uncaged/json-cas"; +import type { BootstrapCapableStore } from "@ocas/core"; import type { CasRef, StartEntry, diff --git a/packages/cli-workflow/src/commands/thread.ts b/packages/cli-workflow/src/commands/thread.ts index dad5e31..f738322 100644 --- a/packages/cli-workflow/src/commands/thread.ts +++ b/packages/cli-workflow/src/commands/thread.ts @@ -1,7 +1,7 @@ import { execFileSync, spawn } from "node:child_process"; import { access, readFile } from "node:fs/promises"; import { dirname, isAbsolute, resolve as resolvePath } from "node:path"; -import { validate } from "@uncaged/json-cas"; +import { validate } from "@ocas/core"; import type { AgentAlias, AgentConfig, diff --git a/packages/cli-workflow/src/commands/workflow.ts b/packages/cli-workflow/src/commands/workflow.ts index 8dc2b05..d6ae05b 100644 --- a/packages/cli-workflow/src/commands/workflow.ts +++ b/packages/cli-workflow/src/commands/workflow.ts @@ -1,8 +1,8 @@ import { readFile } from "node:fs/promises"; import { dirname, resolve as resolvePath } from "node:path"; -import type { JSONSchema } from "@uncaged/json-cas"; -import { putSchema, validate } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; +import { putSchema, validate } from "@ocas/core"; import type { CasRef, RoleDefinition, Target, WorkflowPayload } from "@uncaged/workflow-protocol"; import { parse } from "yaml"; import { createIncludeTag } from "../include.js"; diff --git a/packages/cli-workflow/src/schemas.ts b/packages/cli-workflow/src/schemas.ts index 530c2c0..ce126fb 100644 --- a/packages/cli-workflow/src/schemas.ts +++ b/packages/cli-workflow/src/schemas.ts @@ -1,5 +1,5 @@ -import type { Hash, Store } from "@uncaged/json-cas"; -import { putSchema } from "@uncaged/json-cas"; +import type { Hash, Store } from "@ocas/core"; +import { putSchema } from "@ocas/core"; import { START_NODE_SCHEMA, STEP_NODE_SCHEMA, WORKFLOW_SCHEMA } from "@uncaged/workflow-protocol"; export const TEXT_SCHEMA = { type: "string" as const }; diff --git a/packages/cli-workflow/src/store.ts b/packages/cli-workflow/src/store.ts index f491f71..48cf232 100644 --- a/packages/cli-workflow/src/store.ts +++ b/packages/cli-workflow/src/store.ts @@ -3,8 +3,8 @@ import { access, appendFile, mkdir, readdir, readFile, writeFile } from "node:fs import { homedir } from "node:os"; import { join } from "node:path"; -import type { BootstrapCapableStore, Hash } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import type { BootstrapCapableStore, Hash } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId, ThreadListItem, ThreadsIndex } from "@uncaged/workflow-protocol"; import { parse, stringify } from "yaml"; diff --git a/packages/workflow-agent-builtin/package.json b/packages/workflow-agent-builtin/package.json index 33a9db5..507ad12 100644 --- a/packages/workflow-agent-builtin/package.json +++ b/packages/workflow-agent-builtin/package.json @@ -23,7 +23,7 @@ "test:ci": "vitest run" }, "dependencies": { - "@uncaged/json-cas": "^0.5.3", + "@ocas/core": "^0.1.1", "@uncaged/workflow-util-agent": "workspace:^", "@uncaged/workflow-util": "workspace:^" }, diff --git a/packages/workflow-agent-builtin/src/agent.ts b/packages/workflow-agent-builtin/src/agent.ts index ee6cb85..40be050 100644 --- a/packages/workflow-agent-builtin/src/agent.ts +++ b/packages/workflow-agent-builtin/src/agent.ts @@ -1,4 +1,4 @@ -import type { Store } from "@uncaged/json-cas"; +import type { Store } from "@ocas/core"; import { createLogger, generateUlid } from "@uncaged/workflow-util"; import { type AgentContext, diff --git a/packages/workflow-agent-builtin/src/detail.ts b/packages/workflow-agent-builtin/src/detail.ts index 828fdcb..c1d887f 100644 --- a/packages/workflow-agent-builtin/src/detail.ts +++ b/packages/workflow-agent-builtin/src/detail.ts @@ -1,4 +1,4 @@ -import { bootstrap, putSchema, type Store } from "@uncaged/json-cas"; +import { bootstrap, putSchema, type Store } from "@ocas/core"; import { BUILTIN_DETAIL_SCHEMA, BUILTIN_TURN_SCHEMA } from "./schemas.js"; import { readSessionTurns } from "./session.js"; diff --git a/packages/workflow-agent-builtin/src/schemas.ts b/packages/workflow-agent-builtin/src/schemas.ts index c9e8077..2505d40 100644 --- a/packages/workflow-agent-builtin/src/schemas.ts +++ b/packages/workflow-agent-builtin/src/schemas.ts @@ -1,4 +1,4 @@ -import type { JSONSchema } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; const BUILTIN_TOOL_CALL_SCHEMA: JSONSchema = { type: "object", @@ -38,7 +38,7 @@ export const BUILTIN_DETAIL_SCHEMA: JSONSchema = { turnCount: { type: "integer" }, turns: { type: "array", - items: { type: "string", format: "cas_ref" }, + items: { type: "string", format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/workflow-agent-builtin/src/tools/types.ts b/packages/workflow-agent-builtin/src/tools/types.ts index a96573b..b5de40e 100644 --- a/packages/workflow-agent-builtin/src/tools/types.ts +++ b/packages/workflow-agent-builtin/src/tools/types.ts @@ -1,4 +1,4 @@ -import type { JSONSchema } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; export type ToolContext = { cwd: string; diff --git a/packages/workflow-agent-claude-code/__tests__/session-detail.test.ts b/packages/workflow-agent-claude-code/__tests__/session-detail.test.ts index 03d1d2e..28c9bb0 100644 --- a/packages/workflow-agent-claude-code/__tests__/session-detail.test.ts +++ b/packages/workflow-agent-claude-code/__tests__/session-detail.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { createMemoryStore, walk } from "@uncaged/json-cas"; +import { createMemoryStore, walk } from "@ocas/core"; import { parseClaudeCodeJsonOutput, parseClaudeCodeStreamOutput, diff --git a/packages/workflow-agent-claude-code/package.json b/packages/workflow-agent-claude-code/package.json index a585f78..8d3800a 100644 --- a/packages/workflow-agent-claude-code/package.json +++ b/packages/workflow-agent-claude-code/package.json @@ -23,7 +23,7 @@ "test:ci": "vitest run" }, "dependencies": { - "@uncaged/json-cas": "^0.5.3", + "@ocas/core": "^0.1.1", "@uncaged/workflow-util-agent": "workspace:^", "@uncaged/workflow-util": "workspace:^" }, diff --git a/packages/workflow-agent-claude-code/src/claude-code.ts b/packages/workflow-agent-claude-code/src/claude-code.ts index 8996f46..bf22c22 100644 --- a/packages/workflow-agent-claude-code/src/claude-code.ts +++ b/packages/workflow-agent-claude-code/src/claude-code.ts @@ -1,5 +1,5 @@ import { spawn } from "node:child_process"; -import type { Store } from "@uncaged/json-cas"; +import type { Store } from "@ocas/core"; import { createLogger } from "@uncaged/workflow-util"; import { type AgentContext, diff --git a/packages/workflow-agent-claude-code/src/schemas.ts b/packages/workflow-agent-claude-code/src/schemas.ts index 9626249..d6efb10 100644 --- a/packages/workflow-agent-claude-code/src/schemas.ts +++ b/packages/workflow-agent-claude-code/src/schemas.ts @@ -1,4 +1,4 @@ -import type { JSONSchema } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; export const CLAUDE_CODE_DETAIL_SCHEMA: JSONSchema = { title: "claude-code-detail", @@ -34,7 +34,7 @@ export const CLAUDE_CODE_DETAIL_SCHEMA: JSONSchema = { }, turns: { type: "array", - items: { type: "string", format: "cas_ref" }, + items: { type: "string", format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/workflow-agent-claude-code/src/session-detail.ts b/packages/workflow-agent-claude-code/src/session-detail.ts index 0b0ea36..0854ecc 100644 --- a/packages/workflow-agent-claude-code/src/session-detail.ts +++ b/packages/workflow-agent-claude-code/src/session-detail.ts @@ -1,4 +1,4 @@ -import { bootstrap, putSchema, type Store } from "@uncaged/json-cas"; +import { bootstrap, putSchema, type Store } from "@ocas/core"; import { CLAUDE_CODE_DETAIL_SCHEMA, diff --git a/packages/workflow-agent-hermes/__tests__/session-detail.test.ts b/packages/workflow-agent-hermes/__tests__/session-detail.test.ts index 0e6e603..5f0a293 100644 --- a/packages/workflow-agent-hermes/__tests__/session-detail.test.ts +++ b/packages/workflow-agent-hermes/__tests__/session-detail.test.ts @@ -3,7 +3,7 @@ import { describe, expect, test } from "bun:test"; import { mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { createMemoryStore, refs, validate, walk } from "@uncaged/json-cas"; +import { createMemoryStore, refs, validate, walk } from "@ocas/core"; import { computeDurationMs, @@ -82,7 +82,7 @@ describe("computeDurationMs", () => { }); describe("storeHermesSessionDetail", () => { - test("stores hermes-detail root with cas_ref turns walkable", async () => { + test("stores hermes-detail root with ocas_ref turns walkable", async () => { const session: HermesSessionJson = { session_id: "20260518_133159_6a84e8", model: "claude-opus-4.6", diff --git a/packages/workflow-agent-hermes/package.json b/packages/workflow-agent-hermes/package.json index 5af99bf..1b70c7e 100644 --- a/packages/workflow-agent-hermes/package.json +++ b/packages/workflow-agent-hermes/package.json @@ -23,7 +23,7 @@ "test:ci": "vitest run" }, "dependencies": { - "@uncaged/json-cas": "^0.5.3", + "@ocas/core": "^0.1.1", "@uncaged/workflow-util-agent": "workspace:^", "@uncaged/workflow-protocol": "workspace:^", "@uncaged/workflow-util": "workspace:^" diff --git a/packages/workflow-agent-hermes/src/hermes.ts b/packages/workflow-agent-hermes/src/hermes.ts index 77427eb..2dc2328 100644 --- a/packages/workflow-agent-hermes/src/hermes.ts +++ b/packages/workflow-agent-hermes/src/hermes.ts @@ -1,4 +1,4 @@ -import type { Store } from "@uncaged/json-cas"; +import type { Store } from "@ocas/core"; import { createLogger } from "@uncaged/workflow-util"; import { type AgentContext, diff --git a/packages/workflow-agent-hermes/src/schemas.ts b/packages/workflow-agent-hermes/src/schemas.ts index 6d62183..41f0838 100644 --- a/packages/workflow-agent-hermes/src/schemas.ts +++ b/packages/workflow-agent-hermes/src/schemas.ts @@ -1,4 +1,4 @@ -import type { JSONSchema } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; const HERMES_TOOL_CALL_SCHEMA: JSONSchema = { type: "object", @@ -39,7 +39,7 @@ export const HERMES_DETAIL_SCHEMA: JSONSchema = { turnCount: { type: "integer" }, turns: { type: "array", - items: { type: "string", format: "cas_ref" }, + items: { type: "string", format: "ocas_ref" }, }, }, additionalProperties: false, diff --git a/packages/workflow-agent-hermes/src/session-detail.ts b/packages/workflow-agent-hermes/src/session-detail.ts index 87e9928..28b3ba0 100644 --- a/packages/workflow-agent-hermes/src/session-detail.ts +++ b/packages/workflow-agent-hermes/src/session-detail.ts @@ -3,7 +3,7 @@ import { readFile } from "node:fs/promises"; import { homedir } from "node:os"; import { join } from "node:path"; -import { bootstrap, putSchema, type Store } from "@uncaged/json-cas"; +import { bootstrap, putSchema, type Store } from "@ocas/core"; import { HERMES_DETAIL_SCHEMA, HERMES_RAW_OUTPUT_SCHEMA, HERMES_TURN_SCHEMA } from "./schemas.js"; import type { diff --git a/packages/workflow-protocol/package.json b/packages/workflow-protocol/package.json index 2b957d7..df703e0 100644 --- a/packages/workflow-protocol/package.json +++ b/packages/workflow-protocol/package.json @@ -20,8 +20,8 @@ "test:ci": "vitest run" }, "dependencies": { - "@uncaged/json-cas": "^0.5.3", - "@uncaged/json-cas-fs": "^0.5.3" + "@ocas/core": "^0.1.1", + "@ocas/fs": "^0.1.1" }, "devDependencies": { "typescript": "^5.8.3" diff --git a/packages/workflow-protocol/src/schemas.ts b/packages/workflow-protocol/src/schemas.ts index 8144187..81d062b 100644 --- a/packages/workflow-protocol/src/schemas.ts +++ b/packages/workflow-protocol/src/schemas.ts @@ -1,4 +1,4 @@ -import type { JSONSchema } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; const ROLE_DEFINITION: JSONSchema = { type: "object", @@ -9,7 +9,7 @@ const ROLE_DEFINITION: JSONSchema = { capabilities: { type: "array", items: { type: "string" } }, procedure: { type: "string" }, output: { type: "string" }, - frontmatter: { type: "string", format: "cas_ref" }, + frontmatter: { type: "string", format: "ocas_ref" }, }, additionalProperties: false, }; @@ -54,7 +54,7 @@ export const START_NODE_SCHEMA: JSONSchema = { type: "object", required: ["workflow", "prompt", "cwd"], properties: { - workflow: { type: "string", format: "cas_ref" }, + workflow: { type: "string", format: "ocas_ref" }, prompt: { type: "string" }, cwd: { type: "string" }, }, @@ -76,20 +76,20 @@ export const STEP_NODE_SCHEMA: JSONSchema = { "cwd", ], properties: { - start: { type: "string", format: "cas_ref" }, + start: { type: "string", format: "ocas_ref" }, prev: { - anyOf: [{ type: "string", format: "cas_ref" }, { type: "null" }], + anyOf: [{ type: "string", format: "ocas_ref" }, { type: "null" }], }, role: { type: "string" }, - output: { type: "string", format: "cas_ref" }, - detail: { type: "string", format: "cas_ref" }, + output: { type: "string", format: "ocas_ref" }, + detail: { type: "string", format: "ocas_ref" }, agent: { type: "string" }, edgePrompt: { type: "string" }, startedAtMs: { type: "integer" }, completedAtMs: { type: "integer" }, cwd: { type: "string" }, assembledPrompt: { - anyOf: [{ type: "string", format: "cas_ref" }, { type: "null" }], + anyOf: [{ type: "string", format: "ocas_ref" }, { type: "null" }], }, }, additionalProperties: false, diff --git a/packages/workflow-util-agent/__tests__/adapter-retry.test.ts b/packages/workflow-util-agent/__tests__/adapter-retry.test.ts index aa9e1e7..079ac2b 100644 --- a/packages/workflow-util-agent/__tests__/adapter-retry.test.ts +++ b/packages/workflow-util-agent/__tests__/adapter-retry.test.ts @@ -1,4 +1,4 @@ -import { createMemoryStore, putSchema } from "@uncaged/json-cas"; +import { createMemoryStore, putSchema } from "@ocas/core"; import { describe, expect, test } from "vitest"; import { tryFrontmatterFastPath } from "../src/frontmatter.js"; diff --git a/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts b/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts index a724c98..c150032 100644 --- a/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts +++ b/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts @@ -1,4 +1,4 @@ -import { createMemoryStore, putSchema } from "@uncaged/json-cas"; +import { createMemoryStore, putSchema } from "@ocas/core"; import { describe, expect, test } from "vitest"; import { tryFrontmatterFastPath } from "../src/frontmatter.js"; diff --git a/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts b/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts index c42f1dc..f17d646 100644 --- a/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts +++ b/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts @@ -1,4 +1,4 @@ -import { createMemoryStore, putSchema } from "@uncaged/json-cas"; +import { createMemoryStore, putSchema } from "@ocas/core"; import { describe, expect, test } from "vitest"; import { tryFrontmatterFastPath } from "../src/frontmatter.js"; diff --git a/packages/workflow-util-agent/package.json b/packages/workflow-util-agent/package.json index 4c8f29b..b041c53 100644 --- a/packages/workflow-util-agent/package.json +++ b/packages/workflow-util-agent/package.json @@ -20,8 +20,8 @@ "test:ci": "vitest run" }, "dependencies": { - "@uncaged/json-cas": "^0.5.3", - "@uncaged/json-cas-fs": "^0.5.3", + "@ocas/core": "^0.1.1", + "@ocas/fs": "^0.1.1", "@uncaged/workflow-protocol": "workspace:^", "@uncaged/workflow-util": "workspace:^", "dotenv": "^16.6.1", diff --git a/packages/workflow-util-agent/src/build-output-format-instruction.ts b/packages/workflow-util-agent/src/build-output-format-instruction.ts index 8db5c7b..2df7e73 100644 --- a/packages/workflow-util-agent/src/build-output-format-instruction.ts +++ b/packages/workflow-util-agent/src/build-output-format-instruction.ts @@ -1,4 +1,4 @@ -import type { JSONSchema } from "@uncaged/json-cas"; +import type { JSONSchema } from "@ocas/core"; type SchemaProperty = { name: string; diff --git a/packages/workflow-util-agent/src/context.ts b/packages/workflow-util-agent/src/context.ts index 3631760..462665a 100644 --- a/packages/workflow-util-agent/src/context.ts +++ b/packages/workflow-util-agent/src/context.ts @@ -1,4 +1,4 @@ -import type { Store } from "@uncaged/json-cas"; +import type { Store } from "@ocas/core"; import type { CasRef, StartNodePayload, diff --git a/packages/workflow-util-agent/src/extract.ts b/packages/workflow-util-agent/src/extract.ts index 64807d2..0a4258d 100644 --- a/packages/workflow-util-agent/src/extract.ts +++ b/packages/workflow-util-agent/src/extract.ts @@ -1,4 +1,4 @@ -import { getSchema, validate } from "@uncaged/json-cas"; +import { getSchema, validate } from "@ocas/core"; import type { CasRef, ModelAlias, WorkflowConfig } from "@uncaged/workflow-protocol"; import { createAgentStore, resolveStorageRoot } from "./storage.js"; diff --git a/packages/workflow-util-agent/src/frontmatter.ts b/packages/workflow-util-agent/src/frontmatter.ts index 5000b33..4574137 100644 --- a/packages/workflow-util-agent/src/frontmatter.ts +++ b/packages/workflow-util-agent/src/frontmatter.ts @@ -1,5 +1,5 @@ -import type { Store } from "@uncaged/json-cas"; -import { getSchema, validate } from "@uncaged/json-cas"; +import type { Store } from "@ocas/core"; +import { getSchema, validate } from "@ocas/core"; import type { CasRef } from "@uncaged/workflow-protocol"; import { type AgentFrontmatter, diff --git a/packages/workflow-util-agent/src/run.ts b/packages/workflow-util-agent/src/run.ts index e2ccee7..28d5936 100644 --- a/packages/workflow-util-agent/src/run.ts +++ b/packages/workflow-util-agent/src/run.ts @@ -1,4 +1,4 @@ -import { getSchema, validate } from "@uncaged/json-cas"; +import { getSchema, validate } from "@ocas/core"; import type { CasRef, StepNodePayload, ThreadId } from "@uncaged/workflow-protocol"; import { config as loadDotenv } from "dotenv"; import { buildOutputFormatInstruction } from "./build-output-format-instruction.js"; diff --git a/packages/workflow-util-agent/src/schemas.ts b/packages/workflow-util-agent/src/schemas.ts index 77c5f54..8a36956 100644 --- a/packages/workflow-util-agent/src/schemas.ts +++ b/packages/workflow-util-agent/src/schemas.ts @@ -1,5 +1,5 @@ -import type { Hash, Store } from "@uncaged/json-cas"; -import { putSchema } from "@uncaged/json-cas"; +import type { Hash, Store } from "@ocas/core"; +import { putSchema } from "@ocas/core"; import { START_NODE_SCHEMA, STEP_NODE_SCHEMA, WORKFLOW_SCHEMA } from "@uncaged/workflow-protocol"; export type UwfAgentSchemaHashes = { diff --git a/packages/workflow-util-agent/src/storage.ts b/packages/workflow-util-agent/src/storage.ts index 7d94a40..573d632 100644 --- a/packages/workflow-util-agent/src/storage.ts +++ b/packages/workflow-util-agent/src/storage.ts @@ -2,8 +2,8 @@ import { readFile } from "node:fs/promises"; import { homedir } from "node:os"; import { join } from "node:path"; -import type { Store } from "@uncaged/json-cas"; -import { createFsStore } from "@uncaged/json-cas-fs"; +import type { Store } from "@ocas/core"; +import { createFsStore } from "@ocas/fs"; import type { AgentAlias, AgentConfig, diff --git a/packages/workflow-util-agent/src/types.ts b/packages/workflow-util-agent/src/types.ts index bdd43c2..6cd54d6 100644 --- a/packages/workflow-util-agent/src/types.ts +++ b/packages/workflow-util-agent/src/types.ts @@ -1,4 +1,4 @@ -import type { Store } from "@uncaged/json-cas"; +import type { Store } from "@ocas/core"; import type { ModeratorContext, ThreadId, WorkflowPayload } from "@uncaged/workflow-protocol"; export type AgentContext = ModeratorContext & { diff --git a/packages/workflow-util/src/developer-reference.ts b/packages/workflow-util/src/developer-reference.ts index f8447c5..0fca04f 100644 --- a/packages/workflow-util/src/developer-reference.ts +++ b/packages/workflow-util/src/developer-reference.ts @@ -20,7 +20,7 @@ Dependency layers (each only imports from packages above it): protocol → util → util-agent → agent-hermes / agent-builtin / cli-workflow \`\`\` -External CAS: \`@uncaged/json-cas\` (store API, hashing, schema validation) + \`@uncaged/json-cas-fs\` (filesystem backend). +External CAS: \`@ocas/core\` (store API, hashing, schema validation) + \`@ocas/fs\` (filesystem backend). ## Coding Conventions @@ -122,7 +122,7 @@ Shared entry point for all agent CLIs. Handles: ### CAS Integration -All data is CAS-addressed via \`@uncaged/json-cas\`: +All data is CAS-addressed via \`@ocas/core\`: - \`store.put(schemaHash, data)\` → content hash - \`store.get(hash)\` → node - \`validate(store, node)\` → schema check diff --git a/scripts/mock-agent.ts b/scripts/mock-agent.ts index bc4cb32..e66fdc0 100644 --- a/scripts/mock-agent.ts +++ b/scripts/mock-agent.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun // Mock agent for smoke testing -import { bootstrap, type JSONSchema, putSchema } from "@uncaged/json-cas"; +import { bootstrap, type JSONSchema, putSchema } from "@ocas/core"; import { createAgent } from "../packages/uwf-agent-kit/src/index.js"; const MOCK_RAW_OUTPUT_SCHEMA: JSONSchema = {