247-cli 2.0.1 → 2.1.0
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/agent/dist/db/index.d.ts.map +1 -1
- package/agent/dist/db/index.js +26 -0
- package/agent/dist/db/index.js.map +1 -1
- package/agent/dist/db/push-subscriptions.d.ts +44 -0
- package/agent/dist/db/push-subscriptions.d.ts.map +1 -0
- package/agent/dist/db/push-subscriptions.js +98 -0
- package/agent/dist/db/push-subscriptions.js.map +1 -0
- package/agent/dist/db/schema.d.ts +2 -2
- package/agent/dist/db/schema.d.ts.map +1 -1
- package/agent/dist/db/schema.js +13 -1
- package/agent/dist/db/schema.js.map +1 -1
- package/agent/dist/push/sender.d.ts +26 -0
- package/agent/dist/push/sender.d.ts.map +1 -0
- package/agent/dist/push/sender.js +122 -0
- package/agent/dist/push/sender.js.map +1 -0
- package/agent/dist/push/vapid.d.ts +25 -0
- package/agent/dist/push/vapid.d.ts.map +1 -0
- package/agent/dist/push/vapid.js +81 -0
- package/agent/dist/push/vapid.js.map +1 -0
- package/agent/dist/routes/push.d.ts +7 -0
- package/agent/dist/routes/push.d.ts.map +1 -0
- package/agent/dist/routes/push.js +98 -0
- package/agent/dist/routes/push.js.map +1 -0
- package/agent/dist/server.d.ts.map +1 -1
- package/agent/dist/server.js +5 -0
- package/agent/dist/server.js.map +1 -1
- package/agent/dist/status.d.ts.map +1 -1
- package/agent/dist/status.js +17 -8
- package/agent/dist/status.js.map +1 -1
- package/agent/node_modules/247-shared/package.json +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAqC,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAalF;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAqB/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,QAAQ,CAIpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAqC,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAalF;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAqB/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,QAAQ,CAIpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAqSD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CA0DhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAkBA;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/agent/dist/db/index.js
CHANGED
|
@@ -89,6 +89,9 @@ function runMigrations(database) {
|
|
|
89
89
|
if (currentVersion < 7) {
|
|
90
90
|
migrateToV7(database);
|
|
91
91
|
}
|
|
92
|
+
if (currentVersion < 8) {
|
|
93
|
+
migrateToV8(database);
|
|
94
|
+
}
|
|
92
95
|
// Record the new version
|
|
93
96
|
database
|
|
94
97
|
.prepare(`
|
|
@@ -260,6 +263,29 @@ function migrateToV7(_database) {
|
|
|
260
263
|
// Previously created projects and issues tables, but this feature has been removed
|
|
261
264
|
console.log('[DB] v7 migration: No-op (projects/issues feature removed)');
|
|
262
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Migration to v8: Add push_subscriptions table for Web Push notifications
|
|
268
|
+
*/
|
|
269
|
+
function migrateToV8(database) {
|
|
270
|
+
// Check if table already exists
|
|
271
|
+
const tableExists = database
|
|
272
|
+
.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='push_subscriptions'`)
|
|
273
|
+
.get();
|
|
274
|
+
if (!tableExists) {
|
|
275
|
+
console.log('[DB] v8 migration: Creating push_subscriptions table');
|
|
276
|
+
database.exec(`
|
|
277
|
+
CREATE TABLE push_subscriptions (
|
|
278
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
279
|
+
endpoint TEXT UNIQUE NOT NULL,
|
|
280
|
+
keys_p256dh TEXT NOT NULL,
|
|
281
|
+
keys_auth TEXT NOT NULL,
|
|
282
|
+
user_agent TEXT,
|
|
283
|
+
created_at INTEGER NOT NULL
|
|
284
|
+
);
|
|
285
|
+
CREATE INDEX idx_push_endpoint ON push_subscriptions(endpoint);
|
|
286
|
+
`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
263
289
|
/**
|
|
264
290
|
* Get current schema version
|
|
265
291
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,+CAA+C;AAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE3C,8BAA8B;AAC9B,IAAI,EAAE,GAA6B,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC;IAE/B,4CAA4C;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAC9C,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExB,oDAAoD;IACpD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEhC,iBAAiB;IACjB,aAAa,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,EAAE,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,QAA2B;IAChD,MAAM,cAAc,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAEzD,IAAI,cAAc,GAAG,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,iCAAiC,cAAc,QAAQ,cAAc,EAAE,CAAC,CAAC;QAErF,0DAA0D;QAC1D,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEjC,iDAAiD;QACjD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,yBAAyB;QACzB,QAAQ;aACL,OAAO,CACN;;;KAGH,CACE;aACA,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,cAAc,EAAE,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,cAAc,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,uEAAuE;IACvE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAA2B;IACxD,iCAAiC;IACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,0BAA0B,CAA4B,CAAC;IAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACjE,CAAC;IAED,yBAAyB;IACzB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IAC1F,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtE,kBAAkB;IAClB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACvE,CAAC;IAED,yBAAyB;IACzB,MAAM,cAAc,GAAG;QACrB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,4CAA4C,EAAE;QACpE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,+CAA+C,EAAE;QAC1E,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,uDAAuD,EAAE;QACvF,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qDAAqD,EAAE;QACnF,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,uDAAuD,EAAE;KACxF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG;QACnB;YACE,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,iEAAiE;SACvE;QACD,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,mDAAmD,EAAE;QAClF;YACE,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,mEAAmE;SACzE;QACD,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,mDAAmD,EAAE;KACnF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,eAAe,GAAG;QACtB,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,oDAAoD,EAAE;QACpF,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,kDAAkD,EAAE;KACjF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAA2B;IAC9C,sCAAsC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,0BAA0B,CAA4B,CAAC;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAEvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAA2B;IAC9C,6CAA6C;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IACnF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAEpE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAA2B;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IACnF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG;QACrB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,4CAA4C,EAAE;QACpE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,+CAA+C,EAAE;QAC1E,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,uDAAuD,EAAE;QACvF,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qDAAqD,EAAE;QACnF,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,uDAAuD,EAAE;KACxF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAA2B;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IACnF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG;QACnB;YACE,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,iEAAiE;SACvE;QACD,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,mDAAmD,EAAE;QAClF;YACE,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,mEAAmE;SACzE;QACD,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,mDAAmD,EAAE;KACnF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAA2B;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IACnF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,eAAe,GAAG;QACtB,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,oDAAoD,EAAE;QACpF,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,kDAAkD,EAAE;KACjF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,SAA4B;IAC/C,mFAAmF;IACnF,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAA2B;IAC9C,gCAAgC;IAChC,MAAM,WAAW,GAAG,QAAQ;SACzB,OAAO,CAAC,iFAAiF,CAAC;SAC1F,GAAG,EAAE,CAAC;IAET,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;KAUb,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,QAA2B;IAC1D,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,WAAW,GAAG,QAAQ;aACzB,OAAO,CACN;;;KAGH,CACE;aACA,GAAG,EAAE,CAAC;QAET,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ;aACjB,OAAO,CACN;;KAEH,CACE;aACA,GAAG,EAAiC,CAAC;QAExC,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAA2B;IACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAE3E,4BAA4B;IAC5B,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAE/E,CAAC;IAEF,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAQlC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;;;KAG/B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAyB,EAAE,EAAE;YACpE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC;oBACT,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;oBACxC,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,SAAS,EAAE,GAAG,CAAC,SAAS;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,YAAY,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,YAAY,CAAC,MAAM,yBAAyB,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAK9B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAE9E,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,EAEnF,CAAC;IACF,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAEtF,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,KAAK;QACxB,OAAO,EAAE,OAAO,CAAC,KAAK;QACtB,YAAY,EAAE,YAAY,CAAC,KAAK;KACjC,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push subscription database operations.
|
|
3
|
+
* Stores Web Push subscriptions for sending notifications when browser is closed.
|
|
4
|
+
*/
|
|
5
|
+
import type webpush from 'web-push';
|
|
6
|
+
export interface DbPushSubscription {
|
|
7
|
+
id: number;
|
|
8
|
+
endpoint: string;
|
|
9
|
+
keys_p256dh: string;
|
|
10
|
+
keys_auth: string;
|
|
11
|
+
user_agent: string | null;
|
|
12
|
+
created_at: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create the push_subscriptions table (called during migration)
|
|
16
|
+
*/
|
|
17
|
+
export declare const CREATE_PUSH_SUBSCRIPTIONS_SQL = "\nCREATE TABLE IF NOT EXISTS push_subscriptions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n endpoint TEXT UNIQUE NOT NULL,\n keys_p256dh TEXT NOT NULL,\n keys_auth TEXT NOT NULL,\n user_agent TEXT,\n created_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);\n";
|
|
18
|
+
/**
|
|
19
|
+
* Save a push subscription.
|
|
20
|
+
* Uses REPLACE to handle re-subscriptions from the same endpoint.
|
|
21
|
+
*/
|
|
22
|
+
export declare function saveSubscription(subscription: webpush.PushSubscription, userAgent?: string): DbPushSubscription;
|
|
23
|
+
/**
|
|
24
|
+
* Delete a push subscription by endpoint.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deleteSubscription(endpoint: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Get all active push subscriptions.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAllSubscriptions(): DbPushSubscription[];
|
|
31
|
+
/**
|
|
32
|
+
* Get subscription count.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getSubscriptionCount(): number;
|
|
35
|
+
/**
|
|
36
|
+
* Convert DB subscription to web-push format.
|
|
37
|
+
*/
|
|
38
|
+
export declare function toWebPushSubscription(dbSub: DbPushSubscription): webpush.PushSubscription;
|
|
39
|
+
/**
|
|
40
|
+
* Delete expired/invalid subscriptions.
|
|
41
|
+
* Called when a push fails with 404 or 410 status.
|
|
42
|
+
*/
|
|
43
|
+
export declare function deleteInvalidSubscriptions(endpoints: string[]): number;
|
|
44
|
+
//# sourceMappingURL=push-subscriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-subscriptions.d.ts","sourceRoot":"","sources":["../../src/db/push-subscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B,qUAWzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,EACtC,SAAS,CAAC,EAAE,MAAM,GACjB,kBAAkB,CA0BpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAG1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAQzF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAUtE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push subscription database operations.
|
|
3
|
+
* Stores Web Push subscriptions for sending notifications when browser is closed.
|
|
4
|
+
*/
|
|
5
|
+
import { getDatabase } from './index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create the push_subscriptions table (called during migration)
|
|
8
|
+
*/
|
|
9
|
+
export const CREATE_PUSH_SUBSCRIPTIONS_SQL = `
|
|
10
|
+
CREATE TABLE IF NOT EXISTS push_subscriptions (
|
|
11
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
12
|
+
endpoint TEXT UNIQUE NOT NULL,
|
|
13
|
+
keys_p256dh TEXT NOT NULL,
|
|
14
|
+
keys_auth TEXT NOT NULL,
|
|
15
|
+
user_agent TEXT,
|
|
16
|
+
created_at INTEGER NOT NULL
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);
|
|
20
|
+
`;
|
|
21
|
+
/**
|
|
22
|
+
* Save a push subscription.
|
|
23
|
+
* Uses REPLACE to handle re-subscriptions from the same endpoint.
|
|
24
|
+
*/
|
|
25
|
+
export function saveSubscription(subscription, userAgent) {
|
|
26
|
+
const db = getDatabase();
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
const stmt = db.prepare(`
|
|
29
|
+
INSERT OR REPLACE INTO push_subscriptions
|
|
30
|
+
(endpoint, keys_p256dh, keys_auth, user_agent, created_at)
|
|
31
|
+
VALUES (@endpoint, @p256dh, @auth, @userAgent, @createdAt)
|
|
32
|
+
`);
|
|
33
|
+
stmt.run({
|
|
34
|
+
endpoint: subscription.endpoint,
|
|
35
|
+
p256dh: subscription.keys.p256dh,
|
|
36
|
+
auth: subscription.keys.auth,
|
|
37
|
+
userAgent: userAgent ?? null,
|
|
38
|
+
createdAt: now,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
id: 0, // Not needed for return
|
|
42
|
+
endpoint: subscription.endpoint,
|
|
43
|
+
keys_p256dh: subscription.keys.p256dh,
|
|
44
|
+
keys_auth: subscription.keys.auth,
|
|
45
|
+
user_agent: userAgent ?? null,
|
|
46
|
+
created_at: now,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Delete a push subscription by endpoint.
|
|
51
|
+
*/
|
|
52
|
+
export function deleteSubscription(endpoint) {
|
|
53
|
+
const db = getDatabase();
|
|
54
|
+
const result = db.prepare('DELETE FROM push_subscriptions WHERE endpoint = ?').run(endpoint);
|
|
55
|
+
return result.changes > 0;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get all active push subscriptions.
|
|
59
|
+
*/
|
|
60
|
+
export function getAllSubscriptions() {
|
|
61
|
+
const db = getDatabase();
|
|
62
|
+
return db.prepare('SELECT * FROM push_subscriptions').all();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get subscription count.
|
|
66
|
+
*/
|
|
67
|
+
export function getSubscriptionCount() {
|
|
68
|
+
const db = getDatabase();
|
|
69
|
+
const result = db.prepare('SELECT COUNT(*) as count FROM push_subscriptions').get();
|
|
70
|
+
return result.count;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Convert DB subscription to web-push format.
|
|
74
|
+
*/
|
|
75
|
+
export function toWebPushSubscription(dbSub) {
|
|
76
|
+
return {
|
|
77
|
+
endpoint: dbSub.endpoint,
|
|
78
|
+
keys: {
|
|
79
|
+
p256dh: dbSub.keys_p256dh,
|
|
80
|
+
auth: dbSub.keys_auth,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Delete expired/invalid subscriptions.
|
|
86
|
+
* Called when a push fails with 404 or 410 status.
|
|
87
|
+
*/
|
|
88
|
+
export function deleteInvalidSubscriptions(endpoints) {
|
|
89
|
+
if (endpoints.length === 0)
|
|
90
|
+
return 0;
|
|
91
|
+
const db = getDatabase();
|
|
92
|
+
const placeholders = endpoints.map(() => '?').join(',');
|
|
93
|
+
const result = db
|
|
94
|
+
.prepare(`DELETE FROM push_subscriptions WHERE endpoint IN (${placeholders})`)
|
|
95
|
+
.run(...endpoints);
|
|
96
|
+
return result.changes;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=push-subscriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-subscriptions.js","sourceRoot":"","sources":["../../src/db/push-subscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYzC;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;CAW5C,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAsC,EACtC,SAAkB;IAElB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC;QACP,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;QAChC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI;QAC5B,SAAS,EAAE,SAAS,IAAI,IAAI;QAC5B,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,CAAC,EAAE,wBAAwB;QAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;QACrC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI;QACjC,UAAU,EAAE,SAAS,IAAI,IAAI;QAC7B,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,EAA0B,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,EAEhF,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE;YACJ,MAAM,EAAE,KAAK,CAAC,WAAW;YACzB,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAAmB;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAErC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,qDAAqD,YAAY,GAAG,CAAC;SAC7E,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAErB,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
|
|
@@ -77,8 +77,8 @@ export interface UpsertEnvironmentInput {
|
|
|
77
77
|
isDefault: boolean;
|
|
78
78
|
variables: Record<string, string>;
|
|
79
79
|
}
|
|
80
|
-
export declare const SCHEMA_VERSION =
|
|
81
|
-
export declare const CREATE_TABLES_SQL = "\n-- Sessions: current state of terminal sessions\nCREATE TABLE IF NOT EXISTS sessions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n project TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'init',\n attention_reason TEXT,\n last_event TEXT,\n last_activity INTEGER NOT NULL,\n last_status_change INTEGER NOT NULL,\n environment_id TEXT,\n archived_at INTEGER,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n -- StatusLine metrics (v4)\n model TEXT,\n cost_usd REAL,\n context_usage INTEGER,\n lines_added INTEGER,\n lines_removed INTEGER,\n -- Ralph mode fields (v5)\n ralph_enabled INTEGER DEFAULT 0,\n ralph_config TEXT,\n ralph_iteration INTEGER DEFAULT 0,\n ralph_status TEXT,\n -- Worktree isolation (v6)\n worktree_path TEXT,\n branch_name TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_sessions_name ON sessions(name);\nCREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project);\nCREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);\nCREATE INDEX IF NOT EXISTS idx_sessions_last_activity ON sessions(last_activity);\n\n-- Status history: audit trail of status changes\nCREATE TABLE IF NOT EXISTS status_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n session_name TEXT NOT NULL,\n status TEXT NOT NULL,\n attention_reason TEXT,\n event TEXT,\n timestamp INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_history_session ON status_history(session_name);\nCREATE INDEX IF NOT EXISTS idx_history_timestamp ON status_history(timestamp);\n\n-- Environments: API provider configurations\nCREATE TABLE IF NOT EXISTS environments (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n provider TEXT NOT NULL,\n icon TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n variables TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_environments_default ON environments(is_default);\n\n-- Session-environment mapping\nCREATE TABLE IF NOT EXISTS session_environments (\n session_name TEXT PRIMARY KEY,\n environment_id TEXT NOT NULL\n);\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at INTEGER NOT NULL\n);\n";
|
|
80
|
+
export declare const SCHEMA_VERSION = 8;
|
|
81
|
+
export declare const CREATE_TABLES_SQL = "\n-- Sessions: current state of terminal sessions\nCREATE TABLE IF NOT EXISTS sessions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n project TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'init',\n attention_reason TEXT,\n last_event TEXT,\n last_activity INTEGER NOT NULL,\n last_status_change INTEGER NOT NULL,\n environment_id TEXT,\n archived_at INTEGER,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n -- StatusLine metrics (v4)\n model TEXT,\n cost_usd REAL,\n context_usage INTEGER,\n lines_added INTEGER,\n lines_removed INTEGER,\n -- Ralph mode fields (v5)\n ralph_enabled INTEGER DEFAULT 0,\n ralph_config TEXT,\n ralph_iteration INTEGER DEFAULT 0,\n ralph_status TEXT,\n -- Worktree isolation (v6)\n worktree_path TEXT,\n branch_name TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_sessions_name ON sessions(name);\nCREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project);\nCREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);\nCREATE INDEX IF NOT EXISTS idx_sessions_last_activity ON sessions(last_activity);\n\n-- Status history: audit trail of status changes\nCREATE TABLE IF NOT EXISTS status_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n session_name TEXT NOT NULL,\n status TEXT NOT NULL,\n attention_reason TEXT,\n event TEXT,\n timestamp INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_history_session ON status_history(session_name);\nCREATE INDEX IF NOT EXISTS idx_history_timestamp ON status_history(timestamp);\n\n-- Environments: API provider configurations\nCREATE TABLE IF NOT EXISTS environments (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n provider TEXT NOT NULL,\n icon TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n variables TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_environments_default ON environments(is_default);\n\n-- Session-environment mapping\nCREATE TABLE IF NOT EXISTS session_environments (\n session_name TEXT PRIMARY KEY,\n environment_id TEXT NOT NULL\n);\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at INTEGER NOT NULL\n);\n\n-- Push subscriptions for Web Push notifications (v8)\nCREATE TABLE IF NOT EXISTS push_subscriptions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n endpoint TEXT UNIQUE NOT NULL,\n keys_p256dh TEXT NOT NULL,\n keys_auth TEXT NOT NULL,\n user_agent TEXT,\n created_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);\n";
|
|
82
82
|
export declare const RETENTION_CONFIG: {
|
|
83
83
|
/** Max age for sessions before cleanup (24 hours) */
|
|
84
84
|
sessionMaxAge: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMtF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAMD,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
package/agent/dist/db/schema.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
2
|
// SQL Schema Definitions
|
|
3
3
|
// ============================================================================
|
|
4
|
-
export const SCHEMA_VERSION =
|
|
4
|
+
export const SCHEMA_VERSION = 8;
|
|
5
5
|
export const CREATE_TABLES_SQL = `
|
|
6
6
|
-- Sessions: current state of terminal sessions
|
|
7
7
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
@@ -76,6 +76,18 @@ CREATE TABLE IF NOT EXISTS schema_version (
|
|
|
76
76
|
version INTEGER PRIMARY KEY,
|
|
77
77
|
applied_at INTEGER NOT NULL
|
|
78
78
|
);
|
|
79
|
+
|
|
80
|
+
-- Push subscriptions for Web Push notifications (v8)
|
|
81
|
+
CREATE TABLE IF NOT EXISTS push_subscriptions (
|
|
82
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
83
|
+
endpoint TEXT UNIQUE NOT NULL,
|
|
84
|
+
keys_p256dh TEXT NOT NULL,
|
|
85
|
+
keys_auth TEXT NOT NULL,
|
|
86
|
+
user_agent TEXT,
|
|
87
|
+
created_at INTEGER NOT NULL
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);
|
|
79
91
|
`;
|
|
80
92
|
// ============================================================================
|
|
81
93
|
// Retention Configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAqGA,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAqGA,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFhC,CAAC;AAEF,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,qDAAqD;IACrD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAClC,6DAA6D;IAC7D,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACxC,0CAA0C;IAC1C,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACtC,gCAAgC;IAChC,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;CAChC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push notification sender.
|
|
3
|
+
* Sends Web Push notifications to all subscribed clients.
|
|
4
|
+
*/
|
|
5
|
+
import type { WSSessionInfo } from '247-shared';
|
|
6
|
+
export interface PushPayload {
|
|
7
|
+
title: string;
|
|
8
|
+
body: string;
|
|
9
|
+
tag: string;
|
|
10
|
+
url: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Send push notification for a session status update.
|
|
15
|
+
* Only sends if status is 'needs_attention'.
|
|
16
|
+
*/
|
|
17
|
+
export declare function sendPushNotification(session: WSSessionInfo): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Send a test push notification.
|
|
20
|
+
* Useful for verifying setup.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sendTestNotification(): Promise<{
|
|
23
|
+
sent: number;
|
|
24
|
+
failed: number;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=sender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/push/sender.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAGjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAmCD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDhF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BtF"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push notification sender.
|
|
3
|
+
* Sends Web Push notifications to all subscribed clients.
|
|
4
|
+
*/
|
|
5
|
+
import webpush from 'web-push';
|
|
6
|
+
import * as pushDb from '../db/push-subscriptions.js';
|
|
7
|
+
/**
|
|
8
|
+
* Get notification message based on attention reason.
|
|
9
|
+
*/
|
|
10
|
+
function getNotificationMessage(reason) {
|
|
11
|
+
switch (reason) {
|
|
12
|
+
case 'permission':
|
|
13
|
+
return {
|
|
14
|
+
title: 'Action requise',
|
|
15
|
+
body: 'Claude a besoin de votre autorisation pour continuer.',
|
|
16
|
+
};
|
|
17
|
+
case 'input':
|
|
18
|
+
return {
|
|
19
|
+
title: 'Réponse attendue',
|
|
20
|
+
body: 'Claude attend votre réponse pour continuer.',
|
|
21
|
+
};
|
|
22
|
+
case 'plan_approval':
|
|
23
|
+
return {
|
|
24
|
+
title: 'Plan à valider',
|
|
25
|
+
body: 'Claude a terminé son plan et attend votre validation.',
|
|
26
|
+
};
|
|
27
|
+
case 'task_complete':
|
|
28
|
+
return {
|
|
29
|
+
title: 'Tâche terminée',
|
|
30
|
+
body: 'Claude a terminé sa tâche.',
|
|
31
|
+
};
|
|
32
|
+
default:
|
|
33
|
+
return {
|
|
34
|
+
title: 'Attention requise',
|
|
35
|
+
body: 'Une session nécessite votre attention.',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Send push notification for a session status update.
|
|
41
|
+
* Only sends if status is 'needs_attention'.
|
|
42
|
+
*/
|
|
43
|
+
export async function sendPushNotification(session) {
|
|
44
|
+
// Only send for needs_attention status
|
|
45
|
+
if (session.status !== 'needs_attention') {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const subscriptions = pushDb.getAllSubscriptions();
|
|
49
|
+
if (subscriptions.length === 0) {
|
|
50
|
+
console.log('[Push] No subscriptions, skipping push notification');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const { title, body } = getNotificationMessage(session.attentionReason || 'input');
|
|
54
|
+
const payload = {
|
|
55
|
+
title: `${title} - ${session.name}`,
|
|
56
|
+
body,
|
|
57
|
+
tag: `session-${session.name}`,
|
|
58
|
+
url: `/?session=${encodeURIComponent(session.name)}`,
|
|
59
|
+
timestamp: Date.now(),
|
|
60
|
+
};
|
|
61
|
+
const payloadStr = JSON.stringify(payload);
|
|
62
|
+
const invalidEndpoints = [];
|
|
63
|
+
console.log(`[Push] Sending notification to ${subscriptions.length} subscriber(s)`);
|
|
64
|
+
// Send to all subscriptions in parallel
|
|
65
|
+
const results = await Promise.allSettled(subscriptions.map(async (dbSub) => {
|
|
66
|
+
const subscription = pushDb.toWebPushSubscription(dbSub);
|
|
67
|
+
try {
|
|
68
|
+
await webpush.sendNotification(subscription, payloadStr);
|
|
69
|
+
return { success: true, endpoint: dbSub.endpoint };
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const error = err;
|
|
73
|
+
// 404 or 410 means subscription is no longer valid
|
|
74
|
+
if (error.statusCode === 404 || error.statusCode === 410) {
|
|
75
|
+
invalidEndpoints.push(dbSub.endpoint);
|
|
76
|
+
console.log(`[Push] Subscription expired: ${dbSub.endpoint.substring(0, 50)}...`);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.error(`[Push] Failed to send:`, error);
|
|
80
|
+
}
|
|
81
|
+
return { success: false, endpoint: dbSub.endpoint };
|
|
82
|
+
}
|
|
83
|
+
}));
|
|
84
|
+
// Clean up invalid subscriptions
|
|
85
|
+
if (invalidEndpoints.length > 0) {
|
|
86
|
+
const deleted = pushDb.deleteInvalidSubscriptions(invalidEndpoints);
|
|
87
|
+
console.log(`[Push] Cleaned up ${deleted} invalid subscription(s)`);
|
|
88
|
+
}
|
|
89
|
+
const successful = results.filter((r) => r.status === 'fulfilled' && r.value.success).length;
|
|
90
|
+
console.log(`[Push] Sent ${successful}/${subscriptions.length} notification(s)`);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Send a test push notification.
|
|
94
|
+
* Useful for verifying setup.
|
|
95
|
+
*/
|
|
96
|
+
export async function sendTestNotification() {
|
|
97
|
+
const subscriptions = pushDb.getAllSubscriptions();
|
|
98
|
+
if (subscriptions.length === 0) {
|
|
99
|
+
return { sent: 0, failed: 0 };
|
|
100
|
+
}
|
|
101
|
+
const payload = {
|
|
102
|
+
title: 'Test Notification',
|
|
103
|
+
body: 'Les notifications push fonctionnent !',
|
|
104
|
+
tag: 'test',
|
|
105
|
+
url: '/',
|
|
106
|
+
timestamp: Date.now(),
|
|
107
|
+
};
|
|
108
|
+
const payloadStr = JSON.stringify(payload);
|
|
109
|
+
let sent = 0;
|
|
110
|
+
let failed = 0;
|
|
111
|
+
for (const dbSub of subscriptions) {
|
|
112
|
+
try {
|
|
113
|
+
await webpush.sendNotification(pushDb.toWebPushSubscription(dbSub), payloadStr);
|
|
114
|
+
sent++;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
failed++;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { sent, failed };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=sender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../../src/push/sender.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VAPID key management for Web Push notifications.
|
|
3
|
+
* Keys are generated once and stored in ~/.247/vapid.json
|
|
4
|
+
*/
|
|
5
|
+
interface VapidKeys {
|
|
6
|
+
publicKey: string;
|
|
7
|
+
privateKey: string;
|
|
8
|
+
subject: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get or generate VAPID keys.
|
|
12
|
+
* Keys are cached in memory and persisted to disk.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getVapidKeys(): VapidKeys;
|
|
15
|
+
/**
|
|
16
|
+
* Get the public VAPID key (for client subscription).
|
|
17
|
+
*/
|
|
18
|
+
export declare function getPublicVapidKey(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Initialize web-push with VAPID keys.
|
|
21
|
+
* Call this at server startup.
|
|
22
|
+
*/
|
|
23
|
+
export declare function initWebPush(): void;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=vapid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vapid.d.ts","sourceRoot":"","sources":["../../src/push/vapid.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,UAAU,SAAS;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAgDxC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAUlC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VAPID key management for Web Push notifications.
|
|
3
|
+
* Keys are generated once and stored in ~/.247/vapid.json
|
|
4
|
+
*/
|
|
5
|
+
import webpush from 'web-push';
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
7
|
+
import { resolve, dirname } from 'path';
|
|
8
|
+
const CONFIG_DIR = resolve(process.env.HOME || '~', '.247');
|
|
9
|
+
const VAPID_FILE = resolve(CONFIG_DIR, 'vapid.json');
|
|
10
|
+
let cachedKeys = null;
|
|
11
|
+
/**
|
|
12
|
+
* Get or generate VAPID keys.
|
|
13
|
+
* Keys are cached in memory and persisted to disk.
|
|
14
|
+
*/
|
|
15
|
+
export function getVapidKeys() {
|
|
16
|
+
if (cachedKeys) {
|
|
17
|
+
return cachedKeys;
|
|
18
|
+
}
|
|
19
|
+
// Try to load from file
|
|
20
|
+
if (existsSync(VAPID_FILE)) {
|
|
21
|
+
try {
|
|
22
|
+
const content = readFileSync(VAPID_FILE, 'utf-8');
|
|
23
|
+
const loaded = JSON.parse(content);
|
|
24
|
+
// Validate that all required fields exist
|
|
25
|
+
if (loaded.publicKey && loaded.privateKey && loaded.subject) {
|
|
26
|
+
cachedKeys = loaded;
|
|
27
|
+
console.log('[VAPID] Loaded keys from file');
|
|
28
|
+
return cachedKeys;
|
|
29
|
+
}
|
|
30
|
+
// Keys incomplete, will regenerate
|
|
31
|
+
console.log('[VAPID] Loaded keys are incomplete, regenerating...');
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
console.error('[VAPID] Failed to load keys, regenerating:', err);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Generate new keys
|
|
38
|
+
console.log('[VAPID] Generating new keys...');
|
|
39
|
+
const keys = webpush.generateVAPIDKeys();
|
|
40
|
+
cachedKeys = {
|
|
41
|
+
publicKey: keys.publicKey,
|
|
42
|
+
privateKey: keys.privateKey,
|
|
43
|
+
subject: 'mailto:247@quivr.com', // Required for VAPID
|
|
44
|
+
};
|
|
45
|
+
// Persist to file
|
|
46
|
+
try {
|
|
47
|
+
const dir = dirname(VAPID_FILE);
|
|
48
|
+
if (!existsSync(dir)) {
|
|
49
|
+
mkdirSync(dir, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
writeFileSync(VAPID_FILE, JSON.stringify(cachedKeys, null, 2));
|
|
52
|
+
console.log('[VAPID] Keys saved to:', VAPID_FILE);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.error('[VAPID] Failed to save keys:', err);
|
|
56
|
+
}
|
|
57
|
+
return cachedKeys;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the public VAPID key (for client subscription).
|
|
61
|
+
*/
|
|
62
|
+
export function getPublicVapidKey() {
|
|
63
|
+
return getVapidKeys().publicKey;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Initialize web-push with VAPID keys.
|
|
67
|
+
* Call this at server startup.
|
|
68
|
+
*/
|
|
69
|
+
export function initWebPush() {
|
|
70
|
+
try {
|
|
71
|
+
const keys = getVapidKeys();
|
|
72
|
+
webpush.setVapidDetails(keys.subject, keys.publicKey, keys.privateKey);
|
|
73
|
+
console.log('[VAPID] web-push initialized');
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// In test environments, we may not have proper config directory access
|
|
77
|
+
console.warn('[VAPID] Failed to initialize web-push:', err.message);
|
|
78
|
+
console.warn('[VAPID] Push notifications will be disabled');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=vapid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vapid.js","sourceRoot":"","sources":["../../src/push/vapid.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAQxC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAErD,IAAI,UAAU,GAAqB,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;YAEzD,0CAA0C;YAC1C,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC5D,UAAU,GAAG,MAAmB,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC7C,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,mCAAmC;YACnC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAEzC,UAAU,GAAG;QACX,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE,sBAAsB,EAAE,qBAAqB;KACvD,CAAC;IAEF,kBAAkB;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,YAAY,EAAE,CAAC,SAAS,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/routes/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMjC,wBAAgB,gBAAgB,IAAI,MAAM,CAmGzC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push notification routes.
|
|
3
|
+
* Handles Web Push subscription management.
|
|
4
|
+
*/
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
import { getPublicVapidKey } from '../push/vapid.js';
|
|
7
|
+
import * as pushDb from '../db/push-subscriptions.js';
|
|
8
|
+
import { sendTestNotification } from '../push/sender.js';
|
|
9
|
+
export function createPushRoutes() {
|
|
10
|
+
const router = Router();
|
|
11
|
+
/**
|
|
12
|
+
* GET /api/push/vapid-key
|
|
13
|
+
* Returns the public VAPID key for client-side subscription.
|
|
14
|
+
*/
|
|
15
|
+
router.get('/vapid-key', (_req, res) => {
|
|
16
|
+
const publicKey = getPublicVapidKey();
|
|
17
|
+
res.json({ publicKey });
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* POST /api/push/subscribe
|
|
21
|
+
* Register a new push subscription.
|
|
22
|
+
* Body: PushSubscription object from browser
|
|
23
|
+
*/
|
|
24
|
+
router.post('/subscribe', (req, res) => {
|
|
25
|
+
const subscription = req.body;
|
|
26
|
+
if (!subscription?.endpoint || !subscription?.keys?.p256dh || !subscription?.keys?.auth) {
|
|
27
|
+
return res.status(400).json({ error: 'Invalid subscription object' });
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const userAgent = req.get('User-Agent');
|
|
31
|
+
pushDb.saveSubscription(subscription, userAgent);
|
|
32
|
+
console.log(`[Push] New subscription registered: ${subscription.endpoint.substring(0, 50)}...`);
|
|
33
|
+
res.json({
|
|
34
|
+
success: true,
|
|
35
|
+
message: 'Subscription registered',
|
|
36
|
+
count: pushDb.getSubscriptionCount(),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error('[Push] Failed to save subscription:', err);
|
|
41
|
+
res.status(500).json({ error: 'Failed to save subscription' });
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* POST /api/push/unsubscribe
|
|
46
|
+
* Remove a push subscription.
|
|
47
|
+
* Body: { endpoint: string }
|
|
48
|
+
*/
|
|
49
|
+
router.post('/unsubscribe', (req, res) => {
|
|
50
|
+
const { endpoint } = req.body;
|
|
51
|
+
if (!endpoint) {
|
|
52
|
+
return res.status(400).json({ error: 'Missing endpoint' });
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const deleted = pushDb.deleteSubscription(endpoint);
|
|
56
|
+
console.log(`[Push] Subscription removed: ${deleted}`);
|
|
57
|
+
res.json({
|
|
58
|
+
success: true,
|
|
59
|
+
deleted,
|
|
60
|
+
count: pushDb.getSubscriptionCount(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
console.error('[Push] Failed to delete subscription:', err);
|
|
65
|
+
res.status(500).json({ error: 'Failed to delete subscription' });
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* GET /api/push/status
|
|
70
|
+
* Get push notification status (for debugging).
|
|
71
|
+
*/
|
|
72
|
+
router.get('/status', (_req, res) => {
|
|
73
|
+
res.json({
|
|
74
|
+
enabled: true,
|
|
75
|
+
subscriptionCount: pushDb.getSubscriptionCount(),
|
|
76
|
+
vapidKeyConfigured: !!getPublicVapidKey(),
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
/**
|
|
80
|
+
* POST /api/push/test
|
|
81
|
+
* Send a test notification to all subscribers.
|
|
82
|
+
*/
|
|
83
|
+
router.post('/test', async (_req, res) => {
|
|
84
|
+
try {
|
|
85
|
+
const result = await sendTestNotification();
|
|
86
|
+
res.json({
|
|
87
|
+
success: true,
|
|
88
|
+
...result,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
console.error('[Push] Test notification failed:', err);
|
|
93
|
+
res.status(500).json({ error: 'Failed to send test notification' });
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return router;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/routes/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuCH,wBAAsB,YAAY,gHA6IjC"}
|
package/agent/dist/server.js
CHANGED
|
@@ -14,6 +14,8 @@ import * as sessionsDb from './db/sessions.js';
|
|
|
14
14
|
import { config } from './config.js';
|
|
15
15
|
// Routes
|
|
16
16
|
import { createProjectRoutes, createEnvironmentRoutes, createSessionRoutes, createHeartbeatRoutes, createNotificationRoutes, createStopRoutes, createEditorRoutes, createFilesRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './routes/index.js';
|
|
17
|
+
import { createPushRoutes } from './routes/push.js';
|
|
18
|
+
import { initWebPush } from './push/vapid.js';
|
|
17
19
|
// StatusLine setup and heartbeat monitor
|
|
18
20
|
import { ensureStatusLineConfigured } from './setup-statusline.js';
|
|
19
21
|
import { startHeartbeatMonitor, stopHeartbeatMonitor } from './heartbeat-monitor.js';
|
|
@@ -53,6 +55,8 @@ export async function createServer() {
|
|
|
53
55
|
});
|
|
54
56
|
// Configure statusLine for Claude Code integration
|
|
55
57
|
ensureStatusLineConfigured();
|
|
58
|
+
// Initialize Web Push for notifications
|
|
59
|
+
initWebPush();
|
|
56
60
|
// Start heartbeat timeout monitor
|
|
57
61
|
startHeartbeatMonitor();
|
|
58
62
|
// Mount API routes
|
|
@@ -64,6 +68,7 @@ export async function createServer() {
|
|
|
64
68
|
app.use('/api/stop', createStopRoutes());
|
|
65
69
|
app.use('/api/editor', createEditorRoutes());
|
|
66
70
|
app.use('/api/files', createFilesRoutes());
|
|
71
|
+
app.use('/api/push', createPushRoutes());
|
|
67
72
|
// Editor proxy middleware
|
|
68
73
|
app.use('/editor/:project', async (req, res) => {
|
|
69
74
|
const { project } = req.params;
|
package/agent/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,SAAS;AACT,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,aAAa,EAEd,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,aAAa,EAEd,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,eAAO,MAAM,iBAAiB,yBAAgC,CAAC;AAG/D,eAAO,MAAM,iBAAiB,6BAAoC,CAAC;AAGnE,eAAO,MAAM,iBAAiB,gBAAuB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAuBlE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAYjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAY1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CA0CxC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,MAAM,CAAC,CASnD"}
|
package/agent/dist/status.js
CHANGED
|
@@ -7,6 +7,7 @@ import { execSync } from 'child_process';
|
|
|
7
7
|
import { RETENTION_CONFIG } from './db/index.js';
|
|
8
8
|
import * as sessionsDb from './db/sessions.js';
|
|
9
9
|
import * as historyDb from './db/history.js';
|
|
10
|
+
import { sendPushNotification } from './push/sender.js';
|
|
10
11
|
// Store by tmux session name - single source of truth for status
|
|
11
12
|
export const tmuxSessionStatus = new Map();
|
|
12
13
|
// Track active WebSocket connections per session
|
|
@@ -17,16 +18,24 @@ export const statusSubscribers = new Set();
|
|
|
17
18
|
* Broadcast status update to all subscribers
|
|
18
19
|
*/
|
|
19
20
|
export function broadcastStatusUpdate(session) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
// Send WebSocket update to connected clients
|
|
22
|
+
if (statusSubscribers.size > 0) {
|
|
23
|
+
const message = { type: 'status-update', session };
|
|
24
|
+
const messageStr = JSON.stringify(message);
|
|
25
|
+
for (const ws of statusSubscribers) {
|
|
26
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
27
|
+
ws.send(messageStr);
|
|
28
|
+
}
|
|
27
29
|
}
|
|
30
|
+
console.log(`[Status WS] Broadcast status update for ${session.name}: ${session.status} to ${statusSubscribers.size} subscribers`);
|
|
31
|
+
}
|
|
32
|
+
// Send Web Push notification for needs_attention status
|
|
33
|
+
// This reaches users even when browser is closed
|
|
34
|
+
if (session.status === 'needs_attention') {
|
|
35
|
+
sendPushNotification(session).catch((err) => {
|
|
36
|
+
console.error('[Status] Failed to send push notification:', err);
|
|
37
|
+
});
|
|
28
38
|
}
|
|
29
|
-
console.log(`[Status WS] Broadcast status update for ${session.name}: ${session.status} to ${statusSubscribers.size} subscribers`);
|
|
30
39
|
}
|
|
31
40
|
/**
|
|
32
41
|
* Broadcast session removed to all subscribers
|
package/agent/dist/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAoBxD,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE/D,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEnE,kEAAkE;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAa,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAsB;IAC1D,6CAA6C;IAC7C,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAA6B,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE3C,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACrC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CACT,2CAA2C,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,OAAO,iBAAiB,CAAC,IAAI,cAAc,CACtH,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,iDAAiD;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACzC,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1C,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAEzC,MAAM,OAAO,GAA6B,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACnF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,0CAA0C,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB,EAAE,OAAsB;IAClF,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAEzC,MAAM,OAAO,GAA6B,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,2CAA2C,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,UAAU,GAAG;QACjB,OAAO;QACP,OAAO;QACP,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;KACP,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC5C,OAAO,GAAG,OAAO,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC;IAEvD,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,2BAA2B;IAC3B,IAAI,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,qDAAqD,EAAE;YAC7E,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,wEAAwE;IACxE,KAAK,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QACtD,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,GAAG,eAAe,CAAC;QAE5D,IAAI,CAAC,aAAa,IAAI,OAAO,EAAE,CAAC;YAC9B,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtC,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,mCAAmC,CAAC,CAAC;IAC1F,CAAC;IAED,+BAA+B;IAC/B,MAAM,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CACvD,eAAe,EACf,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACF,MAAM,gBAAgB,GAAG,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAErF,IAAI,iBAAiB,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,0BAA0B,iBAAiB,cAAc,gBAAgB,EAAE,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,qDAAqD,EAAE;YAC7E,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ const program = new Command();
|
|
|
15
15
|
program
|
|
16
16
|
.name('247')
|
|
17
17
|
.description('247 - Access Claude Code from anywhere 24/7\nby The Vibe Company')
|
|
18
|
-
.version('2.0
|
|
18
|
+
.version('2.1.0')
|
|
19
19
|
.option('-P, --profile <name>', 'Use a specific profile (dev, prod, etc.)');
|
|
20
20
|
// Add commands
|
|
21
21
|
program.addCommand(initCommand);
|