@theronap/agnoclast-mcp 0.9.200 → 0.9.201
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/server.mjs +2 -51
- package/package.json +1 -1
package/lib/server.mjs
CHANGED
|
@@ -2837,57 +2837,8 @@ function renderNudge(payload) {
|
|
|
2837
2837
|
},
|
|
2838
2838
|
)
|
|
2839
2839
|
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
{
|
|
2843
|
-
title: 'Meetings that ended and were never written up',
|
|
2844
|
-
description: 'Turn meetings that have already ENDED into "capture what came out of this" obligations. ⚠ THE OBLIGATION IS NOT "ATTEND" — your calendar already does that, and putting every scheduled meeting into your obligations list would bury it (90 of 120 calendar records are recurring birthdays). The gap this fills is real and documented: meeting substance lands wherever the session that heard about it happened to be working, and a walkthrough with no note at all is the normal outcome. ⚠ DRY-RUN BY DEFAULT — it reports what it WOULD create, including every meeting it skipped and why, and writes nothing until apply: true. Excluded on purpose: meetings with no attendee but you (a birthday or a solo hold owes nobody anything), all-day markers, cancelled events, anything with no recorded end, and anything outside the lookback window — no backfill, because obligations nobody will ever action are how a list stops being read. Each one is discharged by a captured transcript ARRIVING, never by one being absent.',
|
|
2845
|
-
inputSchema: {
|
|
2846
|
-
lookback_days: z.number().optional().describe('how far back to sweep (default 14, max 90)'),
|
|
2847
|
-
apply: z.boolean().optional().describe('false/absent = dry run (default). true actually creates them.'),
|
|
2848
|
-
},
|
|
2849
|
-
},
|
|
2850
|
-
async ({ lookback_days, apply }) => {
|
|
2851
|
-
let res
|
|
2852
|
-
try {
|
|
2853
|
-
res = await fetchCortex(`${BASE}/api/obligations/from-calendar`, {
|
|
2854
|
-
method: 'POST',
|
|
2855
|
-
headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' },
|
|
2856
|
-
body: JSON.stringify({ lookbackDays: lookback_days, apply: apply === true }),
|
|
2857
|
-
})
|
|
2858
|
-
} catch (e) { return toolError(`Could not reach the producer: ${e.message}`) }
|
|
2859
|
-
const out = await res.json().catch(() => null)
|
|
2860
|
-
if (!res.ok) return toolError(`Could not run: ${out?.error ?? res.status}`)
|
|
2861
|
-
|
|
2862
|
-
const cands = out?.candidates ?? []
|
|
2863
|
-
const eligible = cands.filter((c) => !c.skipped)
|
|
2864
|
-
const lines = []
|
|
2865
|
-
if (out.mode === 'dry-run') {
|
|
2866
|
-
lines.push(`DRY RUN \u2014 nothing written. ${out.scanned} meeting(s) scanned, ${eligible.length} would become obligations.`)
|
|
2867
|
-
} else {
|
|
2868
|
-
lines.push(`${out.created} obligation(s) created from ${out.scanned} meeting(s) scanned.`)
|
|
2869
|
-
}
|
|
2870
|
-
if (eligible.length) {
|
|
2871
|
-
lines.push('', 'Would track:')
|
|
2872
|
-
for (const c of eligible.slice(0, 15)) {
|
|
2873
|
-
lines.push(` ${c.endedAt.slice(0, 10)} ${c.title ?? '(untitled)'} \u2014 ${c.attendees.length} attendee(s)`)
|
|
2874
|
-
}
|
|
2875
|
-
}
|
|
2876
|
-
// \u26a0 THE SKIPS ARE PRINTED, NOT SUMMARISED AWAY. A producer that silently drops most of its
|
|
2877
|
-
// input reads as "there was nothing to do", which is indistinguishable from a broken filter.
|
|
2878
|
-
const skipped = cands.filter((c) => c.skipped)
|
|
2879
|
-
if (skipped.length) {
|
|
2880
|
-
const byReason = {}
|
|
2881
|
-
for (const c of skipped) byReason[c.skipped] = (byReason[c.skipped] ?? 0) + 1
|
|
2882
|
-
lines.push('', `Skipped ${skipped.length}:`)
|
|
2883
|
-
for (const [reason, n] of Object.entries(byReason).sort((a, b) => b[1] - a[1])) {
|
|
2884
|
-
lines.push(` ${n} ${reason}`)
|
|
2885
|
-
}
|
|
2886
|
-
}
|
|
2887
|
-
if (out.mode === 'dry-run' && eligible.length) lines.push('', 'Re-run with apply: true to create them.')
|
|
2888
|
-
return { content: [{ type: 'text', text: lines.join('\n') }] }
|
|
2889
|
-
},
|
|
2890
|
-
)
|
|
2840
|
+
// `obligations_from_calendar` was removed in 0.9.201 (2026-10-02): meetings no longer create
|
|
2841
|
+
// obligations by themselves. The server answers 410 to older clients that still offer it.
|
|
2891
2842
|
|
|
2892
2843
|
server.registerTool(
|
|
2893
2844
|
'my_obligations',
|
package/package.json
CHANGED