Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,24 @@ on:
pull_request:
branches: [main]

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [20, 22]
node: [22, 24]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
Comment on lines +24 to +26

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Pin the CI actions to released major versions

In the checked CI workflow, neither actions/checkout nor actions/setup-node publishes a v7 tag—their upstream tag lists currently stop at v6 (checkout tags, setup-node tags). Consequently, every push and pull-request job fails while resolving the first action and never reaches dependency installation, type checking, or tests; pin both steps to existing releases or immutable commit SHAs.

Useful? React with 👍 / 👎.

with:
node-version: ${{ matrix.node }}
cache: npm
Expand Down
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Read more: [Architecture](docs/ARCHITECTURE.md)
| `defineAgent()` | adaptive multi-step tool use | an LLM loop over a filtered registry |
| `createConversationMemory()` / `createFactMemory()` | thread/fact state | persistence plus memory tools |
| `createRAG()` | semantic document retrieval | pgvector + embeddings + tools |
| `connectProvider()` | external system context | structured tools from ExecuFunction, Obsidian, etc. |
| `connectProvider()` | external system context | structured tools from Siftable, Obsidian, etc. |
| `createStore()` / `createPgStore()` | persistence | storage layer, not retrieval |

Rule of thumb:
Expand Down Expand Up @@ -161,7 +161,7 @@ const agent = await createChatAgent({
provider: "gemini",
preset: "study-buddy",
memory: true, // conversation + fact memory (on by default)
providers: ["execufunction"], // connect external context
providers: ["siftable"], // connect external context
});

// Use it four ways:
Expand Down Expand Up @@ -222,23 +222,23 @@ Context providers bring external systems (task managers, calendars, CRM, knowled

```typescript
import { connectProvider, contextPrompt } from "./framework/index.js";
import { createExecuFunctionProvider } from "./providers/execufunction/index.js";
import { createSiftableProvider } from "./providers/execufunction/index.js";

// Connect — registers 17 tools tagged "context" + "context:execufunction"
const exf = await connectProvider(
createExecuFunctionProvider({ token: process.env.EXF_PAT }),
// Connect — registers tools tagged "context" + "context:siftable"
const sift = await connectProvider(
createSiftableProvider({ token: process.env.SIFT_PAT }),
registry,
);

// Inject active tasks + upcoming events into agent system prompts
const context = await contextPrompt([exf]);
const context = await contextPrompt([sift]);
```

The `ContextProvider` interface is pluggable — implement `metadata`, `connect()`, and `createTools()` to bring any backend into the framework. See [Architecture](docs/ARCHITECTURE.md#context-providers) for the full interface.

| Provider | Status | Capabilities |
|----------|--------|--------------|
| [ExecuFunction](src/providers/execufunction/) | Built-in | tasks, projects, calendar, knowledge, people, organizations, codebase |
| [Siftable](src/providers/execufunction/) | Built-in | tasks, projects, calendar, knowledge, people, organizations, codebase |
| Obsidian | Template (planned) | knowledge |
| Notion | Template (planned) | knowledge, tasks, projects |

Expand Down Expand Up @@ -318,10 +318,10 @@ The registry validates parameters before handlers run, so schema errors are surf

### Siftable context provider

`src/providers/execufunction/` exposes [Siftable](https://execufunction.com)
`src/providers/execufunction/` exposes [Siftable](https://siftable.io)
(formerly ExecuFunction) as an openFunctions [`ContextProvider`](src/framework/context.ts).
The provider wraps the published [`@siftable/mcp-server`](https://www.npmjs.com/package/@siftable/mcp-server)
SDK; 31 tools across 10 domains are exposed today (tasks, calendar,
SDK; tools across 10 domains are exposed today (tasks, calendar,
knowledge, projects, people, organizations, codebase, work items, vault,
datasets, code memories). The full SDK surface (~111 methods) is reachable
via `client.raw()` for any tool not yet wrapped.
Expand Down
Loading