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
43 changes: 43 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: weekly
day: monday
time: "09:00"
timezone: "UTC"
open-pull-requests-limit: 10
groups:
dev-dependencies:
dependency-type: development
update-types:
- patch
- minor
runtime-patch-minor:
dependency-type: production
update-types:
- patch
- minor
runtime-major:
dependency-type: production
update-types:
- major
labels:
- dependencies
- automated
commit-message:
prefix: "chore"

- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
day: monday
time: "09:15"
timezone: "UTC"
labels:
- dependencies
- ci
commit-message:
prefix: "chore"
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Use Node.js 22
- name: Use Node.js from .nvmrc
uses: actions/setup-node@v4
with:
node-version: 22
node-version-file: .nvmrc
cache: npm

- name: Install dependencies
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/daily-digest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
node-version-file: .nvmrc
cache: "npm"
- name: Install dependencies
run: npm ci
Expand Down
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
24
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,12 @@ Where the value is delivered.
```bash
git clone <repo-url>
cd synapse
nvm use
npm install
```

Node.js runtime is pinned in `.nvmrc` and enforced in `package.json` (`engines.node`).

2. **Configure Environment**
Copy `.env.example` to `.env` and populate it with your credentials.
```bash
Expand Down Expand Up @@ -86,6 +89,14 @@ Synapse is configured via environment variables.
- `npm run discourse:debug`: Validate Discourse connectivity.
- `npm run models:list`: List available Gemini models.

## Dependency Maintenance

- Node.js runtime is pinned via `.nvmrc`, and CI reads from that file.
- Automated update PRs are configured in `.github/dependabot.yml`.
- Review patch/minor updates weekly and schedule major updates intentionally.
- `package.json` includes npm `overrides` for vulnerable transitive packages (`diff`, `undici`) so security patches can be applied without forcing a breaking direct dependency downgrade.
- Keep these `overrides` only while upstream trees require them; remove once direct dependency updates naturally resolve to patched transitive versions.

## Coverage

- Coverage is generated natively in GitHub Actions (`CI - Tests & Coverage`) in report-only mode.
Expand Down
14 changes: 11 additions & 3 deletions dist/services/llm/AiSdkProcessor.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,19 @@ class AiSdkProcessor {
maxOutputTokens: this.config.MAX_SUMMARY_TOKENS,
temperature: 0.2,
});
const parsed = schemas_1.DigestItemSchema.safeParse(object);
if (!parsed.success) {
return {
headline: defaultHeadline,
url: defaultUrl,
summary: "Error generating summary."
};
}
// Fallback if model hallucinates empty fields, though schema enforces strings.
return {
headline: object.headline || defaultHeadline,
url: object.url || defaultUrl,
summary: object.summary
headline: parsed.data.headline || defaultHeadline,
url: parsed.data.url || defaultUrl,
summary: parsed.data.summary
};
}
catch (err) {
Expand Down
Loading