feat: add Dakera Memory tool plugin (v0.0.1)#2642
Conversation
cc17bac to
3ef4e65
Compare
Persistent, decay-weighted memory for Dify agents backed by a self-hosted Dakera server. Six tools (store, recall, search, get, update, forget) over the Dakera REST API, packaged as dakera-0.0.1.difypkg. Recall/Search surface memory IDs so results chain into Get/Update/Forget; Forget requires a selector. Full plugin source + pytest suite included for review (tests excluded from package). Co-Authored-By: Paperclip <noreply@paperclip.ing>
3ef4e65 to
f4c2d1d
Compare
|
Continued hardening of the plugin:
Package rebuilt cleanly (byte-identical to source, no |
crazywoola
left a comment
There was a problem hiding this comment.
Thanks for the submission. A few required checks need fixes before this can be approved.
| Check | Status | Required action |
|---|---|---|
Single .difypkg |
❌ Fail | Only one .difypkg file change is allowed. This PR also changes unpacked plugin source files; please submit only the packaged .difypkg. |
| PR language | ✅ Pass | None. |
| Project structure | ✅ Pass | None. |
| Manifest author | ✅ Pass | None. |
| Icon | ✅ Pass | None. |
| Version availability | ✅ Pass | None. |
| README language | ✅ Pass | None. |
PRIVACY.md |
✅ Pass | None. |
| Dependencies / install / packaging | ✅ Pass | CI pre-check passed. |
dify_plugin version |
✅ Pass | None. |
| CI pre-check | ❌ Fail | No pre-check-plugin result was reported. Once only the package is changed, the pre-check should run. |
Next steps
- Only one
.difypkgfile change is allowed. This PR also changes unpacked plugin source files; please submit only the packaged.difypkg. - No
pre-check-pluginresult was reported. Once only the package is changed, the pre-check should run.
Per marketplace review (crazywoola): a plugin PR may change only the single packaged .difypkg. Remove the unpacked plugin source from the PR; the package already bundles it (tests excluded via .difyignore).
|
Thanks for the review, @crazywoola — addressed both required checks. The PR now changes a single file, With only the package changed, |
crazywoola
left a comment
There was a problem hiding this comment.
✅ LGTM
Decision: Approve
Check Results
| Check | Status | Detail |
|---|---|---|
Single .difypkg |
✅ Pass | Exactly one package file changed. |
| Project structure | ✅ Pass | manifest.yaml, README.md, PRIVACY.md, and _assets/ are present. |
| README language | ✅ Pass | No Chinese characters found in README.md. |
dify_plugin version |
✅ Pass | Package declares dify_plugin>=0.9.0. |
| Install / packaging | ✅ Pass | Local dependency install, startup, and packaging checks passed; GitHub did not show a fresh pre-check result, so I verified the package locally. |
LGTM.
Plugin Submission
Plugin information
Submission type
What changed
New tool plugin that gives Dify agents persistent, decay-weighted memory backed by a
self-hosted Dakera server. Dakera importance-scores memories and lets them
decay over time, so stale context stops competing with fresh, relevant facts across sessions.
Six tools, namespaced by
agent_id, covering the full memory lifecycle:importance0–1,session_id,tags).POST /v1/memory/storePOST /v1/memory/recallPOST /v1/memory/searchGET /v1/memory/get/{id}PUT /v1/memory/update/{id}POST /v1/memory/forgetRecall and Search return each memory's ID, so results chain into Get / Update / Forget. Forget
requires a selector (IDs, session, tags, or importance threshold), so it can't wipe a namespace by
accident.
Credentials are user-supplied and point at the user's own self-hosted server: a base URL
(default port
3000) and an optionaldk-API key. Saving credentials probesGET /health/live. No third-party accounts; all memory data stays on the server the user runs.The full plugin source is included under
dakera/dakera/(manifest, provider, tools, README,PRIVACY.md) so the definition is reviewable in-diff, alongside the packageddakera-0.0.1.difypkg.This resubmits, as a proper Marketplace plugin, an integration that was previously opened against
the
langgenius/difymonorepo (langgenius/dify#38267) and closed with guidance to ship it as aplugin here.
Risk level
Selected Medium because the plugin sends user-provided memory content to an external service at a
user-configured base URL. It does not execute code/SQL/commands, does no browser automation,
and does not fetch arbitrary per-invocation URLs — the destination is fixed per credential set.
The Forget tool refuses an unscoped mass-delete (it requires at least one selector).
Required checks
.envfiles,.gitdirectories, virtual environments, caches, logs, or IDE files.PRIVACY.mdor a hosted privacy policy, andmanifest.yamlreferences it.Security and privacy notes
The plugin sends the memory content / query the user (or agent) supplies to the self-hosted Dakera
server URL configured in credentials, over HTTP(S). The
dk-API key is stored as a Dify secret,sent only as a
Bearertoken, and never echoed in tool output. Requests use bounded timeouts(5s health check, 15s tool calls). The Forget tool requires an explicit selector before it will
delete. No command/code/SQL execution, no filesystem or browser access, no arbitrary URL fetching,
and no handling of health/financial/biometric data.
Local validation
Reviewer notes
Tested locally: packaging with the official
difyCLI and a full request/response smoke test ofall six tools + credential validation against a mock server. I have not yet exercised it on a live
Dify Cloud tenant; behavior is standard
dify_pluginTool/ToolProviderusage mirroring theexisting
bailian_memorytool plugin, and the runtime contract is covered by the smoke test.Dakera is self-hosted, so trying the plugin requires running a Dakera server
(https://github.com/dakera-ai/dakera-deploy).