omni-notify-mcp 1.3.285 → 1.3.286
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/dist/gateway/chatPage.js
CHANGED
|
@@ -521,6 +521,7 @@ async function listView(shelf) {
|
|
|
521
521
|
{ key: "origin", name: "From", min: 72, weight: 0.7 },
|
|
522
522
|
{ key: "provider", name: "Provider", min: 88, weight: 0.9 },
|
|
523
523
|
{ key: "id", name: "Conversation ID", min: 190, weight: 1.5 },
|
|
524
|
+
{ key: "process", name: "Process ID", min: 96, weight: 0.8 },
|
|
524
525
|
{ key: "opened", name: "Opened", min: 152, weight: 1, time: true },
|
|
525
526
|
{ key: "updated", name: "Updated", min: 152, weight: 1, time: true },
|
|
526
527
|
{ key: "actions", name: "Actions", min: 216, weight: 0, plain: true }
|
|
@@ -532,6 +533,7 @@ async function listView(shelf) {
|
|
|
532
533
|
if (key === "provider") return c.provider;
|
|
533
534
|
if (key === "origin") return originOf(c);
|
|
534
535
|
if (key === "id") return c.id;
|
|
536
|
+
if (key === "process") return typeof c.pid === "number" ? c.pid : -1;
|
|
535
537
|
if (key === "opened") return Date.parse(c.createdAt);
|
|
536
538
|
if (key === "updated") return Date.parse(c.updatedAt);
|
|
537
539
|
return "";
|
|
@@ -552,6 +554,7 @@ async function listView(shelf) {
|
|
|
552
554
|
if (col.key === "provider") return c.provider;
|
|
553
555
|
if (col.key === "origin") return originOf(c);
|
|
554
556
|
if (col.key === "id") return c.id;
|
|
557
|
+
if (col.key === "process") return typeof c.pid === "number" ? String(c.pid) : "no process";
|
|
555
558
|
if (col.key === "opened") return storedStamp(c.createdAt);
|
|
556
559
|
if (col.key === "updated") return storedStamp(c.updatedAt);
|
|
557
560
|
return "";
|
package/dist/gateway/mcpDoor.js
CHANGED
|
@@ -44,6 +44,7 @@ agent_prompt sends the user's request to that agent and returns its answer. It c
|
|
|
44
44
|
A fresh agent starts in the project folder the request is about: the project named in the request text, else a board-bearing default (never a folder without a BACKLOG.md, unless project names that folder explicitly), under the workspace root (${workspaceRoot()}). The only projects are ${allowedProjects().join(" and ")}; project accepts exactly those names, never a path. agent_prompt needs no folder path and no conversation id; pass project only to pick the project yourself. agent_projects lists the projects.
|
|
45
45
|
agent_open opens an empty conversation and starts nothing: it takes no text and no project, spends nothing and returns the id of a session whose project is picked with agent_project and then asked with agent_send. A conversation opened with no project resolves one from its first message's own text, else the default project.
|
|
46
46
|
An agent works on the project it runs in: its own folder is the board it writes to, so work belonging to another project is never done from this agent — tell the user in one line which project the work belongs to, then start that project's own agent: agent_start with project naming the project and text carrying the request (agent_prompt with project for a quick answer), read its answer with agent_wait and relay it.
|
|
47
|
+
A request that changes a project is a Story, and the Story belongs on that project's own board: the agent of that project — this conversation's own agent when the work is this project's, the agent this conversation starts with agent_start as above when it belongs to another project — files it or joins it with the bullseye-backlog MCP server that project's folder declares, before any work is done on it. Once a Story is on the board the normal BB → FleetView workflow owns its execution and dispatches the subagents that run it, so BN stays free for the user's questions and follows the Story's progress on the board. A short read-only question or a status check is answered directly. Every agent respects the shared claim store, the one claims file this machine's doors write, so no Story is executed twice: a message naming a Story claims that Story in its conversation's own name for the length of its turn — a read-only question or a status check included — and a message whose Story another session already claims fails that turn in the claims file's own words, naming the holder. The long task in the example below goes the same way: agent_start and agent_wait are how such a request is sent and read, and the Story it becomes is filed and run as above.
|
|
47
48
|
Each agent_prompt goes on with the same agent as the previous one from this connection, also when a different project is named; new=true starts a fresh agent. With no conversation named, BN also starts a fresh agent by itself when the newest agent is busy, is not waiting for an answer to a question it asked, and the ask does not point at the work already under way — so the ask never waits behind that turn. An ask that does point at the work under way (a follow-up, "are you done?", "stop") goes to the agent that is doing that work, even when a later independent ask opened another agent. A stopped conversation resumes on its next message.
|
|
48
49
|
A call that finishes inside the wait returns the end of the turn itself — an answer, a question only the user can answer, a failure, or stopped when the conversation was stopped — and that is shown to the user as it is. When it returns working=true the turn is still running: call agent_wait at once with the id and the after it gave, and call it again the moment each read returns, until an answer, question or failed event arrives, or the conversation is stopped. The events that end the turn carry kind answer, ask, failed or stopped (the field agent_prompt returns is question, the event kind is ask), so read them by kind. The working state is not an answer and neither is a read that brought only progress events — never pass either of them to the user as one.
|
|
49
50
|
Pass new=true whenever the question does not depend on the work already running: a fresh agent takes the question in a conversation of its own instead of waiting behind this connection's current turn, which can be minutes on a long one. Naming a conversation sends the call to that agent whatever new says, so to start a fresh one, pass new=true and leave conversation out.
|
|
@@ -207,7 +207,7 @@ async function newAgentView(){
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
async function cliAttach(id,origin){
|
|
210
|
-
var mine=show("terminal","Native CLI"),toolbar=el("div","setup"),back=el("button","","↩ Back"),reattach=el("button","","🔌 Reattach"),copy=el("button","","⧉ Copy selection"),close=el("button","","⏹ Close CLI"),host=el("div");host.id="terminal";main.style.display="flex";main.style.flexDirection="column";host.style.flex="1";host.style.minHeight="0";toolbar.append(back,reattach,copy,close,el("span","origin",origin));main.append(toolbar,host);
|
|
210
|
+
var mine=show("terminal","Native CLI · "+id),toolbar=el("div","setup"),back=el("button","","↩ Back"),reattach=el("button","","🔌 Reattach"),copy=el("button","","⧉ Copy selection"),close=el("button","","⏹ Close CLI"),host=el("div");host.id="terminal";main.style.display="flex";main.style.flexDirection="column";host.style.flex="1";host.style.minHeight="0";toolbar.append(back,reattach,copy,close,el("span","origin",origin));main.append(toolbar,host);
|
|
211
211
|
terminal=new Terminal({cursorBlink:true,theme:{background:"#101217"},allowProposedApi:true});fitAddon=new FitAddon.FitAddon();terminal.loadAddon(fitAddon);terminal.open(host);terminal.focus();var term=terminal;
|
|
212
212
|
// xterm turns every keystroke into the CLI's input, so Ctrl+C and Ctrl+V never reach the browser's own clipboard.
|
|
213
213
|
// Returning false hands that one key back to the browser: Ctrl+C copies the selected text and does not interrupt
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omni-notify-mcp",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.286",
|
|
4
4
|
"description": "Reach your AI agents from anywhere — and let them reach you. One stdio process serves the whole tool surface to Claude Code, GitHub Copilot Chat and Codex: desktop, Telegram, Slack, ntfy, Discord, Teams and SMS are configured in one file, and agents notify you when long work finishes or a decision is needed, ask you a question and wait for your answer, and receive and reply to the messages you send them — with Do Not Disturb and idle detection deciding what actually gets through.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|