@raidiant/notifai 5.0.0 → 6.0.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/CHANGELOG.md +27 -0
- package/README.md +2 -2
- package/dist/client.d.ts +8 -3
- package/dist/client.js +24 -3
- package/dist/client.js.map +1 -1
- package/dist/commands-auth.d.ts +14 -0
- package/dist/commands-auth.js +154 -0
- package/dist/commands-auth.js.map +1 -0
- package/dist/commands-config.d.ts +31 -0
- package/dist/commands-config.js +246 -0
- package/dist/commands-config.js.map +1 -0
- package/dist/commands-core.d.ts +102 -0
- package/dist/commands-core.js +135 -0
- package/dist/commands-core.js.map +1 -0
- package/dist/commands-devices.d.ts +31 -0
- package/dist/commands-devices.js +124 -0
- package/dist/commands-devices.js.map +1 -0
- package/dist/commands-doctor.d.ts +24 -0
- package/dist/commands-doctor.js +1011 -0
- package/dist/commands-doctor.js.map +1 -0
- package/dist/commands-harness-context.d.ts +61 -0
- package/dist/commands-harness-context.js +93 -0
- package/dist/commands-harness-context.js.map +1 -0
- package/dist/commands-hook-shape.d.ts +17 -0
- package/dist/commands-hook-shape.js +37 -0
- package/dist/commands-hook-shape.js.map +1 -0
- package/dist/commands-hooks.d.ts +115 -0
- package/dist/commands-hooks.js +1225 -0
- package/dist/commands-hooks.js.map +1 -0
- package/dist/commands-init.d.ts +35 -0
- package/dist/commands-init.js +580 -0
- package/dist/commands-init.js.map +1 -0
- package/dist/commands-io.d.ts +2 -0
- package/dist/commands-io.js +110 -0
- package/dist/commands-io.js.map +1 -0
- package/dist/commands-logs.d.ts +30 -0
- package/dist/commands-logs.js +201 -0
- package/dist/commands-logs.js.map +1 -0
- package/dist/commands-send-support.d.ts +44 -0
- package/dist/commands-send-support.js +180 -0
- package/dist/commands-send-support.js.map +1 -0
- package/dist/commands-send.d.ts +33 -0
- package/dist/commands-send.js +519 -0
- package/dist/commands-send.js.map +1 -0
- package/dist/commands-setup-proof.d.ts +15 -0
- package/dist/commands-setup-proof.js +53 -0
- package/dist/commands-setup-proof.js.map +1 -0
- package/dist/commands-skill.d.ts +10 -0
- package/dist/commands-skill.js +71 -0
- package/dist/commands-skill.js.map +1 -0
- package/dist/commands.d.ts +12 -387
- package/dist/commands.js +12 -4536
- package/dist/commands.js.map +1 -1
- package/dist/config-schema.js +1 -1
- package/dist/config-schema.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/credentials.js +13 -3
- package/dist/credentials.js.map +1 -1
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +127 -99
- package/dist/hooks.js.map +1 -1
- package/dist/interactive.js +4 -4
- package/dist/interactive.js.map +1 -1
- package/dist/logging.js +1 -0
- package/dist/logging.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/readiness.d.ts +3 -1
- package/dist/readiness.js.map +1 -1
- package/package.json +2 -2
- package/src/client.test.ts +90 -1
- package/src/client.ts +35 -2
- package/src/commands-auth.ts +174 -0
- package/src/commands-config.ts +307 -0
- package/src/commands-core.ts +240 -0
- package/src/commands-devices.ts +150 -0
- package/src/commands-doctor.ts +1209 -0
- package/src/commands-harness-context.ts +126 -0
- package/src/commands-hook-shape.ts +53 -0
- package/src/commands-hooks.ts +1586 -0
- package/src/commands-init.ts +721 -0
- package/src/commands-io.ts +108 -0
- package/src/commands-logs.ts +243 -0
- package/src/commands-send-support.ts +224 -0
- package/src/commands-send.ts +623 -0
- package/src/commands-setup-proof.ts +71 -0
- package/src/commands-skill.ts +84 -0
- package/src/commands.test.ts +493 -39
- package/src/commands.ts +58 -5614
- package/src/config-schema.ts +1 -1
- package/src/config.test.ts +9 -0
- package/src/config.ts +7 -2
- package/src/credentials.test.ts +25 -1
- package/src/credentials.ts +13 -3
- package/src/hooks.test.ts +351 -11
- package/src/hooks.ts +145 -97
- package/src/interactive.test.ts +19 -1
- package/src/interactive.ts +4 -4
- package/src/logging.test.ts +15 -2
- package/src/logging.ts +1 -0
- package/src/main.ts +1 -1
- package/src/readiness.ts +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-config.js","sourceRoot":"","sources":["../src/commands-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAA;AAChB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,GAElB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAA;AAE7E,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,UAAU,iBAAiB,CAC/B,IAAiB,EACjB,KAA6D;IAE7D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACvE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACvB,GAAG;YACH;gBACE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;gBACxB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM;gBAC1B,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO;aACjC;SACF,CAAC,CACH,CAAA;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,+DAA+D;IAC/D,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvF,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAiB,EACjB,GAAW,EACX,QAA4B,EAAE;IAE9B,IAAI,CAAE,WAAiC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,GAAgB,CAAA;IAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACvE,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAA;QACD,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAC/E,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5E,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,IAAI,GAAkB,IAAI,CAAA;IAC9B,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAA;IAC3C,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAA;QAC7D,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;YAC5B,YAAY,GAAG,QAAQ,CAAA;YACvB,IAAI,GAAG,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,KAAK,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAChG,CAAC;AAED,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;QAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;YAC1B,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACpB,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,EAChB,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EACpB,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3C,CAAA;YACD,QAAQ,GAAG,KAAK,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAE,CAAA;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAiB,EACjB,GAAW,EACX,QAAgB,EAChB,KAA8E;IAE9E,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9C,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAA;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAClC,IAAI,KAAK,GAAY,QAAQ,CAAA;IAC7B,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,cAAc,CAAC,SAAS,CAAC,UAAU,QAAQ,IAAI,CAAC,CAAA;YAC5E,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,oBAAoB,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;YACtE,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QACD,KAAK,GAAG,OAAO,CAAA;IACjB,CAAC;IACD,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,+CAA+C,QAAQ,IAAI,CAAC,CAAA;YAC9E,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QACD,KAAK,GAAG,QAAQ,KAAK,MAAM,CAAA;IAC7B,CAAC;IACD,4EAA4E;IAC5E,yEAAyE;IACzE,gEAAgE;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3F,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,kBAAkB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,CAAA;QACnF,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS;QAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEvF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAA;IACtC,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,oCAAoC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChF,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,8BAA8B,GAAG,kEAAkE,CACpG,CAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;QACnG,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;YACvE,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;QACtC,CAAC,CAAE,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAA6B;QAC3E,CAAC,CAAC,EAAE,CAAA;IACN,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACrB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB,EAAE,GAAW;IACvD,IAAI,CAAE,WAAiC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAA;QACzD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,GAAgB,CAAA;AACzB,CAAC;AAKD,KAAK,UAAU,oBAAoB,CACjC,IAAiB,EACjB,KAA0B;IAE1B,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;IACxE,IACE,KAAK,CAAC,OAAO,KAAK,SAAS;QAC3B,KAAK,CAAC,KAAK,KAAK,IAAI;QACpB,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,KAAK,CAAC,GAAG,KAAK,IAAI;QAClB,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI;QAC5B,IAAI,CAAC,EAAE,CAAC,MAAM,EACd,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iCAAiC,EAAE;YACvE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,yBAAyB,EAAE;YAC3E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAClF,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,yCAAyC,EAAE;SACtG,CAAC,CAAA;QACF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,GAAG,QAAQ,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO;QAC9B,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,KAAK,KAAK,OAAO;YACjB,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;YAC/C,CAAC,CAAC,KAAK,KAAK,SAAS;gBACnB,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;gBACrF,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAiD;KACtF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAiB,EACjB,GAAW,EACX,KAA0B;IAE1B,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9C,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAA;IACzC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAA;IACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;QACtC,CAAC,CAAE,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAA6B;QAC3E,CAAC,CAAC,EAAE,CAAA;IACN,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACxD,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,SAAS,SAAS,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;QACnF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;YACvE,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,SAAS,SAAS,MAAM,CAAC,IAAI,oCAAoC,CAAC,CAAA;IACzF,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { type ClaudeWakeAdapters } from './claude-wake.js';
|
|
2
|
+
import { type ApiClient, type ClientOptions } from './client.js';
|
|
3
|
+
import { type CodexWakeAdapters } from './codex-wake.js';
|
|
4
|
+
import { loadConfig, type CliConfig } from './config.js';
|
|
5
|
+
import type { CredentialStore, MachineCredential } from './credentials.js';
|
|
6
|
+
import { type HookAdapterTarget } from './hook-adapter.js';
|
|
7
|
+
import { type Logger } from './logging.js';
|
|
8
|
+
import type { NativeSkills } from './native-skills.js';
|
|
9
|
+
import type { Tone } from './ui/theme.js';
|
|
10
|
+
export interface CommandIo {
|
|
11
|
+
out(line: string): void;
|
|
12
|
+
err(line: string): void;
|
|
13
|
+
/** Interactive confirmation; resolves `fallback` (default false) when not interactive. */
|
|
14
|
+
confirm(question: string, fallback?: boolean): Promise<boolean>;
|
|
15
|
+
openUrl(url: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* True only when a human is demonstrably driving a terminal. Everything below
|
|
18
|
+
* is optional sugar that MUST only be called behind this flag: an agent that
|
|
19
|
+
* reaches an interactive prompt does not error, it hangs — the prompt
|
|
20
|
+
* libraries wait on stdin for ever — so the gate is bypass, not handling.
|
|
21
|
+
* Test fakes leave all of this undefined and exercise the plain paths.
|
|
22
|
+
*/
|
|
23
|
+
interactive?: boolean;
|
|
24
|
+
select?(message: string, options: {
|
|
25
|
+
value: string;
|
|
26
|
+
label: string;
|
|
27
|
+
hint?: string;
|
|
28
|
+
}[]): Promise<string | null>;
|
|
29
|
+
/** Interactive multi-select. `initial` are pre-selected values. */
|
|
30
|
+
multiselect?(message: string, options: {
|
|
31
|
+
value: string;
|
|
32
|
+
label: string;
|
|
33
|
+
hint?: string;
|
|
34
|
+
}[], initial?: string[]): Promise<string[] | null>;
|
|
35
|
+
intro?(title: string): Promise<void>;
|
|
36
|
+
outro?(message: string): Promise<void>;
|
|
37
|
+
note?(message: string, title?: string): Promise<void>;
|
|
38
|
+
spinner?(message: string): Promise<CommandSpinner | null>;
|
|
39
|
+
/**
|
|
40
|
+
* A report line. `tone` distinguishes the two states that are neither pass
|
|
41
|
+
* nor fail — something optional the user declined, and something that was
|
|
42
|
+
* never evaluated — which a boolean has to round to one or the other.
|
|
43
|
+
* Optional so existing implementations keep type-checking.
|
|
44
|
+
*/
|
|
45
|
+
check?(ok: boolean, message: string, tone?: Tone): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
export interface CommandSpinner {
|
|
48
|
+
message(message: string): void;
|
|
49
|
+
stop(message: string): void;
|
|
50
|
+
error(message: string): void;
|
|
51
|
+
}
|
|
52
|
+
export interface CommandDeps {
|
|
53
|
+
io: CommandIo;
|
|
54
|
+
store: CredentialStore;
|
|
55
|
+
env: NodeJS.ProcessEnv;
|
|
56
|
+
cwd: string;
|
|
57
|
+
/** Test seam; production fixes the hook adapter under os.homedir(). */
|
|
58
|
+
hookAdapterHome?: string;
|
|
59
|
+
/** Test seam; production uses this process's Node and CLI paths. */
|
|
60
|
+
hookInstallTarget?: HookAdapterTarget;
|
|
61
|
+
/** Test seam; production uses process.platform for adapter format and quoting. */
|
|
62
|
+
hookPlatform?: NodeJS.Platform;
|
|
63
|
+
/** Test seam; production uses fetch against base_url. */
|
|
64
|
+
clientFactory?: (baseUrl: string, bearer: string | null, options?: ClientOptions) => ApiClient;
|
|
65
|
+
/** Test seam for bounded polling without wall-clock sleeps. */
|
|
66
|
+
now?: () => number;
|
|
67
|
+
/** Test seam for retry/backoff timing. */
|
|
68
|
+
sleep?: (milliseconds: number) => Promise<void>;
|
|
69
|
+
/** Test seams for Claude liveness, socket delivery, and cold resume. */
|
|
70
|
+
claudeWake?: ClaudeWakeAdapters;
|
|
71
|
+
claudeSourcePid?: number;
|
|
72
|
+
/** Test seams for the Codex thread-writer probe and cold resume. */
|
|
73
|
+
codexWake?: CodexWakeAdapters;
|
|
74
|
+
codexSourcePid?: number;
|
|
75
|
+
/** Test seam and production adapter for the external native skills installer. */
|
|
76
|
+
nativeSkills?: NativeSkills;
|
|
77
|
+
/**
|
|
78
|
+
* The local record of what this invocation did. Optional so a test fake need
|
|
79
|
+
* not carry one; `log(deps)` supplies a logger that records nothing.
|
|
80
|
+
*/
|
|
81
|
+
logger?: Logger;
|
|
82
|
+
}
|
|
83
|
+
/** The invocation's logger, or one that discards everything. */
|
|
84
|
+
export declare function log(deps: CommandDeps): Logger;
|
|
85
|
+
export declare function loadLoggedConfig(deps: CommandDeps, options: Parameters<typeof loadConfig>[0]): CliConfig;
|
|
86
|
+
export declare const EXIT: {
|
|
87
|
+
readonly ok: 0;
|
|
88
|
+
readonly failed: 1;
|
|
89
|
+
readonly usage: 2;
|
|
90
|
+
readonly noReply: 3;
|
|
91
|
+
readonly auth: 4;
|
|
92
|
+
readonly network: 5;
|
|
93
|
+
};
|
|
94
|
+
export declare function makeClient(deps: CommandDeps, baseUrl: string, bearer: string | null, options?: ClientOptions): ApiClient;
|
|
95
|
+
export declare function resolvedBaseUrl(config: CliConfig, credential: MachineCredential | null): string;
|
|
96
|
+
export declare function authedClient(deps: CommandDeps, config: CliConfig): {
|
|
97
|
+
client: ApiClient;
|
|
98
|
+
baseUrl: string;
|
|
99
|
+
} | null;
|
|
100
|
+
export declare const UPDATE_CLI_COMMAND = "npm install -g @raidiant/notifai";
|
|
101
|
+
export declare function reportError(deps: CommandDeps, err: unknown, context?: Record<string, unknown>): number;
|
|
102
|
+
export declare function rejectedPaths(details: unknown): string[];
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { SHIPPED_CLI_CAPABILITIES } from '@raidiant/notifai-protocol';
|
|
2
|
+
import {} from './claude-wake.js';
|
|
3
|
+
import { ApiCallError, NetworkError, createClient, } from './client.js';
|
|
4
|
+
import {} from './codex-wake.js';
|
|
5
|
+
import { loadConfig } from './config.js';
|
|
6
|
+
import {} from './hook-adapter.js';
|
|
7
|
+
import { logConfigResolved, logSettingsFrom, nullLogger } from './logging.js';
|
|
8
|
+
import { packageVersion } from './release.js';
|
|
9
|
+
/** The invocation's logger, or one that discards everything. */
|
|
10
|
+
export function log(deps) {
|
|
11
|
+
return deps.logger ?? nullLogger();
|
|
12
|
+
}
|
|
13
|
+
export function loadLoggedConfig(deps, options) {
|
|
14
|
+
const config = loadConfig(options);
|
|
15
|
+
const logger = log(deps);
|
|
16
|
+
logger.adopt(logSettingsFrom(config));
|
|
17
|
+
logger.bind({ project: config.project.value });
|
|
18
|
+
logConfigResolved(logger, config);
|
|
19
|
+
return config;
|
|
20
|
+
}
|
|
21
|
+
export const EXIT = {
|
|
22
|
+
ok: 0,
|
|
23
|
+
failed: 1,
|
|
24
|
+
usage: 2,
|
|
25
|
+
noReply: 3,
|
|
26
|
+
auth: 4,
|
|
27
|
+
network: 5,
|
|
28
|
+
};
|
|
29
|
+
export function makeClient(deps, baseUrl, bearer, options) {
|
|
30
|
+
return (deps.clientFactory ?? createClient)(baseUrl, bearer, {
|
|
31
|
+
...options,
|
|
32
|
+
logger: log(deps),
|
|
33
|
+
cliVersion: packageVersion(),
|
|
34
|
+
capabilities: SHIPPED_CLI_CAPABILITIES,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export function resolvedBaseUrl(config, credential) {
|
|
38
|
+
return config.base_url.source === 'default' && credential ? credential.baseUrl : config.base_url.value;
|
|
39
|
+
}
|
|
40
|
+
export function authedClient(deps, config) {
|
|
41
|
+
const credential = deps.store.load();
|
|
42
|
+
if (!credential) {
|
|
43
|
+
// The commonest reason a command does nothing, and one that leaves no other
|
|
44
|
+
// trace: it returns before any request is made, so without this the log
|
|
45
|
+
// shows an exit code and no cause.
|
|
46
|
+
log(deps).error('cli.error', { kind: 'auth', message: 'not signed in', store: deps.store.describe() });
|
|
47
|
+
deps.io.err('Not signed in. Run `notifai login` first.');
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const baseUrl = resolvedBaseUrl(config, credential);
|
|
51
|
+
return {
|
|
52
|
+
client: makeClient(deps, baseUrl, `Bearer nfm_${credential.machineId}.${credential.secret}`),
|
|
53
|
+
baseUrl,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export const UPDATE_CLI_COMMAND = 'npm install -g @raidiant/notifai';
|
|
57
|
+
function localRecovery(action) {
|
|
58
|
+
switch (action) {
|
|
59
|
+
case 'update_cli':
|
|
60
|
+
return `next: ${UPDATE_CLI_COMMAND}`;
|
|
61
|
+
case 'update_companion':
|
|
62
|
+
return 'next: Update Notifai on the named device.';
|
|
63
|
+
case 'wait_for_service':
|
|
64
|
+
return 'next: The service is being updated; try again later.';
|
|
65
|
+
default:
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function reportError(deps, err, context = {}) {
|
|
70
|
+
// Recorded before it is printed: stderr from an agent's shell call is often
|
|
71
|
+
// the one thing that does not survive into the next turn, and this is exactly
|
|
72
|
+
// the line someone comes back looking for.
|
|
73
|
+
log(deps).error('cli.error', {
|
|
74
|
+
...context,
|
|
75
|
+
...(err instanceof ApiCallError
|
|
76
|
+
? {
|
|
77
|
+
kind: 'api',
|
|
78
|
+
status: err.status,
|
|
79
|
+
code: err.code,
|
|
80
|
+
message: err.message,
|
|
81
|
+
next_action: err.nextAction,
|
|
82
|
+
recovery_action: err.recoveryAction,
|
|
83
|
+
details: err.details,
|
|
84
|
+
}
|
|
85
|
+
: err instanceof NetworkError
|
|
86
|
+
? { kind: 'network', message: err.message }
|
|
87
|
+
: { kind: 'unknown', message: String(err) }),
|
|
88
|
+
});
|
|
89
|
+
if (err instanceof ApiCallError) {
|
|
90
|
+
deps.io.err(deps.io.interactive === true && err.recoveryAction !== null
|
|
91
|
+
? err.message
|
|
92
|
+
: `${err.code}: ${err.message}`);
|
|
93
|
+
// The server's field-level details were already being logged above, but
|
|
94
|
+
// stderr is the one surface an agent's next turn actually reads — so the
|
|
95
|
+
// diagnosis has to be on it, the same way the hook path prints it.
|
|
96
|
+
const paths = rejectedPaths(err.details);
|
|
97
|
+
if (paths.length > 0)
|
|
98
|
+
deps.io.err(`the server rejected: ${paths.join(', ')}`);
|
|
99
|
+
// A 422 on a request this CLI built is not a user error: the two sides
|
|
100
|
+
// disagree about the contract, in whichever direction. `doctor` says which.
|
|
101
|
+
// Codes that name a policy the account chose are the exception — the
|
|
102
|
+
// contract held, the body simply did not satisfy that account.
|
|
103
|
+
if (err.status === 422 &&
|
|
104
|
+
err.code !== 'acknowledgement_text_required' &&
|
|
105
|
+
err.code !== 'feature_unavailable') {
|
|
106
|
+
deps.io.err('this build sent a field the server did not accept — the CLI and server ' +
|
|
107
|
+
'disagree about the contract; check with `notifai doctor`');
|
|
108
|
+
}
|
|
109
|
+
const recovery = localRecovery(err.recoveryAction);
|
|
110
|
+
if (recovery !== null)
|
|
111
|
+
deps.io.err(recovery);
|
|
112
|
+
else if (err.recoveryAction === null && err.nextAction)
|
|
113
|
+
deps.io.err(`next: ${err.nextAction}`);
|
|
114
|
+
if (err.code === 'auth_required' || err.code === 'machine_revoked')
|
|
115
|
+
return EXIT.auth;
|
|
116
|
+
return err.status >= 500 ? EXIT.network : EXIT.failed;
|
|
117
|
+
}
|
|
118
|
+
if (err instanceof NetworkError) {
|
|
119
|
+
deps.io.err(err.message);
|
|
120
|
+
return EXIT.network;
|
|
121
|
+
}
|
|
122
|
+
deps.io.err(String(err));
|
|
123
|
+
return EXIT.failed;
|
|
124
|
+
}
|
|
125
|
+
export function rejectedPaths(details) {
|
|
126
|
+
if (!Array.isArray(details))
|
|
127
|
+
return [];
|
|
128
|
+
return details
|
|
129
|
+
.map((issue) => typeof issue === 'object' && issue !== null && typeof issue.path === 'string'
|
|
130
|
+
? issue.path
|
|
131
|
+
: null)
|
|
132
|
+
.filter((path) => path !== null && path !== '')
|
|
133
|
+
.slice(0, 5);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=commands-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-core.js","sourceRoot":"","sources":["../src/commands-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Platform, type RoutableDevice } from '@raidiant/notifai-protocol';
|
|
2
|
+
import { type CommandDeps } from './commands-core.js';
|
|
3
|
+
export declare function devicesCommand(deps: CommandDeps, flags: {
|
|
4
|
+
json?: boolean;
|
|
5
|
+
}): Promise<number>;
|
|
6
|
+
/**
|
|
7
|
+
* Devices as data, for surfaces that render them themselves.
|
|
8
|
+
*
|
|
9
|
+
* `devicesCommand` prints and returns an exit code, which is the right shape
|
|
10
|
+
* for a command and the wrong one for a menu that wants to show names beside
|
|
11
|
+
* checkboxes. Silent on every failure by design: the interactive app already
|
|
12
|
+
* shows the credential and connectivity state on its status card, so a second
|
|
13
|
+
* error line here would be reporting the same fault twice.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deviceInventory(deps: CommandDeps): Promise<RoutableDevice[] | null>;
|
|
16
|
+
/** Whether a device is in a state where a notification would actually arrive. */
|
|
17
|
+
export declare function canDeviceReceive(device: RoutableDevice): boolean;
|
|
18
|
+
export declare function capabilitiesCommand(deps: CommandDeps, flags: {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
platform?: Platform;
|
|
21
|
+
}): Promise<number>;
|
|
22
|
+
export declare function supportPageUrl(baseUrl: string): string;
|
|
23
|
+
/** Same-account line for the device hop; prefers the real email when known. */
|
|
24
|
+
export declare function sameAccountSignInLine(email: string | null | undefined): string;
|
|
25
|
+
export declare function deviceInstallRemedy(options: {
|
|
26
|
+
baseUrl: string;
|
|
27
|
+
email: string | null;
|
|
28
|
+
devices: readonly RoutableDevice[];
|
|
29
|
+
}): string;
|
|
30
|
+
export declare function deviceCanReceive(device: RoutableDevice): boolean;
|
|
31
|
+
export declare function readyIosDevices(devices: readonly RoutableDevice[]): RoutableDevice[];
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { PLATFORMS } from '@raidiant/notifai-protocol';
|
|
2
|
+
import { EXIT, authedClient, loadLoggedConfig, makeClient, reportError, resolvedBaseUrl, } from './commands-core.js';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// devices / capabilities
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
export async function devicesCommand(deps, flags) {
|
|
7
|
+
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
8
|
+
const authed = authedClient(deps, config);
|
|
9
|
+
if (!authed)
|
|
10
|
+
return EXIT.auth;
|
|
11
|
+
try {
|
|
12
|
+
const result = await authed.client.listDevices();
|
|
13
|
+
if (flags.json) {
|
|
14
|
+
deps.io.out(JSON.stringify(result, null, 2));
|
|
15
|
+
return EXIT.ok;
|
|
16
|
+
}
|
|
17
|
+
if (result.devices.length === 0) {
|
|
18
|
+
const supportUrl = supportPageUrl(authed.baseUrl);
|
|
19
|
+
let email = null;
|
|
20
|
+
try {
|
|
21
|
+
email = (await authed.client.accessStatus()).email;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Best-effort: the empty-state copy still points at /support without it.
|
|
25
|
+
}
|
|
26
|
+
deps.io.out(`No devices yet. Install Notifai from ${supportUrl}, ${sameAccountSignInLine(email)}, and allow notifications.`);
|
|
27
|
+
return EXIT.ok;
|
|
28
|
+
}
|
|
29
|
+
for (const d of result.devices) {
|
|
30
|
+
deps.io.out(`${d.device_id} ${d.display_name} ${d.platform} ${d.status_message ?? 'Working'}`);
|
|
31
|
+
}
|
|
32
|
+
return EXIT.ok;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
return reportError(deps, err);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Devices as data, for surfaces that render them themselves.
|
|
40
|
+
*
|
|
41
|
+
* `devicesCommand` prints and returns an exit code, which is the right shape
|
|
42
|
+
* for a command and the wrong one for a menu that wants to show names beside
|
|
43
|
+
* checkboxes. Silent on every failure by design: the interactive app already
|
|
44
|
+
* shows the credential and connectivity state on its status card, so a second
|
|
45
|
+
* error line here would be reporting the same fault twice.
|
|
46
|
+
*/
|
|
47
|
+
export async function deviceInventory(deps) {
|
|
48
|
+
if (!deps.store.load())
|
|
49
|
+
return null;
|
|
50
|
+
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
51
|
+
const authed = authedClient(deps, config);
|
|
52
|
+
if (!authed)
|
|
53
|
+
return null;
|
|
54
|
+
try {
|
|
55
|
+
return (await authed.client.listDevices()).devices;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Whether a device is in a state where a notification would actually arrive. */
|
|
62
|
+
export function canDeviceReceive(device) {
|
|
63
|
+
return deviceCanReceive(device);
|
|
64
|
+
}
|
|
65
|
+
export async function capabilitiesCommand(deps, flags) {
|
|
66
|
+
// Locally, and with the same message `send` gives. Spending a round trip to
|
|
67
|
+
// have the server answer "Request validation failed" told the caller neither
|
|
68
|
+
// which flag was wrong nor what it accepts.
|
|
69
|
+
if (flags.platform !== undefined && !PLATFORMS.includes(flags.platform)) {
|
|
70
|
+
deps.io.err(`Unknown platform "${flags.platform}" — use ${PLATFORMS.join(' or ')}.`);
|
|
71
|
+
return EXIT.usage;
|
|
72
|
+
}
|
|
73
|
+
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
74
|
+
const credential = deps.store.load();
|
|
75
|
+
const baseUrl = resolvedBaseUrl(config, credential);
|
|
76
|
+
const client = makeClient(deps, baseUrl, null);
|
|
77
|
+
try {
|
|
78
|
+
const doc = await client.capabilities(flags.platform ?? 'ios');
|
|
79
|
+
if (flags.json) {
|
|
80
|
+
deps.io.out(JSON.stringify(doc, null, 2));
|
|
81
|
+
return EXIT.ok;
|
|
82
|
+
}
|
|
83
|
+
deps.io.out(`${doc.platform} capability contract v${doc.schema_version} (payload limit ${doc.payload_limit_bytes} bytes)`);
|
|
84
|
+
for (const field of doc.fields) {
|
|
85
|
+
deps.io.out(` ${field.path}: ${field.status}${field.reason ? ` — ${field.reason}` : ''}`);
|
|
86
|
+
}
|
|
87
|
+
return EXIT.ok;
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
return reportError(deps, err);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function supportPageUrl(baseUrl) {
|
|
94
|
+
return `${baseUrl.replace(/\/$/, '')}/support`;
|
|
95
|
+
}
|
|
96
|
+
/** Same-account line for the device hop; prefers the real email when known. */
|
|
97
|
+
export function sameAccountSignInLine(email) {
|
|
98
|
+
return email
|
|
99
|
+
? `sign in with the same email as this account (${email})`
|
|
100
|
+
: 'sign in with the same email as this account';
|
|
101
|
+
}
|
|
102
|
+
export function deviceInstallRemedy(options) {
|
|
103
|
+
const support = supportPageUrl(options.baseUrl);
|
|
104
|
+
const sameEmail = sameAccountSignInLine(options.email);
|
|
105
|
+
if (options.devices.length === 0) {
|
|
106
|
+
return (`open the install steps at ${support} on your iPhone, ` +
|
|
107
|
+
`install Notifai, ${sameEmail}, and allow notifications`);
|
|
108
|
+
}
|
|
109
|
+
if (options.devices.some((d) => d.permission_status === 'denied')) {
|
|
110
|
+
return 'allow notifications for Notifai in iPhone Settings';
|
|
111
|
+
}
|
|
112
|
+
return 'open Notifai on your iPhone and allow its notification prompt';
|
|
113
|
+
}
|
|
114
|
+
export function deviceCanReceive(device) {
|
|
115
|
+
const receiveIsFloored = device.support?.state === 'must_update' &&
|
|
116
|
+
device.support.affected_operation === 'receive_notifications';
|
|
117
|
+
return (!receiveIsFloored &&
|
|
118
|
+
device.registration_healthy &&
|
|
119
|
+
(device.permission_status === 'authorized' || device.permission_status === 'provisional'));
|
|
120
|
+
}
|
|
121
|
+
export function readyIosDevices(devices) {
|
|
122
|
+
return devices.filter((device) => device.platform === 'ios' && deviceCanReceive(device));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=commands-devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-devices.js","sourceRoot":"","sources":["../src/commands-devices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SkillScope } from './native-skills.js';
|
|
2
|
+
import { type Readiness, type ReadinessRefresh, type ReadinessState } from './readiness.js';
|
|
3
|
+
import { type CommandDeps } from './commands-core.js';
|
|
4
|
+
/**
|
|
5
|
+
* Read the whole setup once, in dependency order.
|
|
6
|
+
*
|
|
7
|
+
* Descent stops where a prerequisite is missing: without a credential there is
|
|
8
|
+
* nothing to ask the server with, and without a reachable server a contract
|
|
9
|
+
* mismatch is unknowable rather than absent. Those downstream states report
|
|
10
|
+
* `unknown`, which is the honest answer and keeps a network outage from
|
|
11
|
+
* looking like a broken install.
|
|
12
|
+
*/
|
|
13
|
+
export declare function assessReadiness(deps: CommandDeps, options?: {
|
|
14
|
+
skillScope?: SkillScope;
|
|
15
|
+
previous?: Readiness;
|
|
16
|
+
refresh?: readonly ReadinessRefresh[];
|
|
17
|
+
}): Promise<Readiness>;
|
|
18
|
+
export declare function doctorCommand(deps: CommandDeps, flags: {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
}, options?: {
|
|
21
|
+
readiness?: Readiness;
|
|
22
|
+
}): Promise<number>;
|
|
23
|
+
/** One line telling the reader what to actually do about a state. */
|
|
24
|
+
export declare function remedyLine(state: ReadinessState): string;
|